Initial patch.
[vuplus_webkit] / PerformanceTests / Parser / resources / runner.js
diff --git a/PerformanceTests/Parser/resources/runner.js b/PerformanceTests/Parser/resources/runner.js
new file mode 100644 (file)
index 0000000..3fc0b4f
--- /dev/null
@@ -0,0 +1,95 @@
+function log(text) {
+    document.getElementById("log").innerHTML += text + "\n";
+    window.scrollTo(0, document.body.height);
+}
+
+function loadFile(path) {
+    var xhr = new XMLHttpRequest();
+    xhr.open("GET", path, false);
+    xhr.send(null);
+    return xhr.responseText;
+}
+
+var runCount = -1;
+var runFunction = function() {};
+var completedRuns = -1; // Discard the any runs < 0.
+var times = [];
+
+function computeAverage(values) {
+    var sum = 0;
+    for (var i = 0; i < values.length; i++)
+        sum += values[i];
+    return sum / values.length;
+}
+
+function computeMax(values) {
+    var max = values.length ? values[0] : 0;
+    for (var i = 1; i < values.length; i++) {
+        if (max < values[i])
+            max = values[i];
+    }
+    return max;
+}
+
+function computeMedian(values) {
+    values.sort(function(a, b) { return a - b; });
+    var len = values.length;
+    if (len % 2)
+        return values[(len-1)/2];
+    return (values[len/2-1] + values[len/2]) / 2;
+}
+
+function computeMin(values) {
+    var min = values.length ? values[0] : 0;
+    for (var i = 1; i < values.length; i++) {
+        if (min > values[i])
+            min = values[i];
+    }
+    return min;
+}
+
+function computeStdev(values) {
+    var average = computeAverage(values);
+    var sumOfSquaredDeviations = 0;
+    for (var i = 0; i < values.length; ++i) {
+        var deviation = values[i] - average;
+        sumOfSquaredDeviations += deviation * deviation;
+    }
+    return Math.sqrt(sumOfSquaredDeviations / values.length);
+}
+
+function logStatistics(times) {
+    log("");
+    log("avg " + computeAverage(times));
+    log("median " + computeMedian(times));
+    log("stdev " + computeStdev(times));
+    log("min " + computeMin(times));
+    log("max " + computeMax(times));
+}
+
+function run() {
+    var start = new Date();
+    for (var i = 0; i < 10; ++i)
+        window.runFunction();
+    var time = new Date() - start;
+    completedRuns++;
+    if (completedRuns <= 0) {
+        log("Ignoring warm-up run (" + time + ")");
+    } else {
+        times.push(time);
+        log(time);
+    }
+    if (completedRuns < window.runCount) {
+        window.setTimeout(run, 0);
+    } else {
+        logStatistics(times);
+    }
+}
+
+function start(runCount, runFunction) {
+    window.runCount = runCount;
+    window.runFunction = runFunction;
+
+    log("Running " + runCount + " times");
+    run();
+}