<!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) {
    assert_implements(window.PerformanceElementTiming, "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 pathname = window.location.origin + '/element-timing/' + 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>
