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 <legendecas@gmail.com>
This commit is contained in:
Joyee Cheung 2023-08-18 15:36:48 +02:00
parent 12354260db
commit 4d0f930183
No known key found for this signature in database
GPG Key ID: 92B78A53C8303B8D

View File

@ -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);
@ -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);