• 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 observing = false;
9
10var elems = [];
11for (var i = 0; i < 50000; ++i)
12    elems[i] = document.createElement('div');
13var observer = new WebKitMutationObserver(listener);
14var tickledSpan = document.createElement('span');
15observer.observe(tickledSpan, {attributes: true});
16
17function resetState() {
18    window.start = null;
19    window.numRuns = 25;
20    window.times = [];
21}
22
23function runAgain() {
24    tickledSpan.setAttribute('data-foo', numRuns);
25}
26
27function listener(mutations) {
28    if (start) {
29        var time = Date.now() - start;
30        times.push(time);
31        PerfTestRunner.log(time);
32    }
33    if (numRuns-- >= 0) {
34        runAgain();
35        if (observing)
36            observer.disconnect()
37        sandbox.innerHTML = '';
38        if (observing)
39            observer.observe(sandbox, {childList: true});
40        start = Date.now();
41        for (var i = 0; i < elems.length; ++i)
42            sandbox.appendChild(elems[i]);
43    } else {
44        PerfTestRunner.logStatistics(times);
45        if (!observing) {
46            observing = true;
47            resetState();
48            PerfTestRunner.log('\n------------\n');
49            PerfTestRunner.log('Running ' + numRuns + ' times with observation');
50            setTimeout(runAgain, 0);
51        }
52    }
53}
54
55resetState();
56PerfTestRunner.log('Running ' + numRuns + ' times without observation');
57window.addEventListener('load', runAgain);
58</script>
59</body>
60