diff --git a/src/browser/Page.zig b/src/browser/Page.zig index 47983190..11343f2d 100644 --- a/src/browser/Page.zig +++ b/src/browser/Page.zig @@ -971,16 +971,6 @@ pub fn tick(self: *Page) void { _ = self.scheduler.run() catch |err| { log.err(.page, "tick", .{ .err = err }); }; - - // Dispatch performance observer events. - for (self._performance_observers.items) |observer| { - if (observer.hasRecords()) { - observer.dispatch(self) catch |err| { - log.err(.page, "tcik", .{ .err = err }); - }; - } - } - self.js.runMicrotasks(); } @@ -1088,7 +1078,28 @@ pub fn notifyPerformanceObservers(self: *Page, entry: *Performance.Entry) !void } } - self._performance_delivery_scheduled = true; + if (self._performance_delivery_scheduled == false) { + self._performance_delivery_scheduled = true; + try self.scheduler.add( + self, + struct { + fn run(_page: *anyopaque) anyerror!?u32 { + const page: *Page = @ptrCast(@alignCast(_page)); + page._performance_delivery_scheduled = true; + // Dispatch performance observer events. + for (page._performance_observers.items) |observer| { + if (observer.hasRecords()) { + try observer.dispatch(page); + } + } + + return null; + } + }.run, + 0, + .{ .low_priority = true }, + ); + } } pub fn registerMutationObserver(self: *Page, observer: *MutationObserver) !void { diff --git a/src/browser/webapi/Performance.zig b/src/browser/webapi/Performance.zig index 0bbab23b..9118b2f5 100644 --- a/src/browser/webapi/Performance.zig +++ b/src/browser/webapi/Performance.zig @@ -102,6 +102,8 @@ pub fn measure( page, ); try self._entries.append(page.arena, m._proto); + // Notify about the change. + try page.notifyPerformanceObservers(m._proto); return m; }, .start_mark => |start_mark| { @@ -125,12 +127,16 @@ pub fn measure( page, ); try self._entries.append(page.arena, m._proto); + // Notify about the change. + try page.notifyPerformanceObservers(m._proto); return m; }, }; const m = try Measure.init(name, null, 0.0, self.now(), null, page); try self._entries.append(page.arena, m._proto); + // Notify about the change. + try page.notifyPerformanceObservers(m._proto); return m; }