2011-01-29 Ryosuke Niwa <rniwa@webkit.org>
[WebKit-https.git] / PerformanceTests / Parser / resources / performance-test.js
1 // A basic performance testing harness.
2
3 function loadFile(path) {
4     var xhr = new XMLHttpRequest();
5     xhr.open("GET", path, false);
6     xhr.send(null);
7     return xhr.responseText;
8 }
9
10 var logDiv;
11
12 function setupLogging() {
13     logDiv = document.createElement("pre");
14     document.body.appendChild(logDiv);
15 }
16
17 function log(text) {
18     logDiv.innerText += text + "\n";
19     window.scrollTo(document.body.height);
20 }
21
22 // FIXME: We should make it possible to configure runCount.
23 var runCount = 20;
24 var completedRuns = -1; // Discard the any runs < 0.
25 var times = [];
26
27 function computeAverage(values) {
28     var sum = 0;
29     for (var i = 0; i < values.length; i++)
30         sum += values[i];
31     return sum / values.length;
32 }
33
34 function computeStdev(values) {
35     var average = computeAverage(values);
36     var sumOfSquaredDeviations = 0;
37     for (var i = 0; i < values.length; ++i) {
38         var deviation = values[i] - average;
39         sumOfSquaredDeviations += deviation * deviation;
40     }
41     return Math.sqrt(sumOfSquaredDeviations / values.length);
42 }
43
44 function logStatistics(times) {
45     log("");
46     log("avg " + computeAverage(times));
47     log("stdev " + computeStdev(times));
48 }
49
50 var testFunction;
51
52 function runPerformanceTest(testFunction) {
53     setupLogging()
54
55     log("Running " + runCount + " times");
56     window.testFunction = testFunction;
57     runOneTest();
58 }
59
60 function runOneTest() {
61     var start = new Date();
62     window.testFunction();
63     var time = new Date() - start;
64     completedRuns++;
65     if (completedRuns <= 0) {
66         log("Ignoring warm-up run (" + time + ")");
67     } else {
68         times.push(time);
69         log(time);
70     }
71     if (completedRuns < runCount) {
72         window.setTimeout(runOneTest, 0);
73     } else {
74         logStatistics(times);
75     }
76 }