blob: e7fcf059fb1abb10c0697577822a4723b3ef7253 [file] [log] [blame]
Nicolás Peña Morenoa8d8e612019-07-08 17:08:111<!DOCTYPE HTML>
2<meta charset=utf-8>
3<title>Element Timing: observe element with buffered flag</title>
4<body>
5<style>
6body {
7 margin: 0;
8}
9</style>
10<script src="/resources/testharness.js"></script>
11<script src="/resources/testharnessreport.js"></script>
12<script src="resources/element-timing-helpers.js"></script>
13<script>
14 async_test(t => {
Stephen McGruerdcfc14d2020-04-16 13:23:0315 assert_implements(window.PerformanceElementTiming, "PerformanceElementTiming is not implemented");
Nicolás Peña Morenoa8d8e612019-07-08 17:08:1116 const beforeRender = performance.now();
17 const img = document.createElement('img');
Nicolás Peña Morenoa8d8e612019-07-08 17:08:1118 // Initial observer used to know when entry has been dispatched
19 new PerformanceObserver(() => {
20 // Second observer should require buffered flag to receive the already-dispatched entry.
21 new PerformanceObserver(t.step_func_done(entryList => {
22 assert_equals(entryList.getEntries().length, 1);
23 const entry = entryList.getEntries()[0];
24 const pathname = window.location.origin + '/images/black-rectangle.png';
25 checkElement(entry, pathname, 'my_image', 'my_id', beforeRender, document.getElementById('my_id'));
26 // Test that viewport size is at least 100, so element is fully visible.
27 assert_greater_than_equal(document.documentElement.clientWidth, 100, 'Width should be >= 100');
28 assert_greater_than_equal(document.documentElement.clientHeight, 100, 'Height should be >= 100');
29
30 checkRect(entry, [0, 100, 0, 50]);
31 checkNaturalSize(entry, 100, 50);
32 })).observe({type: 'element', buffered: true});
33 }).observe({type: 'element'});
34 img.src = '/images/black-rectangle.png';
35 img.setAttribute('elementtiming', 'my_image');
36 img.setAttribute('id', 'my_id');
37 document.body.appendChild(img);
38 }, 'Element Timing entries are observable via buffered flag.');
39</script>
40</body>