mirror of
https://github.com/lightpanda-io/browser.git
synced 2026-04-03 16:10:29 +00:00
Optimize toa storage in v8 object.
We're currently using Get/SetInternalField to store our toa instance in v8. This appears to be meant for v8 data itself, as it participates in the GC's referencing counting. This is a bit obvious by the fact that it expects a v8::Data, we we're able to do by wrapping our toa into a v8::External. The Get/SetAlignedPointerFromInternalField seem specifically designed for toa, as it takes a (void *) (thus, not requiring the external wrapper) and, from what I understand is more efficient (presumably because the GC ignores it). Depends on: https://github.com/lightpanda-io/zig-v8-fork/pull/149
This commit is contained in:
@@ -181,11 +181,7 @@ pub fn mapZigInstanceToJs(self: *const Local, js_obj_handle: ?*const v8.Object,
|
||||
.subtype = if (@hasDecl(JsApi.Meta, "subtype")) JsApi.Meta.subype else .node,
|
||||
};
|
||||
|
||||
// Skip setting internal field for the global object (Window)
|
||||
// Window accessors get the instance from context.page.window instead
|
||||
// if (resolved.class_id != @import("../webapi/Window.zig").JsApi.Meta.class_id) {
|
||||
v8.v8__Object__SetInternalField(js_obj.handle, 0, isolate.createExternal(tao));
|
||||
// }
|
||||
v8.v8__Object__SetAlignedPointerInInternalField(js_obj.handle, 0, tao);
|
||||
} else {
|
||||
// If the struct is empty, we don't need to do all
|
||||
// the TOA stuff and setting the internal data.
|
||||
|
||||
Reference in New Issue
Block a user