Steps to reproduce: 1. Navigate to https://example.com in Safari and wait for content to appear on the screen 2. Open the Web Inspector and paste the following code into the JavaScript console: ``` const po = new PerformanceObserver(() => { console.log('PO handler scope'); }); po.observe({type: 'paint', buffered: true}); console.log('Top-level scope'); ``` 3. Notice the order in which the log statements are printed. In Safari the order is: ``` PO handler scope Top-level scope ``` But in Chrome and Firefox the order is reversed: ``` Top-level scope PO handler scope ``` Based on my reading of the observe processing model in the spec [1] both Chrome and Firefox are correct. The last line in the processing model "5.2 observe() method" reads "Queue the PerformanceObserver task with relevantGlobal as input.", which should defer execution of the observer callback until after the current call stack finishes. [1] https://www.w3.org/TR/performance-timeline/#observe-method
Wondering if there is a WPT for this.
<rdar://problem/102564727>
(In reply to Karl Dubost from comment #1) > Wondering if there is a WPT for this. I took a rough look at the WPT folders and I'm pretty sure there isn't.