From afbd927fc0e0f953e94d5a9c3791564d69192b5a Mon Sep 17 00:00:00 2001 From: egrs Date: Tue, 17 Feb 2026 15:58:38 +0100 Subject: [PATCH] support buffered option in PerformanceObserver.observe() When buffered is true, deliver existing performance entries that match the observer's interest immediately, per the Performance Observer spec. --- .../performance_observer.html | 28 +++++++++++++++++++ src/browser/webapi/PerformanceObserver.zig | 12 ++++++++ 2 files changed, 40 insertions(+) diff --git a/src/browser/tests/performance_observer/performance_observer.html b/src/browser/tests/performance_observer/performance_observer.html index 7b5b6c9e..efa90e80 100644 --- a/src/browser/tests/performance_observer/performance_observer.html +++ b/src/browser/tests/performance_observer/performance_observer.html @@ -69,3 +69,31 @@ + + diff --git a/src/browser/webapi/PerformanceObserver.zig b/src/browser/webapi/PerformanceObserver.zig index ad130c97..cd6a672e 100644 --- a/src/browser/webapi/PerformanceObserver.zig +++ b/src/browser/webapi/PerformanceObserver.zig @@ -113,6 +113,18 @@ pub fn observe( // Update interests. self._interests = interests; + + // Deliver existing entries if buffered option is set. + if (options.buffered) { + for (page.window._performance._entries.items) |entry| { + if (self.interested(entry)) { + try self._entries.append(page.arena, entry); + } + } + if (self.hasRecords()) { + try self.dispatch(page); + } + } } pub fn disconnect(self: *PerformanceObserver, page: *Page) void {