From 4d0f9301836862367640529c5fec0efa1b5689e7 Mon Sep 17 00:00:00 2001 From: Joyee Cheung Date: Fri, 18 Aug 2023 15:36:48 +0200 Subject: [PATCH] bootstrap: only use the isolate snapshot when compiling code cache We do not actually need to deserialize the context and the whole environment to compile the code cache, since code cache are not context-dependent anyway, deserializing just the isolate snapshot is enough. PR-URL: https://github.com/nodejs/node/pull/49288 Reviewed-By: Chengzhong Wu --- src/node_snapshotable.cc | 25 +++++++------------------ 1 file changed, 7 insertions(+), 18 deletions(-) diff --git a/src/node_snapshotable.cc b/src/node_snapshotable.cc index 1d93f846a1a..ee00a9b1c75 100644 --- a/src/node_snapshotable.cc +++ b/src/node_snapshotable.cc @@ -975,21 +975,8 @@ ExitCode BuildSnapshotWithoutCodeCache( ExitCode BuildCodeCacheFromSnapshot(SnapshotData* out, const std::vector& args, const std::vector& exec_args) { - std::vector errors; - auto data_wrapper = out->AsEmbedderWrapper(); - auto setup = CommonEnvironmentSetup::CreateFromSnapshot( - per_process::v8_platform.Platform(), - &errors, - data_wrapper.get(), - args, - exec_args); - if (!setup) { - for (const auto& err : errors) - fprintf(stderr, "%s: %s\n", args[0].c_str(), err.c_str()); - return ExitCode::kBootstrapFailure; - } - - Isolate* isolate = setup->isolate(); + RAIIIsolate raii_isolate(out); + Isolate* isolate = raii_isolate.get(); v8::Locker locker(isolate); Isolate::Scope isolate_scope(isolate); HandleScope handle_scope(isolate); @@ -1002,12 +989,14 @@ ExitCode BuildCodeCacheFromSnapshot(SnapshotData* out, } }); - Environment* env = setup->env(); + Local context = Context::New(isolate); + Context::Scope context_scope(context); + builtins::BuiltinLoader builtin_loader; // Regenerate all the code cache. - if (!env->builtin_loader()->CompileAllBuiltins(setup->context())) { + if (!builtin_loader.CompileAllBuiltins(context)) { return ExitCode::kGenericUserError; } - env->builtin_loader()->CopyCodeCache(&(out->code_cache)); + builtin_loader.CopyCodeCache(&(out->code_cache)); if (per_process::enabled_debug_list.enabled(DebugCategory::MKSNAPSHOT)) { for (const auto& item : out->code_cache) { std::string size_str = FormatSize(item.data.length);