node icon indicating copy to clipboard operation
node copied to clipboard

src: remove dependency on wrapper-descriptor-based cpp heap

Open joyeecheung opened this issue 9 months ago • 4 comments

This is baking for the V8 12.5 upgrade so the base branch is canary-base. Original PR and reviews are in https://github.com/nodejs/node-v8/pull/284

As V8 is moving towards built-in CppHeap creation, change the management so that the automatic CppHeap creation on Node.js's end is also enforced at Isolate creation time.

  1. If embedder uses NewIsolate(), either they use IsolateSettings::cpp_heap to specify a CppHeap that will be owned by V8, or if it's not configured, Node.js will create a CppHeap that will be owned by V8.
  2. If the embedder uses SetIsolateUpForNode(), IsolateSettings::cpp_heap will be ignored (as V8 has deprecated attaching CppHeap post-isolate-creation). The embedders need to ensure that the v8::Isolate has a CppHeap attached while it's still used by Node.js, preferably using v8::CreateParams.

See https://issues.chromium.org/issues/42203693 for details. In future version of V8, this CppHeap will be created by V8 if not provided, and we can remove our own "if no CppHeap provided, create one" code in NewIsolate().

This also deprecates node::SetCppgcReference() in favor of v8::Object::Wrap() since the wrapper descriptor is no longer relevant. It is still kept as a compatibility layer for addons that need to also work on Node.js versions without v8::Object::Wrap().

Fixes: https://github.com/nodejs/node-v8/issues/283 Fixes: https://github.com/nodejs/node/issues/52718

joyeecheung avatar May 21 '24 15:05 joyeecheung