<!DOCTYPE html>
<html>
<meta charset=utf-8 />
<title>Element Timing: buffer elements before onload</title>
<script src=/resources/testharness.js></script>
<script src=/resources/testharnessreport.js></script>
<script src="resources/element-timing-helpers.js"></script>
<body>
<script>
  let beforeRender;
  let img;
  // Number of characters to be read on the initial read, before sleeping.
  // Should be sufficient to do at least a first scan.
  let numInitial = 75;
  let sleep = 500;
  async_test(function(t) {
    if (!window.PerformanceElementTiming) {
      assert_unreached("PerformanceElementTiming is not implemented");
    }
    const img_src = 'resources/progressive-image.py?name=square20.jpg&numInitial='
      + numInitial + '&sleep=' + sleep;
    const observer = new PerformanceObserver(
      t.step_func_done(function(entryList) {
        assert_equals(entryList.getEntries().length, 1);
        const entry = entryList.getEntries()[0];
        const index = window.location.href.lastIndexOf('/');
        const pathname = window.location.href.substring(0, index) + '/' +
            img_src;
        // Since the image is only fully loaded after the sleep, the render timestamp
        // must be greater than |beforeRender| + |sleep|.
        checkElement(entry, pathname, 'my_image', '', beforeRender + sleep, img);
        checkNaturalSize(entry, 20, 20);
      })
    );
    observer.observe({entryTypes: ['element']});

    img = document.createElement('img');
    img.src = img_src;
    img.setAttribute('elementtiming', 'my_image');
    document.body.appendChild(img);
    beforeRender = performance.now();
    t.step_timeout(() => {assert_true(0);}, 2000);
  }, "Element Timing: image render timestamp occurs after it is fully loaded.");
</script>
