• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1<!DOCTYPE html>
2<body>
3<pre id="log"></pre>
4<script src="../resources/runner.js"></script>
5<div id="sandbox" style="display:none"></div>
6<script>
7var sandbox = document.getElementById('sandbox');
8var node = sandbox;
9for (var i = 0; i < 200; ++i)
10    node = node.appendChild(document.createElement('div'));
11var elems = [];
12for (var i = 0; i < 50000; ++i)
13    elems[i] = document.createElement('div');
14var observing = false;
15
16var observer = new WebKitMutationObserver(listener);
17var tickledSpan = document.createElement('span');
18observer.observe(tickledSpan, {attributes: true});
19
20function resetState() {
21    window.start = null;
22    window.numRuns = 25;
23    window.times = [];
24}
25
26function runAgain() {
27    tickledSpan.setAttribute('data-foo', numRuns);
28}
29
30function listener(mutations) {
31    if (start) {
32        var time = Date.now() - start;
33        times.push(time);
34        PerfTestRunner.log(time);
35    }
36    if (numRuns-- >= 0) {
37        runAgain();
38        if (observing)
39            observer.disconnect()
40        node.innerHTML = '';
41        if (observing)
42            observer.observe(sandbox, {childList: true, subtree: true});
43        start = Date.now();
44        for (var i = 0; i < elems.length; ++i)
45            node.appendChild(elems[i]);
46    } else {
47        PerfTestRunner.logStatistics(times);
48        if (!observing) {
49            observing = true;
50            resetState();
51            PerfTestRunner.log('\n------------\n');
52            PerfTestRunner.log('Running ' + numRuns + ' times with observation');
53            setTimeout(runAgain, 0);
54        }
55    }
56}
57
58resetState();
59PerfTestRunner.log('Running ' + numRuns + ' times without observation');
60window.addEventListener('load', runAgain);
61</script>
62</body>
63