Fix typo bug in Speedometer/resources/main.js
[WebKit-https.git] / PerformanceTests / Speedometer / InteractiveRunner.html
1 <!DOCTYPE html>
2 <html>
3 <head>
4 <title>DoYouEvenBench</title>
5 <script src="resources/benchmark-runner.js" defer></script>
6 <script src="resources/tests.js" defer></script>
7 <style>
8 iframe { border: 1px solid black; }
9 ol { list-style: none; margin: 0; padding: 0; }
10 ol ol { margin-left: 2em; list-position: outside; }
11 .running { text-decoration: underline; }
12 .ran { color: grey; }
13 nav { position: absolute; right: 10px; }
14 </style>
15 </head>
16 <body>
17 <script>
18
19 function formatTestName(suiteName, testName) {
20     return suiteName + (testName ? '/' + testName : '');
21 }
22
23 function createUIForSuites(suites, onstep, onrun) {
24     var control = document.createElement('nav');
25     var ol = document.createElement('ol');
26     var checkboxes = [];
27     for (var suiteIndex = 0; suiteIndex < suites.length; suiteIndex++) {
28         var suite = suites[suiteIndex];
29         var li = document.createElement('li');
30         var checkbox = document.createElement('input');
31         checkbox.id = suite.name;
32         checkbox.type = 'checkbox';
33         checkbox.checked = !suite.disabled;
34         checkbox.onchange = (function (suite, checkbox) { return function () { suite.disabled = !checkbox.checked; } })(suite, checkbox);
35         checkbox.onchange();
36         checkboxes.push(checkbox);
37
38         li.appendChild(checkbox);
39         var label = document.createElement('label');
40         label.appendChild(document.createTextNode(formatTestName(suite.name)));
41         li.appendChild(label);
42         label.htmlFor = checkbox.id;
43
44         var testList = document.createElement('ol');
45         for (var testIndex = 0; testIndex < suite.tests.length; testIndex++) {
46             var testItem = document.createElement('li');
47             var test = suite.tests[testIndex];
48             var anchor = document.createElement('a');
49             anchor.id = suite.name + '-' + test.name;
50             test.anchor = anchor;
51             anchor.appendChild(document.createTextNode(formatTestName(suite.name, test.name)));
52             testItem.appendChild(anchor);
53             testList.appendChild(testItem);
54         }
55         li.appendChild(testList);
56
57         ol.appendChild(li);
58     }
59
60     control.appendChild(ol);
61
62     var button = document.createElement('button');
63     button.textContent = 'Step';
64     button.onclick = onstep;
65     control.appendChild(button);
66
67     var button = document.createElement('button');
68     button.textContent = 'Run';
69     button.onclick = onrun;
70     control.appendChild(button);
71
72     return control;
73 }
74
75 function startTest() {
76     var runner = new BenchmarkRunner(Suites, {
77         willRunTest: function (suite, test) {
78             test.anchor.classList.add('running');
79         },
80         didRunTest: function (suite, test) {
81             var classList = test.anchor.classList;
82             classList.remove('running');
83             classList.add('ran');
84         },
85         didRunSuites: function (measuredValues) {
86             var results = '';
87             for (var suiteName in measuredValues.tests) {
88                 var suiteResults = measuredValues.tests[suiteName];
89                 for (var testName in suiteResults.tests) {
90                     var testResults = suiteResults.tests[testName];
91                     for (var subtestName in testResults.tests) {
92                         results += suiteName + ' : ' + testName + ' : ' + subtestName
93                             + ': ' + testResults.tests[subtestName] + ' ms\n';
94                     }
95                 }
96                 results += suiteName + ' : ' + suiteResults.total + ' ms\n';
97             }
98             results += 'Total : ' + measuredValues.total + ' ms\n';
99
100             if (!results)
101                 return;
102
103             var pre = document.createElement('pre');
104             document.body.appendChild(pre);
105             pre.textContent = results;
106         }
107     });
108
109     var currentState = null;
110
111     // Don't call step while step is already executing.
112     document.body.appendChild(createUIForSuites(Suites,
113         function () { runner.step(currentState).then(function (state) { currentState = state; }); },
114         function () { runner.runAllSteps(currentState); currentState = null; }));
115 }
116
117 window.addEventListener('load', startTest);
118
119 </script>
120 </body>
121 </html>