80 lines
3.8 KiB
Diff
80 lines
3.8 KiB
Diff
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
|
From: Samuel Attard <samuel.r.attard@gmail.com>
|
|
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 c254b045494936eca14ce947e1c2de3327820aa2..63c9b9681fcc4e1e9a9590d59d74349bb8aee3b1 100644
|
|
--- a/gin/isolate_holder.cc
|
|
+++ b/gin/isolate_holder.cc
|
|
@@ -73,7 +73,8 @@ IsolateHolder::IsolateHolder(
|
|
IsolateType isolate_type,
|
|
IsolateCreationMode isolate_creation_mode,
|
|
v8::CreateHistogramCallback create_histogram_callback,
|
|
- v8::AddHistogramSampleCallback add_histogram_sample_callback)
|
|
+ v8::AddHistogramSampleCallback add_histogram_sample_callback,
|
|
+ v8::Isolate* isolate)
|
|
: IsolateHolder(task_runner,
|
|
access_mode,
|
|
isolate_type,
|
|
@@ -81,14 +82,16 @@ IsolateHolder::IsolateHolder(
|
|
atomics_wait_mode,
|
|
create_histogram_callback,
|
|
add_histogram_sample_callback),
|
|
- isolate_creation_mode) {}
|
|
+ isolate_creation_mode,
|
|
+ isolate) {}
|
|
|
|
IsolateHolder::IsolateHolder(
|
|
scoped_refptr<base::SingleThreadTaskRunner> task_runner,
|
|
AccessMode access_mode,
|
|
IsolateType isolate_type,
|
|
std::unique_ptr<v8::Isolate::CreateParams> params,
|
|
- IsolateCreationMode isolate_creation_mode)
|
|
+ IsolateCreationMode isolate_creation_mode,
|
|
+ v8::Isolate* isolate)
|
|
: access_mode_(access_mode), isolate_type_(isolate_type) {
|
|
CHECK(Initialized())
|
|
<< "You need to invoke gin::IsolateHolder::Initialize first";
|
|
@@ -99,7 +102,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);
|
|
// TODO(https://crbug.com/1347092): Refactor such that caller need not
|
|
diff --git a/gin/public/isolate_holder.h b/gin/public/isolate_holder.h
|
|
index 78af701cb06f6cb1bdd9829b2fcc46c8d63f5c4f..4a36f4826f9df765c664a819eb4e3679fbecb104 100644
|
|
--- a/gin/public/isolate_holder.h
|
|
+++ b/gin/public/isolate_holder.h
|
|
@@ -83,13 +83,15 @@ class GIN_EXPORT IsolateHolder {
|
|
IsolateType isolate_type,
|
|
IsolateCreationMode isolate_creation_mode = IsolateCreationMode::kNormal,
|
|
v8::CreateHistogramCallback create_histogram_callback = nullptr,
|
|
- v8::AddHistogramSampleCallback add_histogram_sample_callback = nullptr);
|
|
+ v8::AddHistogramSampleCallback add_histogram_sample_callback = nullptr,
|
|
+ v8::Isolate* isolate = nullptr);
|
|
IsolateHolder(
|
|
scoped_refptr<base::SingleThreadTaskRunner> task_runner,
|
|
AccessMode access_mode,
|
|
IsolateType isolate_type,
|
|
std::unique_ptr<v8::Isolate::CreateParams> params,
|
|
- IsolateCreationMode isolate_creation_mode = IsolateCreationMode::kNormal);
|
|
+ IsolateCreationMode isolate_creation_mode = IsolateCreationMode::kNormal,
|
|
+ v8::Isolate* isolate = nullptr);
|
|
IsolateHolder(const IsolateHolder&) = delete;
|
|
IsolateHolder& operator=(const IsolateHolder&) = delete;
|
|
~IsolateHolder();
|