Commit 231de835 authored by Hitoshi Yoshida's avatar Hitoshi Yoshida Committed by Commit Bot

gin: Set V8 context snapshot as a default snapshot

Thanks to the change in V8 to make external reference table optional,
we can always use v8_context_snapshot.bin on platforms where it is
avaiable.

This CL sets the file as the default snapshot blob, and removes
setting snapshot in Isolate::CreateParam.


Bug: 764576, 789964
Change-Id: I16654eef810efcd0103e9a29659f4616c61f790b
Reviewed-on: https://chromium-review.googlesource.com/802654
Commit-Queue: Hitoshi Yoshida <peria@chromium.org>
Reviewed-by: default avatarRoss McIlroy <rmcilroy@chromium.org>
Reviewed-by: default avatarKentaro Hara <haraken@chromium.org>
Cr-Commit-Position: refs/heads/master@{#522662}
parent bf8135d0
......@@ -4,6 +4,7 @@
import("//testing/test.gni")
import("//v8/gni/v8.gni")
import("//tools/v8_context_snapshot/v8_context_snapshot.gni")
component("gin") {
sources = [
......@@ -82,6 +83,9 @@ component("gin") {
"$root_out_dir/natives_blob.bin",
"$root_out_dir/snapshot_blob.bin",
]
if (use_v8_context_snapshot) {
data += [ "$root_out_dir/v8_context_snapshot.bin" ]
}
}
defines = [ "GIN_IMPLEMENTATION" ]
......@@ -98,7 +102,10 @@ component("gin") {
libs = [ "CoreFoundation.framework" ]
}
configs += [ "//v8:external_startup_data" ]
configs += [
"//tools/v8_context_snapshot:use_v8_context_snapshot",
"//v8:external_startup_data",
]
}
executable("gin_shell") {
......@@ -115,7 +122,10 @@ executable("gin_shell") {
"//v8",
]
configs += [ "//v8:external_startup_data" ]
configs += [
"//tools/v8_context_snapshot:use_v8_context_snapshot",
"//v8:external_startup_data",
]
}
source_set("gin_test") {
......@@ -142,10 +152,14 @@ source_set("gin_test") {
]
deps = [
"//base/test:test_support",
"//tools/v8_context_snapshot",
"//v8",
]
configs += [ "//v8:external_startup_data" ]
configs += [
"//tools/v8_context_snapshot:use_v8_context_snapshot",
"//v8:external_startup_data",
]
}
test("gin_unittests") {
......
......@@ -37,16 +37,12 @@ IsolateHolder::IsolateHolder(
IsolateHolder::IsolateHolder(
scoped_refptr<base::SingleThreadTaskRunner> task_runner,
AccessMode access_mode)
: IsolateHolder(std::move(task_runner),
access_mode,
kAllowAtomicsWait,
nullptr) {}
: IsolateHolder(std::move(task_runner), access_mode, kAllowAtomicsWait) {}
IsolateHolder::IsolateHolder(
scoped_refptr<base::SingleThreadTaskRunner> task_runner,
AccessMode access_mode,
AllowAtomicsWaitMode atomics_wait_mode,
v8::StartupData* startup_data)
AllowAtomicsWaitMode atomics_wait_mode)
: access_mode_(access_mode) {
v8::ArrayBuffer::Allocator* allocator = g_array_buffer_allocator;
CHECK(allocator) << "You need to invoke gin::IsolateHolder::Initialize first";
......@@ -59,14 +55,6 @@ IsolateHolder::IsolateHolder(
params.array_buffer_allocator = allocator;
params.allow_atomics_wait = atomics_wait_mode == kAllowAtomicsWait;
params.external_references = g_reference_table;
if (startup_data) {
CHECK(g_reference_table);
V8Initializer::GetV8ContextSnapshotData(startup_data);
if (startup_data->data) {
params.snapshot_blob = startup_data;
}
}
isolate_ = v8::Isolate::New(params);
SetUp(std::move(task_runner));
......
......@@ -59,8 +59,7 @@ class GIN_EXPORT IsolateHolder {
AccessMode access_mode);
IsolateHolder(scoped_refptr<base::SingleThreadTaskRunner> task_runner,
AccessMode access_mode,
AllowAtomicsWaitMode atomics_wait_mode,
v8::StartupData* startup_data);
AllowAtomicsWaitMode atomics_wait_mode);
// This constructor is to create V8 snapshot for Blink.
// Note this constructor calls isolate->Enter() internally.
......
......@@ -71,7 +71,10 @@ int main(int argc, char** argv) {
#ifdef V8_USE_EXTERNAL_STARTUP_DATA
gin::V8Initializer::LoadV8Snapshot();
gin::V8Initializer::LoadV8Natives();
#endif
#ifdef USE_V8_CONTEXT_SNAPSHOT
gin::V8Initializer::LoadV8ContextSnapshot();
#endif // USE_V8_CONTEXT_SNAPSHOT
#endif // V8_USE_EXTERNAL_STARTUP_DATA
base::MessageLoop message_loop;
base::TaskScheduler::CreateAndStartWithDefaultParams("gin");
......
......@@ -32,6 +32,9 @@ TEST(RunnerTest, Run) {
gin::V8Initializer::LoadV8Snapshot();
gin::V8Initializer::LoadV8Natives();
#endif
#ifdef USE_V8_CONTEXT_SNAPSHOT
gin::V8Initializer::LoadV8ContextSnapshot();
#endif
gin::IsolateHolder::Initialize(gin::IsolateHolder::kStrictMode,
gin::IsolateHolder::kStableV8Extras,
......
......@@ -63,7 +63,10 @@ void RunTestFromFile(const base::FilePath& path, FileRunnerDelegate* delegate,
#ifdef V8_USE_EXTERNAL_STARTUP_DATA
gin::V8Initializer::LoadV8Snapshot();
gin::V8Initializer::LoadV8Natives();
#endif
#ifdef USE_V8_CONTEXT_SNAPSHOT
gin::V8Initializer::LoadV8ContextSnapshot();
#endif // USE_V8_CONTEXT_SNAPSHOT
#endif // V8_USE_EXTERNAL_STARTUP_DATA
gin::IsolateHolder::Initialize(gin::IsolateHolder::kStrictMode,
gin::IsolateHolder::kStableV8Extras,
......
......@@ -24,6 +24,10 @@ void V8Test::SetUp() {
gin::V8Initializer::LoadV8Snapshot();
gin::V8Initializer::LoadV8Natives();
#endif
#ifdef USE_V8_CONTEXT_SNAPSHOT
gin::V8Initializer::LoadV8ContextSnapshot();
#endif
gin::IsolateHolder::Initialize(gin::IsolateHolder::kStrictMode,
gin::IsolateHolder::kStableV8Extras,
gin::ArrayBufferAllocator::SharedInstance());
......
......@@ -242,16 +242,22 @@ void V8Initializer::Initialize(IsolateHolder::ScriptMode mode,
#if defined(V8_USE_EXTERNAL_STARTUP_DATA)
v8::StartupData natives;
natives.data = reinterpret_cast<const char*>(g_mapped_natives->data());
natives.raw_size = static_cast<int>(g_mapped_natives->length());
GetMappedFileData(g_mapped_natives, &natives);
v8::V8::SetNativesDataBlob(&natives);
#if defined(USE_V8_CONTEXT_SNAPSHOT)
if (g_mapped_v8_context_snapshot) {
v8::StartupData snapshot{};
GetMappedFileData(g_mapped_v8_context_snapshot, &snapshot);
v8::V8::SetSnapshotDataBlob(&snapshot);
}
#else
if (g_mapped_snapshot) {
v8::StartupData snapshot;
snapshot.data = reinterpret_cast<const char*>(g_mapped_snapshot->data());
snapshot.raw_size = static_cast<int>(g_mapped_snapshot->length());
v8::StartupData snapshot{};
GetMappedFileData(g_mapped_snapshot, &snapshot);
v8::V8::SetSnapshotDataBlob(&snapshot);
}
#endif // USE_V8_CONTEXT_SNAPSHOT
#endif // V8_USE_EXTERNAL_STARTUP_DATA
v8::V8::SetEntropySource(&GenerateEntropy);
......
......@@ -62,14 +62,10 @@ V8PerIsolateData::V8PerIsolateData(
WebTaskRunner* task_runner,
V8ContextSnapshotMode v8_context_snapshot_mode)
: v8_context_snapshot_mode_(v8_context_snapshot_mode),
isolate_holder_(
task_runner,
gin::IsolateHolder::kSingleThread,
IsMainThread() ? gin::IsolateHolder::kDisallowAtomicsWait
: gin::IsolateHolder::kAllowAtomicsWait,
v8_context_snapshot_mode_ == V8ContextSnapshotMode::kUseSnapshot
? &startup_data_
: nullptr),
isolate_holder_(task_runner,
gin::IsolateHolder::kSingleThread,
IsMainThread() ? gin::IsolateHolder::kDisallowAtomicsWait
: gin::IsolateHolder::kAllowAtomicsWait),
interface_template_map_for_v8_context_snapshot_(GetIsolate()),
string_cache_(WTF::WrapUnique(new StringCache(GetIsolate()))),
private_property_(V8PrivateProperty::Create()),
......@@ -78,13 +74,6 @@ V8PerIsolateData::V8PerIsolateData(
is_handling_recursion_level_error_(false),
is_reporting_exception_(false),
runtime_call_stats_(base::DefaultTickClock::GetInstance()) {
// If it fails to load the snapshot file, falls back to kDontUseSnapshot mode.
// TODO(peria): Remove this fallback routine.
if (v8_context_snapshot_mode_ == V8ContextSnapshotMode::kUseSnapshot &&
!startup_data_.data) {
v8_context_snapshot_mode_ = V8ContextSnapshotMode::kDontUseSnapshot;
}
// FIXME: Remove once all v8::Isolate::GetCurrent() calls are gone.
GetIsolate()->Enter();
GetIsolate()->AddBeforeCallEnteredCallback(&BeforeCallEnteredCallback);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment