PerformanceTests's runner.js shouldn't be Parser-specific
[WebKit-https.git] / PerformanceTests / Parser / html5-full-render.html
1 <!DOCTYPE html>
2 <body>
3 <pre id="log"></pre>
4 <script src="../resources/runner.js"></script>
5 <script>
6 var spec = loadFile("resources/html5.html");
7
8 var chunks = [];
9 // The smaller the chunks the more style resolves we do.
10 // Smaller chunk sizes will show more samples in style resolution.
11 // Larger chunk sizes will show more samples in line layout.
12 // Smaller chunk sizes run slower overall, as the per-chunk overhead is high.
13 // Testing on my machine has shown that we need 10-15 chunks before style resolution is always the top sample.
14 var chunkSize = 500000; // 6.09mb / 500k = approx 13 chunks (thus 13 forced layouts/style resolves).
15 var chunkCount = Math.ceil(spec.length / chunkSize);
16 for (var chunkIndex = 0; chunkIndex < chunkCount; chunkIndex++) {
17     var chunk = spec.substring(chunkIndex * chunkSize, chunkSize);
18     chunks.push(chunk);
19 }
20
21 log("Testing " + spec.length + " byte document in " + chunkCount + " " + chunkSize + " byte chunks.");
22
23 function loadChunkedSpecIntoIframe(iframe) {
24     // Note: We've inlined the stylesheets in html5.html.  Before we did that, it seemed to be
25     // random as to whether style resolution would show up at all in the samples.
26     // Talking with Hyatt and jamesr we believe this may be the ignorePendingStylesheets
27     // logic which is triggered off of a timer which is fired after the load completes.
28     // By inlining the stylesheets we're avoiding this race condition.
29     iframe.sandbox = '';  // Prevent external loads which could cause write() to return before completing the parse.
30     iframe.style.width = "600px"; // Have a reasonable size so we're not line-breaking on every character.
31     iframe.style.height = "800px";
32     iframe.contentDocument.open();
33
34     for (var chunkIndex = 0; chunkIndex < chunks.length; chunkIndex++) {
35         iframe.contentDocument.write(chunks[chunkIndex]);
36         // Note that we won't cause a style resolve until we've encountered the <body> element.
37         // Thus the number of chunks counted above is not exactly equal to the number of style resolves.
38         if (iframe.contentDocument.body)
39             iframe.contentDocument.body.clientHeight; // Force a full layout/style-resolve.
40     }
41
42     iframe.contentDocument.close();
43 }
44
45 // Running from the onload callback just makes the UI nicer as it shows the logs before starting the test.
46 window.onload = function() {
47     // Depending on the chosen chunk size, iterations can take over 60s to run on a fast machine, so we only run 2.
48     start(2, function() {
49         var iframe = document.createElement("iframe");
50         document.body.appendChild(iframe);
51         loadChunkedSpecIntoIframe(iframe);
52         document.body.removeChild(iframe);
53     }, 1); // We only loop once for each run, again because this test is so slow.
54 }
55
56 </script>
57 </body>