4 <title>DoYouEvenBench</title>
5 <script src="resources/benchmark-runner.js" defer></script>
6 <script src="resources/tests.js" defer></script>
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; }
13 nav { position: absolute; right: 10px; }
19 function formatTestName(suiteName, testName) {
20 return suiteName + (testName ? '/' + testName : '');
23 function createUIForSuites(suites, onstep, onrun) {
24 var control = document.createElement('nav');
25 var ol = document.createElement('ol');
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);
36 checkboxes.push(checkbox);
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;
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;
51 anchor.appendChild(document.createTextNode(formatTestName(suite.name, test.name)));
52 testItem.appendChild(anchor);
53 testList.appendChild(testItem);
55 li.appendChild(testList);
60 control.appendChild(ol);
62 var button = document.createElement('button');
63 button.textContent = 'Step';
64 button.onclick = onstep;
65 control.appendChild(button);
67 var button = document.createElement('button');
68 button.textContent = 'Run';
69 button.onclick = onrun;
70 control.appendChild(button);
75 function startTest() {
76 var runner = new BenchmarkRunner(Suites, {
77 willRunTest: function (suite, test) {
78 test.anchor.classList.add('running');
80 didRunTest: function (suite, test) {
81 var classList = test.anchor.classList;
82 classList.remove('running');
85 didRunSuites: function (measuredValues) {
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';
96 results += suiteName + ' : ' + suiteResults.total + ' ms\n';
98 results += 'Total : ' + measuredValues.total + ' ms\n';
103 var pre = document.createElement('pre');
104 document.body.appendChild(pre);
105 pre.textContent = results;
109 var currentState = null;
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; }));
117 window.addEventListener('load', startTest);