Refined power management in SunSpider 1.0.2
[WebKit-https.git] / PerformanceTests / SunSpider / resources / driver-TEMPLATE.html
index 7673b68..0017049 100644 (file)
@@ -44,6 +44,7 @@
 var testIndex = -1;
 var currentRepeat = -1;
 var repeatCount = 10;
+var warmupMS = 8;
 
 var output = [];
 output.length = repeatCount;
@@ -51,6 +52,16 @@ for (var i = 0; i < output.length; i++) {
     output[i] = {};
 }
 
+function warmup()
+{
+    for (var start = new Date; new Date - start < warmupMS; ) {
+        for (var i = 0; i < 100; ++i) {
+            if (Math.atan(Math.acos(Math.asin(Math.random()))) > 4) // Always false.
+                return;
+        }
+    }
+}
+
 function start() 
 {
     window.setTimeout(next, 128);
@@ -62,15 +73,23 @@ function next()
     document.getElementById("frameparent").innerHTML = "<iframe id='testframe'>";
     var testFrame = document.getElementById("testframe");
     if (++testIndex < tests.length) {
-        window.setTimeout(next, 0);
+        // Warm up the CPU a little bit, in case power management clocked it down
+        // or put it to sleep. We're trying to strike a balance here: do enough
+        // work so that all browsers see the CPU at an equal clock rate, but
+        // not so much work that we hide performance problems caused by overly
+        // aggressive power management.
+        warmup();
 
         testFrame.contentDocument.open();
         testFrame.contentDocument.write(testContents[testIndex]);
         testFrame.contentDocument.close();
-    } else if (++currentRepeat < repeatCount) { 
-        window.setTimeout(next, 128);
 
+        window.setTimeout(next, 0);
+    } else if (++currentRepeat < repeatCount) { 
+        document.getElementById("countdown").innerHTML = repeatCount - currentRepeat;
         testIndex = -1;
+
+        window.setTimeout(next, 128);
     } else {
         finish();
     }
@@ -105,8 +124,8 @@ function finish()
 
 </script>
 
-<div id="frameparent">
-</div>
+<h3 id="countdown">warmup</h3>
+<div id="frameparent"></div>
 
 </body>
 </html>