f197824cb1d84d2bf418155f96884261fcb189b2
[WebKit-https.git] / PerformanceTests / DoYouEvenBench / resources / main.js
1 window.benchmarkClient = {
2     iterationCount: 20,
3     _timeValues: [],
4     _finishedTestCount: 0,
5     _iterationNumber: 0,
6     _progress: null,
7     _progressCompleted: null,
8     _resultContainer: null,
9     willRunTest: function () { },
10     didRunTest: function () {
11         this._finishedTestCount++;
12         this._progressCompleted.style.width = (this._finishedTestCount * 100 / this.testsCount) + '%';
13     },
14     didRunSuites: function (measuredValues) {
15         this._timeValues.push(measuredValues.total);
16         this._iterationNumber++;
17         this._addResult('Iteration ' + this._iterationNumber, measuredValues.total.toFixed(2) + ' ms');
18     },
19     willStartFirstIteration: function () {
20         // We don't use the real progress element as some implementations animate it.
21         this._progress = document.createElement('div');
22         this._progress.appendChild(document.createElement('div'));
23         this._progress.id = 'progressContainer';
24         document.body.appendChild(this._progress);
25         this._progressCompleted = this._progress.firstChild;
26
27         this._resultContainer = document.createElement('table');
28         var caption = document.createElement('caption');
29         caption.textContent = document.title;
30         this._resultContainer.appendChild(caption);
31         document.body.appendChild(this._resultContainer);
32     },
33     didFinishLastIteration: function () {
34         var values = this._timeValues;
35         var sum = values.reduce(function (a, b) { return a + b; }, 0);
36         var arithmeticMean = sum / values.length;
37         var meanLabel = arithmeticMean.toFixed(2) + ' ms';
38         if (window.Statistics) {
39             var delta = Statistics.confidenceIntervalDelta(0.95, values.length, sum, Statistics.squareSum(values));
40             var precentDelta = delta * 100 / arithmeticMean;
41             meanLabel += ' \xb1 ' + delta.toFixed(2) + ' ms (' + precentDelta.toFixed(2) + '%)';
42         }
43         this._addResult('Arithmetic Mean', meanLabel);
44         this._progress.parentNode.removeChild(this._progress);
45     },
46     _addResult: function (title, value) {
47         var row = document.createElement('tr');
48         var th = document.createElement('th');
49         th.textContent = title;
50         var td = document.createElement('td');
51         td.textContent = value;
52         row.appendChild(th);
53         row.appendChild(td);
54         this._resultContainer.appendChild(row);
55     }
56 }
57
58 function startBenchmark() {
59     var enabledSuites = Suites.filter(function (suite) { return !suite.disabled });
60     var totalSubtestCount = enabledSuites.reduce(function (testsCount, suite) { return testsCount + suite.tests.length; }, 0);
61     benchmarkClient.testsCount = benchmarkClient.iterationCount * totalSubtestCount;
62     var runner = new BenchmarkRunner(Suites, benchmarkClient);
63     runner.runMultipleIterations(benchmarkClient.iterationCount);
64 }
65
66 window.onload = startBenchmark;