1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283 |
- From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
- From: Samuel Attard <[email protected]>
- Date: Thu, 18 Oct 2018 17:07:27 -0700
- Subject: isolate_holder.patch
- Pass pre allocated isolate for initialization, node platform
- needs to register on an isolate so that it can be used later
- down in the initialization process of an isolate.
- Specifically, v8::Isolate::Initialize ends up calling
- NodePlatform::GetForegroundTaskRunner, which requires that the
- isolate has previously been registered with NodePlatform::RegisterIsolate.
- However, if we let gin allocate the isolate, there's no opportunity
- for us to register the isolate in between Isolate::Allocate and
- Isolate::Initialize.
- diff --git a/gin/isolate_holder.cc b/gin/isolate_holder.cc
- index 8632f1c18b407bb7832900bcebadacb3707224ac..d1b95149ea0d16af2606900f10898a355026ffe1 100644
- --- a/gin/isolate_holder.cc
- +++ b/gin/isolate_holder.cc
- @@ -81,7 +81,8 @@ IsolateHolder::IsolateHolder(
- v8::AddHistogramSampleCallback add_histogram_sample_callback,
- scoped_refptr<base::SingleThreadTaskRunner> user_visible_task_runner,
- scoped_refptr<base::SingleThreadTaskRunner> best_effort_task_runner,
- - std::unique_ptr<v8::CppHeap> cpp_heap)
- + std::unique_ptr<v8::CppHeap> cpp_heap,
- + v8::Isolate* isolate)
- : IsolateHolder(std::move(task_runner),
- access_mode,
- isolate_type,
- @@ -92,7 +93,8 @@ IsolateHolder::IsolateHolder(
- std::move(cpp_heap)),
- isolate_creation_mode,
- std::move(user_visible_task_runner),
- - std::move(best_effort_task_runner)) {}
- + std::move(best_effort_task_runner),
- + isolate) {}
-
- IsolateHolder::IsolateHolder(
- scoped_refptr<base::SingleThreadTaskRunner> task_runner,
- @@ -101,7 +103,8 @@ IsolateHolder::IsolateHolder(
- std::unique_ptr<v8::Isolate::CreateParams> params,
- IsolateCreationMode isolate_creation_mode,
- scoped_refptr<base::SingleThreadTaskRunner> user_visible_task_runner,
- - scoped_refptr<base::SingleThreadTaskRunner> best_effort_task_runner)
- + scoped_refptr<base::SingleThreadTaskRunner> best_effort_task_runner,
- + v8::Isolate* isolate)
- : access_mode_(access_mode), isolate_type_(isolate_type) {
- CHECK(Initialized())
- << "You need to invoke gin::IsolateHolder::Initialize first";
- @@ -112,7 +115,7 @@ IsolateHolder::IsolateHolder(
- v8::ArrayBuffer::Allocator* allocator = params->array_buffer_allocator;
- DCHECK(allocator);
-
- - isolate_ = v8::Isolate::Allocate();
- + isolate_ = isolate ? isolate : v8::Isolate::Allocate();
- isolate_data_ = std::make_unique<PerIsolateData>(
- isolate_, allocator, access_mode_, task_runner,
- std::move(user_visible_task_runner), std::move(best_effort_task_runner));
- diff --git a/gin/public/isolate_holder.h b/gin/public/isolate_holder.h
- index e27f177ce27e177abf6cee84cd466e7a8a829ee7..dc3a5b0678b9c686e241b492e2c3b5ac833611a3 100644
- --- a/gin/public/isolate_holder.h
- +++ b/gin/public/isolate_holder.h
- @@ -88,7 +88,8 @@ class GIN_EXPORT IsolateHolder {
- nullptr,
- scoped_refptr<base::SingleThreadTaskRunner> best_effort_task_runner =
- nullptr,
- - std::unique_ptr<v8::CppHeap> cpp_heap = {});
- + std::unique_ptr<v8::CppHeap> cpp_heap = {},
- + v8::Isolate* isolate = nullptr);
- IsolateHolder(
- scoped_refptr<base::SingleThreadTaskRunner> task_runner,
- AccessMode access_mode,
- @@ -98,7 +99,8 @@ class GIN_EXPORT IsolateHolder {
- scoped_refptr<base::SingleThreadTaskRunner> user_visible_task_runner =
- nullptr,
- scoped_refptr<base::SingleThreadTaskRunner> best_effort_task_runner =
- - nullptr);
- + nullptr,
- + v8::Isolate* isolate = nullptr);
- IsolateHolder(const IsolateHolder&) = delete;
- IsolateHolder& operator=(const IsolateHolder&) = delete;
- ~IsolateHolder();
|