<!DOCTYPE html>
<body>
<pre id="log"></pre>
<script src="../resources/runner.js"></script>
<script src="resources/declarative.js"></script>
<script>

/*
This test tries to measure the overhead associated with parsing and
attaching one shadow root to the tree, as compared to an "ordinary"
element. To measure this, we make three timing measurements:

  t1 = A + (b + d)x
  t2 = A + (c + d)x
  t3 = A + (2b + d)x

where:
  A = fixed overhead associated with parsing and tree building
  b = per light-dom "ordinary" node time
  c = per shadow root time
  d = per "other element" node time. This is the other elements, e.g. <span>
      and <!-- comment --> nodes, mixed in with the test markup. To solve
      for the percent overhead, we need this to be non-zero (see below).
  x = number of repeats of the test block, per run of the test.

we want to solve for:
  (c/b - 1) = percent overhead, per shadow root

So:
  (t2 - t1)/x = c - b = (c/b - 1)b
  (t3 - t1)/x = b
  (c/b - 1) = (t2-t1)/(t3-t1) = percent overhead
*/

const depth = 6;
const copies = 100;
const shadowHtml = getShadowMarkup(true, depth, copies);
const lightDomHtml1 = getShadowMarkup(false, depth, copies, /*lightDomDuplicates=*/1);
const lightDomHtml2 = getShadowMarkup(false, depth, copies, /*lightDomDuplicates=*/2);

PerfTestRunner.measureValue({
    description: 'This benchmark tests the overhead of declarative Shadow DOM',
    unit: 'percent',
    run: function() {
      let total_overhead = 0;
      let total_samples = 0;
      for (let i = 0; i < 100; i++) {
        const t1 = measureParse(lightDomHtml1);
        const t2 = measureParse(shadowHtml);
        const t3 = measureParse(lightDomHtml2);
        if (t2 > t1 && t3 > t1) {
          total_overhead += (t2-t1) / (t3-t1);
          ++total_samples;
        }
      }
      PerfTestRunner.assert_true(total_samples>3,'Too many skipped measurements');
      // The result is the total overhead, in *percent*, *per shadow root*.
      return 100*total_overhead/total_samples;
    }
});
</script>
