diff --git a/src/browser/Page.zig b/src/browser/Page.zig index 5940d2c5..c1350a0e 100644 --- a/src/browser/Page.zig +++ b/src/browser/Page.zig @@ -1243,6 +1243,11 @@ pub fn notifyPerformanceObservers(self: *Page, entry: *Performance.Entry) !void } } + try self.schedulePerformanceObserverDelivery(); +} + +/// Schedules async delivery of buffered performance observer records. +pub fn schedulePerformanceObserverDelivery(self: *Page) !void { // Already scheduled. if (self._performance_delivery_scheduled) { return; diff --git a/src/browser/webapi/PerformanceObserver.zig b/src/browser/webapi/PerformanceObserver.zig index 088128b1..38f2a028 100644 --- a/src/browser/webapi/PerformanceObserver.zig +++ b/src/browser/webapi/PerformanceObserver.zig @@ -116,6 +116,7 @@ pub fn observe( // Deliver existing entries if buffered option is set. // Per spec, buffered is only valid with the type option, not entryTypes. + // Delivery is async via a queued task, not synchronous. if (options.buffered and options.type != null) { for (page.window._performance._entries.items) |entry| { if (self.interested(entry)) { @@ -123,7 +124,7 @@ pub fn observe( } } if (self.hasRecords()) { - try self.dispatch(page); + try page.schedulePerformanceObserverDelivery(); } } }