Chromium Code Reviews| Index: gin/isolate_holder.cc |
| diff --git a/gin/isolate_holder.cc b/gin/isolate_holder.cc |
| index d42607d86ddea5d4c0915509e1b2dc72ca664176..7d8240fd8028e088742f0c0f03963fd6353e12d7 100644 |
| --- a/gin/isolate_holder.cc |
| +++ b/gin/isolate_holder.cc |
| @@ -35,15 +35,22 @@ IsolateHolder::IsolateHolder( |
| IsolateHolder::IsolateHolder( |
| scoped_refptr<base::SingleThreadTaskRunner> task_runner, |
| AccessMode access_mode) |
| - : IsolateHolder(std::move(task_runner), access_mode, kAllowAtomicsWait) {} |
| + : IsolateHolder(std::move(task_runner), |
| + access_mode, |
| + kAllowAtomicsWait, |
| + nullptr, |
| + nullptr) {} |
| IsolateHolder::IsolateHolder( |
| scoped_refptr<base::SingleThreadTaskRunner> task_runner, |
| AccessMode access_mode, |
| - AllowAtomicsWaitMode atomics_wait_mode) |
| + AllowAtomicsWaitMode atomics_wait_mode, |
| + intptr_t* reference, |
| + v8::StartupData* startup_data) |
| : access_mode_(access_mode) { |
| v8::ArrayBuffer::Allocator* allocator = g_array_buffer_allocator; |
| CHECK(allocator) << "You need to invoke gin::IsolateHolder::Initialize first"; |
| + |
| v8::Isolate::CreateParams params; |
| params.entry_hook = DebugImpl::GetFunctionEntryHook(); |
| params.code_event_handler = DebugImpl::GetJitCodeEventHandler(); |
| @@ -51,33 +58,37 @@ IsolateHolder::IsolateHolder( |
| base::SysInfo::AmountOfVirtualMemory()); |
| params.array_buffer_allocator = allocator; |
| params.allow_atomics_wait = atomics_wait_mode == kAllowAtomicsWait; |
| - isolate_ = v8::Isolate::New(params); |
| - isolate_data_.reset( |
| - new PerIsolateData(isolate_, allocator, access_mode, task_runner)); |
| - isolate_memory_dump_provider_.reset(new V8IsolateMemoryDumpProvider(this)); |
| -#if defined(OS_WIN) |
| - { |
| - void* code_range; |
| - size_t size; |
| - isolate_->GetCodeRange(&code_range, &size); |
| - Debug::CodeRangeCreatedCallback callback = |
| - DebugImpl::GetCodeRangeCreatedCallback(); |
| - if (code_range && size && callback) |
| - callback(code_range, size); |
| + params.external_references = reference; |
| + |
| + if (startup_data) { |
| + CHECK(reference); |
| + V8Initializer::GetBlinkV8SnapshotData(&startup_data->data, |
| + &startup_data->raw_size); |
| + if (startup_data->data) { |
| + params.snapshot_blob = startup_data; |
| + } |
| } |
| -#endif |
| + isolate_ = v8::Isolate::New(params); |
| + |
| + Setup(std::move(task_runner), access_mode); |
| } |
| IsolateHolder::IsolateHolder(intptr_t* reference_table, |
| v8::StartupData* existing_blob) |
| : snapshot_creator_( |
| new v8::SnapshotCreator(reference_table, existing_blob)), |
| - access_mode_(kSingleThread) { |
| + isolate_(snapshot_creator_->GetIsolate()) { |
| + Setup(nullptr, kSingleThread); |
|
Yuki
2017/06/20 14:20:10
AccessMode::kSingleThread
peria
2017/06/21 07:19:15
Done.
|
| +} |
| + |
| +void IsolateHolder::Setup( |
|
Yuki
2017/06/20 14:20:10
nit: gtest uses SetUp().
Yuki
2017/06/20 14:20:10
Keep the same order of declarations in the header
peria
2017/06/21 07:19:15
Done.
peria
2017/06/21 07:19:15
Done.
|
| + scoped_refptr<base::SingleThreadTaskRunner> task_runner, |
| + AccessMode access_mode) { |
| + access_mode_ = access_mode; |
|
Yuki
2017/06/20 14:20:10
access_mode_ was already initialized on line 50.
peria
2017/06/21 07:19:15
Done.
|
| v8::ArrayBuffer::Allocator* allocator = g_array_buffer_allocator; |
| CHECK(allocator) << "You need to invoke gin::IsolateHolder::Initialize first"; |
| - isolate_ = snapshot_creator_->GetIsolate(); |
| isolate_data_.reset( |
| - new PerIsolateData(isolate_, allocator, access_mode_, nullptr)); |
| + new PerIsolateData(isolate_, allocator, access_mode_, task_runner)); |
| isolate_memory_dump_provider_.reset(new V8IsolateMemoryDumpProvider(this)); |
| #if defined(OS_WIN) |
| { |
| @@ -109,7 +120,7 @@ IsolateHolder::~IsolateHolder() { |
| isolate_memory_dump_provider_.reset(); |
| isolate_data_.reset(); |
| isolate_->Dispose(); |
| - isolate_ = NULL; |
| + isolate_ = nullptr; |
| } |
| // static |