prefer low priority queue to execute performance observer

This commit is contained in:
Halil Durak
2025-12-22 16:20:14 +03:00
parent 7c1758a90f
commit e1ba5dfab3
2 changed files with 28 additions and 11 deletions

View File

@@ -971,16 +971,6 @@ pub fn tick(self: *Page) void {
_ = self.scheduler.run() catch |err| { _ = self.scheduler.run() catch |err| {
log.err(.page, "tick", .{ .err = 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(); 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 { pub fn registerMutationObserver(self: *Page, observer: *MutationObserver) !void {

View File

@@ -102,6 +102,8 @@ pub fn measure(
page, page,
); );
try self._entries.append(page.arena, m._proto); try self._entries.append(page.arena, m._proto);
// Notify about the change.
try page.notifyPerformanceObservers(m._proto);
return m; return m;
}, },
.start_mark => |start_mark| { .start_mark => |start_mark| {
@@ -125,12 +127,16 @@ pub fn measure(
page, page,
); );
try self._entries.append(page.arena, m._proto); try self._entries.append(page.arena, m._proto);
// Notify about the change.
try page.notifyPerformanceObservers(m._proto);
return m; return m;
}, },
}; };
const m = try Measure.init(name, null, 0.0, self.now(), null, page); const m = try Measure.init(name, null, 0.0, self.now(), null, page);
try self._entries.append(page.arena, m._proto); try self._entries.append(page.arena, m._proto);
// Notify about the change.
try page.notifyPerformanceObservers(m._proto);
return m; return m;
} }