Some perf tests time out when ran by run-perf-tests
[WebKit-https.git] / PerformanceTests / Parser / resources / runner.js
1 function log(text) {
2     document.getElementById("log").innerHTML += text + "\n";
3     window.scrollTo(0, document.body.height);
4 }
5
6 function loadFile(path) {
7     var xhr = new XMLHttpRequest();
8     xhr.open("GET", path, false);
9     xhr.send(null);
10     return xhr.responseText;
11 }
12
13 var runCount = -1;
14 var runFunction = function() {};
15 var completedRuns = -1; // Discard the any runs < 0.
16 var times = [];
17
18 function computeAverage(values) {
19     var sum = 0;
20     for (var i = 0; i < values.length; i++)
21         sum += values[i];
22     return sum / values.length;
23 }
24
25 function computeMax(values) {
26     var max = values.length ? values[0] : 0;
27     for (var i = 1; i < values.length; i++) {
28         if (max < values[i])
29             max = values[i];
30     }
31     return max;
32 }
33
34 function computeMedian(values) {
35     values.sort(function(a, b) { return a - b; });
36     var len = values.length;
37     if (len % 2)
38         return values[(len-1)/2];
39     return (values[len/2-1] + values[len/2]) / 2;
40 }
41
42 function computeMin(values) {
43     var min = values.length ? values[0] : 0;
44     for (var i = 1; i < values.length; i++) {
45         if (min > values[i])
46             min = values[i];
47     }
48     return min;
49 }
50
51 function computeStdev(values) {
52     var average = computeAverage(values);
53     var sumOfSquaredDeviations = 0;
54     for (var i = 0; i < values.length; ++i) {
55         var deviation = values[i] - average;
56         sumOfSquaredDeviations += deviation * deviation;
57     }
58     return Math.sqrt(sumOfSquaredDeviations / values.length);
59 }
60
61 function logStatistics(times) {
62     log("");
63     log("avg " + computeAverage(times));
64     log("median " + computeMedian(times));
65     log("stdev " + computeStdev(times));
66     log("min " + computeMin(times));
67     log("max " + computeMax(times));
68 }
69
70 function runLoop()
71 {
72     if (window.completedRuns < window.runCount) {
73         window.setTimeout(run, 0);
74     } else {
75         logStatistics(times);
76         window.doneFunction();
77         if (window.layoutTestController)
78             layoutTestController.notifyDone();
79     }
80 }
81
82 function run() {
83     var start = new Date();
84     for (var i = 0; i < window.loopsPerRun; ++i)
85         window.runFunction();
86     var time = new Date() - start;
87     window.completedRuns++;
88     if (window.completedRuns <= 0) {
89         log("Ignoring warm-up run (" + time + ")");
90     } else {
91         times.push(time);
92         log(time);
93     }
94     runLoop()
95 }
96
97 function start(runCount, runFunction, loopsPerRun, doneFunction) {
98     window.runCount = runCount;
99     window.runFunction = runFunction;
100     window.loopsPerRun = loopsPerRun || 10;
101     window.doneFunction = doneFunction || function() {};
102
103     log("Running " + runCount + " times");
104     runLoop();
105 }
106
107 if (window.layoutTestController) {
108     layoutTestController.waitUntilDone();
109     layoutTestController.dumpAsText();
110 }