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