Skip to content

Commit

Permalink
bootstrap: only use the isolate snapshot when compiling code cache
Browse files Browse the repository at this point in the history
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: #49288
Reviewed-By: Chengzhong Wu <legendecas@gmail.com>
  • Loading branch information
joyeecheung authored and ruyadorno committed Sep 28, 2023
1 parent 078efe3 commit 8480280
Showing 1 changed file with 7 additions and 18 deletions.
25 changes: 7 additions & 18 deletions src/node_snapshotable.cc
Original file line number Diff line number Diff line change
Expand Up @@ -975,21 +975,8 @@ ExitCode BuildSnapshotWithoutCodeCache(
ExitCode BuildCodeCacheFromSnapshot(SnapshotData* out,
const std::vector<std::string>& args,
const std::vector<std::string>& exec_args) {
std::vector<std::string> 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);
Expand All @@ -1002,12 +989,14 @@ ExitCode BuildCodeCacheFromSnapshot(SnapshotData* out,
}
});

Environment* env = setup->env();
Local<Context> 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);
Expand Down

0 comments on commit 8480280

Please sign in to comment.