| <!DOCTYPE html> | |
| <html> | |
| <meta charset=utf-8 /> | |
| <title>Event Timing: compare timing of two long clicks | |
| </title> | |
| <button id='button'>Generate a 'click' event</button> | |
| <script src=/resources/testharness.js></script> | |
| <script src=/resources/testharnessreport.js></script> | |
| <script src=/resources/testdriver.js></script> | |
| <script src=/resources/testdriver-vendor.js></script> | |
| <script src=resources/event-timing-test-utils.js></script> | |
| <script> | |
| /* Timeline: | |
| Observer starts | |
| Long click 1 | |
| Long click 2 | |
| Once two clicks have been received by observer, compare the timestamps. | |
| */ | |
| let timeBeforeFirstClick; | |
| let timeAfterFirstClick; | |
| let timeAfterSecondClick; | |
| let observedEntries = []; | |
| async_test(function(t) { | |
| assert_implements(window.PerformanceEventTiming, 'Event Timing is not supported.'); | |
| new PerformanceObserver(t.step_func(entryList => { | |
| observedEntries = observedEntries.concat(entryList.getEntries().filter( | |
| entry => entry.name === 'pointerdown')); | |
| if (observedEntries.length < 2) | |
| return; | |
| assert_not_equals(timeBeforeFirstClick, undefined); | |
| assert_not_equals(timeAfterFirstClick, undefined); | |
| assert_not_equals(timeAfterSecondClick, undefined); | |
| // First click. | |
| verifyClickEvent(observedEntries[0], 'button'); | |
| assert_between_exclusive(observedEntries[0].processingStart, | |
| timeBeforeFirstClick, | |
| timeAfterFirstClick, | |
| "First click's processingStart"); | |
| assert_greater_than(timeAfterFirstClick, observedEntries[0].startTime, | |
| "timeAfterFirstClick should be later than first click's start time."); | |
| // Second click. | |
| verifyClickEvent(observedEntries[1], 'button'); | |
| assert_between_exclusive(observedEntries[1].processingStart, | |
| timeAfterFirstClick, | |
| timeAfterSecondClick, | |
| "Second click's processingStart"); | |
| assert_greater_than(timeAfterSecondClick, observedEntries[1].startTime, | |
| "timeAfterSecondClick should be later than second click's start time."); | |
| t.done(); | |
| })).observe({type: 'event'}); | |
| timeBeforeFirstClick = performance.now(); | |
| clickAndBlockMain('button').then( () => { | |
| timeAfterFirstClick = performance.now(); | |
| clickAndBlockMain('button').then(() => { | |
| timeAfterSecondClick = performance.now(); | |
| }) | |
| }); | |
| }, "Event Timing: compare click timings."); | |
| </script> | |
| </html> |