From 284048648b0bde89eea91cfb3fc7c3b4e7c91ca3 Mon Sep 17 00:00:00 2001 From: Jarred Sumner Date: Sun, 13 Apr 2025 11:29:49 -0700 Subject: [PATCH] Try using reportAbandonedObjectGraph a lot --- src/bun.js/bindings/VM.zig | 6 ++++++ src/bun.js/bindings/bindings.cpp | 5 +++++ src/bun.js/event_loop.zig | 5 +++-- 3 files changed, 14 insertions(+), 2 deletions(-) diff --git a/src/bun.js/bindings/VM.zig b/src/bun.js/bindings/VM.zig index 91507bf1d8..059bd3e4c1 100644 --- a/src/bun.js/bindings/VM.zig +++ b/src/bun.js/bindings/VM.zig @@ -36,6 +36,12 @@ pub const VM = opaque { JSC__VM__holdAPILock(this, ctx, callback); } + pub fn reportAbandonedObjectGraph(vm: *VM) void { + JSC__VM__reportAbandonedObjectGraph(vm); + } + + extern fn JSC__VM__reportAbandonedObjectGraph(vm: *VM) void; + extern fn JSC__VM__getAPILock(vm: *VM) void; extern fn JSC__VM__releaseAPILock(vm: *VM) void; diff --git a/src/bun.js/bindings/bindings.cpp b/src/bun.js/bindings/bindings.cpp index 435b614421..80fdefbcc1 100644 --- a/src/bun.js/bindings/bindings.cpp +++ b/src/bun.js/bindings/bindings.cpp @@ -6187,6 +6187,11 @@ CPP_DECL void JSC__VM__setControlFlowProfiler(JSC__VM* vm, bool isEnabled) } } +extern "C" void JSC__VM__reportAbandonedObjectGraph(JSC__VM* vm) +{ + vm->heap.reportAbandonedObjectGraph(); +} + CPP_DECL void JSC__VM__performOpportunisticallyScheduledTasks(JSC__VM* vm, double until) { vm->performOpportunisticallyScheduledTasks(MonotonicTime::now() + Seconds(until), {}); diff --git a/src/bun.js/event_loop.zig b/src/bun.js/event_loop.zig index 78d30da4f1..8b5b0324fc 100644 --- a/src/bun.js/event_loop.zig +++ b/src/bun.js/event_loop.zig @@ -1348,7 +1348,6 @@ pub const EventLoop = struct { } } - this.processGCTimer(); this.processGCTimer(); loop.tick(); @@ -1393,7 +1392,9 @@ pub const EventLoop = struct { ctx.onAfterEventLoop(); } - pub fn processGCTimer(_: *EventLoop) void {} + pub fn processGCTimer(this: *EventLoop) void { + this.virtual_machine.jsc.reportAbandonedObjectGraph(); + } pub fn tick(this: *EventLoop) void { JSC.markBinding(@src());