<!doctype HTML>

<!--
This test creates a grid with 10,000 non-trivial items below the viewport.
It sets content-visibility: auto on the container and adjusts its width continuously.
-->

<style>
#container {
  content-visibility: auto;

  width: 500px;
  height: 500px;
  display: grid;
  border: 1px solid black;
  background: lightblue;
}
.item {
  background: blue;
  margin: 1px;
  width: 10%;
  height: 10%;
}
#spacer {
  height: 200vh;
}
</style>

<template id="item_template">
<div class="item">
  <div style="position: relative; width: 90%;">
    relpos
    <div style="position: absolute; top: 1px; left: 1%">
      abspos
    </div>
  </div>
  <div style="position: absolute; top: 1px; left: 1%">
    abspos
  </div>
  lorem ipsum dolor sit amet
</div>
</template>

<div id=spacer></div>
<div id=container></div>

<script src="../resources/runner.js"></script>
<script>
function construct(n) {
  const specimen = document.importNode(document.getElementById("item_template").content, true).firstElementChild;
  const container = document.getElementById("container");
  for (let i = 0; i < n; ++i) {
    const clone = specimen.cloneNode(true);
    container.appendChild(clone);
  }
}

construct(10000);

let widths = ["400px", "500px"];
let width_index = 0;
function changeStyle() {
  document.getElementById("container").style.width = widths[width_index];
  width_index = 1 - width_index;
}

let testDone = false;
let startTime;
function runTest() {
  if (startTime)
    PerfTestRunner.measureValueAsync(PerfTestRunner.now() - startTime);
  if (testDone)
    return;

  startTime = PerfTestRunner.now();

  changeStyle();
  requestAnimationFrame(runTest);
}

PerfTestRunner.prepareToMeasureValuesAsync({
  unit: 'ms',
  done: () => { testDone = true; container.innerHTML = ""; spacer.style.height = "0px"; },
  iterationCount: 5
});
requestAnimationFrame(runTest);

</script>
