Index: benchmarks/spinning-balls/v.js |
diff --git a/benchmarks/spinning-balls/v.js b/benchmarks/spinning-balls/v.js |
index 87366d939303312af2fc67a38779940a45feb66e..bd009738872740a9a1de2fe02949439479d1749a 100644 |
--- a/benchmarks/spinning-balls/v.js |
+++ b/benchmarks/spinning-balls/v.js |
@@ -57,6 +57,11 @@ var renderingStartTime = void 0; |
var scene = void 0; |
var pausePlot = void 0; |
var splayTree = void 0; |
+var numberOfFrames = 0; |
+var sumOfSquaredPauses = 0; |
+var benchmarkStartTime = void 0; |
+var benchmarkTimeLimit = void 0; |
+var pauseDistribution = []; |
function Point(x, y, z, payload) { |
@@ -343,9 +348,43 @@ Scene.prototype.draw = function () { |
}; |
+function updateStats(pause) { |
+ numberOfFrames++; |
+ if (pause > 20) { |
+ sumOfSquaredPauses += (pause - 20) * (pause - 20); |
+ } |
+ pauseDistribution[pause / 10] |= 0; |
+ pauseDistribution[pause / 10]++; |
+} |
+ |
+ |
+function renderStats() { |
+ var msg = document.createElement("p"); |
+ msg.innerHTML = "Score " + |
+ Math.round(numberOfFrames * 1000 / sumOfSquaredPauses); |
+ var table = document.createElement("table"); |
+ table.align = "center"; |
+ for (var i = 0; i < pauseDistribution.length; i++) { |
+ if (pauseDistribution[i] > 0) { |
+ var row = document.createElement("tr"); |
+ var time = document.createElement("td"); |
+ var count = document.createElement("td"); |
+ time.innerHTML = i*10 + "-" + (i+1)*10 + "ms"; |
+ count.innerHTML = " => " + pauseDistribution[i]; |
+ row.appendChild(time); |
+ row.appendChild(count); |
+ table.appendChild(row); |
+ } |
+ } |
+ div.appendChild(msg); |
+ div.appendChild(table); |
+} |
+ |
+ |
function render() { |
if (typeof renderingStartTime === 'undefined') { |
renderingStartTime = Date.now(); |
+ benchmarkStartTime = renderingStartTime; |
} |
ModifyPointsSet(); |
@@ -359,12 +398,36 @@ function render() { |
pausePlot.draw(); |
+ updateStats(pause); |
+ |
div.innerHTML = |
livePoints.count + "/" + dyingPoints.count + " " + |
- pause + "(max = " + pausePlot.maxPause + ") ms" ; |
+ pause + "(max = " + pausePlot.maxPause + ") ms " + |
+ numberOfFrames + " frames"; |
+ |
+ if (renderingEndTime < benchmarkStartTime + benchmarkTimeLimit) { |
+ // Schedule next frame. |
+ requestAnimationFrame(render); |
+ } else { |
+ renderStats(); |
+ } |
+} |
- // Schedule next frame. |
- requestAnimationFrame(render); |
+ |
+function renderForm() { |
+ form = document.createElement("form"); |
+ form.setAttribute("action", "javascript:start()"); |
+ var label = document.createTextNode("Time limit in seconds "); |
+ var input = document.createElement("input"); |
+ input.setAttribute("id", "timelimit"); |
+ input.setAttribute("value", "60"); |
+ var button = document.createElement("input"); |
+ button.setAttribute("type", "submit"); |
+ button.setAttribute("value", "Start"); |
+ form.appendChild(label); |
+ form.appendChild(input); |
+ form.appendChild(button); |
+ document.body.appendChild(form); |
} |
@@ -382,6 +445,11 @@ function init() { |
pausePlot = new PausePlot(480, 240, 160); |
} |
+function start() { |
+ benchmarkTimeLimit = document.getElementById("timelimit").value * 1000; |
+ document.body.removeChild(form); |
+ init(); |
+ render(); |
+} |
-init(); |
-render(); |
+renderForm(); |