| 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(); |
| } |