test_performance_interactionid_pointerdown.html (2156B)
1 <!DOCTYPE html> 2 <meta charset="utf-8"> 3 <title>Test PerformanceEventTiming interactionId for pointerdown without a pointerup</title> 4 <script src="/tests/SimpleTest/SimpleTest.js"></script> 5 <script src="/tests/SimpleTest/EventUtils.js"></script> 6 <link rel="stylesheet" href="/tests/SimpleTest/test.css" /> 7 8 <div id="target">Click me</div> 9 10 <script> 11 SimpleTest.waitForExplicitFinish(); 12 13 SimpleTest.waitForFocus(async function() { 14 const target = document.getElementById("target"); 15 let observedEntries = []; 16 const events = ['pointerdown']; 17 18 const observerPromise = new Promise(resolve => { 19 new PerformanceObserver((entryList) => { 20 observedEntries = observedEntries.concat( 21 entryList.getEntries().filter(entry => events.includes(entry.name)) 22 ); 23 24 if (observedEntries.length >= 2) { 25 resolve(); 26 } 27 }).observe({ type: "event", buffered: true }); 28 }); 29 30 // Block for ~110ms during pointerdown, the threshold is 104ms for event timing entries. 31 document.getElementById("target").addEventListener("pointerdown", () => { 32 const start = performance.now(); 33 while (performance.now() - start < 110) { 34 // Busy loop to block rendering 35 } 36 }); 37 38 // First: pointerdown with no pointerup. 39 await synthesizeMouseAtCenter(target, { type: "mousedown", button: 0 }); 40 41 // Second: pointerdown with pointerup. 42 await synthesizeMouseAtCenter(target, { type: "mousedown", button: 0 }); 43 await synthesizeMouseAtCenter(target, { type: "mouseup", button: 0 }); 44 45 // Wait for entries to flush. 46 await observerPromise; 47 ok(observedEntries.length >= 2, `Expected at least 2 entries, got ${observedEntries.length}`); 48 49 const first = observedEntries[0]; 50 const second = observedEntries[1]; 51 52 ok(first.name === "pointerdown", "First should be pointerdown"); 53 ok(second.name === "pointerdown", "Second should be pointerdown"); 54 55 is(first.interactionId, 0, "First pointerdown should have interactionId 0"); 56 ok(second.interactionId > 0, "Second pointerdown should have non-zero interactionId"); 57 58 SimpleTest.finish(); 59 }); 60 </script>