~noskcaj/ubuntu/utopic/jquery/merge

« back to all changes in this revision

Viewing changes to src/sizzle/speed/system/slickspeed.js

  • Committer: Bazaar Package Importer
  • Author(s): Marcelo Jorge Vieira (metal)
  • Date: 2011-05-29 20:21:27 UTC
  • mfrom: (0.1.8 upstream)
  • Revision ID: james.westby@ubuntu.com-20110529202127-yo710urpsj87oqnh
Tags: 1.6.1-1
New upstream release (Closes: #628052)

Show diffs side-by-side

added added

removed removed

Lines of Context:
1
 
//base test functions
2
 
 
3
 
function forEach(iterable, fn, bind){
4
 
        for (var i = 0, j = iterable.length; i < j; i++) fn.call(bind, iterable[i], i, iterable);
5
 
};
6
 
 
7
 
//test start
8
 
 
9
 
window.onload = function load(){
10
 
        
11
 
        var frameworks = {};
12
 
        
13
 
        forEach(document.getElementsByTagName('iframe'), function(iframe){
14
 
                frameworks[iframe.name] = {
15
 
                        'test': window.frames[iframe.name].test,
16
 
                        'selectors': []
17
 
                };
18
 
        });
19
 
        
20
 
        var tbody = document.getElementById('tbody');
21
 
        var tfoot = document.getElementById('tfoot');
22
 
        var lastrow = tfoot.getElementsByTagName('tr')[0];
23
 
        
24
 
        var controls = document.getElementById('controls');
25
 
        
26
 
        var links = controls.getElementsByTagName('a');
27
 
        
28
 
        var start = links[1];
29
 
        var stop = links[0];
30
 
        
31
 
        start.onclick = function(){
32
 
                testRunner();
33
 
                return false;
34
 
        };
35
 
        
36
 
        stop.onclick = function(){
37
 
                clearTimeout(timer);
38
 
                timer = null;
39
 
                return false;
40
 
        };
41
 
        
42
 
        var score = [];
43
 
        var scores = {};
44
 
        
45
 
        var frxi = 0;
46
 
        for (var name in frameworks){
47
 
                var framework = frameworks[name];
48
 
                forEach(window.selectors, function(selector){
49
 
                        framework.selectors.push(selector);
50
 
                });
51
 
                scores[name] = lastrow.getElementsByTagName('td')[frxi];
52
 
                score[name] = 0;
53
 
                frxi++;
54
 
        }
55
 
        
56
 
        var tests = [];
57
 
 
58
 
        forEach(window.selectors, function(selector, i){
59
 
                var frxi = 0;
60
 
                var row = tbody.getElementsByTagName('tr')[i];
61
 
                for (var name in frameworks){
62
 
                        var framework = frameworks[name];
63
 
                        var cell = row.getElementsByTagName('td')[frxi];
64
 
                        tests.push({
65
 
                                'execute': framework.test,
66
 
                                'selector': framework.selectors[i],
67
 
                                'name': name,
68
 
                                'row': row,
69
 
                                'cell' : cell
70
 
                        });
71
 
                        frxi++;
72
 
                }
73
 
        });
74
 
        
75
 
        var timer = null;
76
 
        
77
 
        var testRunner = function(){
78
 
                var test = tests.shift();
79
 
                if (!test) return;
80
 
                var results = test.execute(test.selector);
81
 
                test.cell.className = 'test';
82
 
                test.cell.innerHTML = results.time + ' ms | ' + results.found + ' found';
83
 
                test.cell.speed = results.time;
84
 
                if (results.error){
85
 
                        test.cell.innerHTML = results.time + ' ms | <span class="exception" title="' + results.error + '">error returned</a>';
86
 
                        test.cell.className += ' exception';
87
 
                        test.cell.found = 0;
88
 
                        test.cell.error = true;
89
 
                } else {
90
 
                        test.cell.found = results.found;
91
 
                        test.cell.error = false;
92
 
                }
93
 
                
94
 
                score[test.name] += test.cell.speed;
95
 
                scores[test.name].innerHTML =  '&nbsp;' + score[test.name] + '&nbsp;';
96
 
                
97
 
                if (test.cell == test.row.lastChild) colourRow(test.row);
98
 
                timer = setTimeout(testRunner, 250);
99
 
        };
100
 
        
101
 
        var colourRow = function(row){
102
 
                
103
 
                var cells = [];
104
 
                
105
 
                var tds = row.getElementsByTagName('td');
106
 
                forEach(tds, function(td){
107
 
                        cells.push(td);
108
 
                });
109
 
                
110
 
                var speeds = [];
111
 
                
112
 
                forEach(cells, function(cell, i){
113
 
                        if (!cell.error) speeds[i] = cell.speed;
114
 
                        //error, so we exclude it from colouring
115
 
                        else speeds[i] = 99999999999999999999999;
116
 
                });
117
 
                
118
 
                var min = Math.min.apply(this, speeds);
119
 
                var max = Math.max.apply(this, speeds);
120
 
                
121
 
                var found = [];
122
 
                var mismatch = false;
123
 
                forEach(cells, function(cell, i){
124
 
                        found.push(cell.found);
125
 
                        if (!mismatch){
126
 
                                forEach(found, function(n){
127
 
                                        if (cell.found && n && cell.found != n){
128
 
                                                mismatch = true;
129
 
                                                return;
130
 
                                        }
131
 
                                });
132
 
                        }
133
 
                        if (cell.speed == min) cell.className += ' good';
134
 
                        else if (cell.speed == max) cell.className += ' bad';
135
 
                        else cell.className += ' normal';
136
 
                });
137
 
                
138
 
                if (mismatch){
139
 
                        forEach(cells, function(cell, i){
140
 
                                if (cell.found) cell.className += ' mismatch';
141
 
                        });
142
 
                }
143
 
                
144
 
        };
145
 
        
146
 
 
147
 
};