From 4a81b6b5dd48bbf56631a51772ef739383d5b2c5 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. --- 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 1d93f846a1a981..ee00a9b1c759e4 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);