| Index: test/inspector/task-runner.cc
|
| diff --git a/test/inspector/task-runner.cc b/test/inspector/task-runner.cc
|
| index 4bfd784900b4e56efc51c2e54896c2c4f87cf003..2f2f45d19cec6cd8b094e124508f5d8aec0455ff 100644
|
| --- a/test/inspector/task-runner.cc
|
| +++ b/test/inspector/task-runner.cc
|
| @@ -13,6 +13,7 @@
|
| namespace {
|
|
|
| const int kTaskRunnerIndex = 2;
|
| +const int kContextGroupIdIndex = 3;
|
|
|
| void ReportUncaughtException(v8::Isolate* isolate,
|
| const v8::TryCatch& try_catch) {
|
| @@ -46,7 +47,7 @@ TaskRunner::TaskRunner(v8::ExtensionConfiguration* extensions,
|
|
|
| TaskRunner::~TaskRunner() { Join(); }
|
|
|
| -void TaskRunner::InitializeContext() {
|
| +void TaskRunner::InitializeIsolate() {
|
| v8::Isolate::CreateParams params;
|
| params.array_buffer_allocator =
|
| v8::ArrayBuffer::Allocator::NewDefaultAllocator();
|
| @@ -54,19 +55,36 @@ void TaskRunner::InitializeContext() {
|
| isolate_->SetMicrotasksPolicy(v8::MicrotasksPolicy::kScoped);
|
| v8::Isolate::Scope isolate_scope(isolate_);
|
| v8::HandleScope handle_scope(isolate_);
|
| + NewContextGroup();
|
| + if (ready_semaphore_) ready_semaphore_->Signal();
|
| +}
|
|
|
| +v8::Local<v8::Context> TaskRunner::NewContextGroup() {
|
| v8::Local<v8::ObjectTemplate> global_template =
|
| v8::ObjectTemplate::New(isolate_);
|
| v8::Local<v8::Context> context =
|
| v8::Context::New(isolate_, extensions_, global_template);
|
| context->SetAlignedPointerInEmbedderData(kTaskRunnerIndex, this);
|
| - context_.Reset(isolate_, context);
|
| + intptr_t context_group_id = ++last_context_group_id_;
|
| + // Should be 2-byte aligned.
|
| + context->SetAlignedPointerInEmbedderData(
|
| + kContextGroupIdIndex, reinterpret_cast<void*>(context_group_id * 2));
|
| + contexts_[context_group_id].Reset(isolate_, context);
|
| + return context;
|
| +}
|
|
|
| - if (ready_semaphore_) ready_semaphore_->Signal();
|
| +v8::Local<v8::Context> TaskRunner::GetContext(int context_group_id) {
|
| + return contexts_[context_group_id].Get(isolate_);
|
| +}
|
| +
|
| +int TaskRunner::GetContextGroupId(v8::Local<v8::Context> context) {
|
| + return reinterpret_cast<intptr_t>(
|
| + context->GetAlignedPointerFromEmbedderData(kContextGroupIdIndex)) /
|
| + 2;
|
| }
|
|
|
| void TaskRunner::Run() {
|
| - InitializeContext();
|
| + InitializeIsolate();
|
| RunMessageLoop(false);
|
| }
|
|
|
| @@ -78,7 +96,7 @@ void TaskRunner::RunMessageLoop(bool only_protocol) {
|
| v8::Isolate::Scope isolate_scope(isolate_);
|
| if (catch_exceptions_) {
|
| v8::TryCatch try_catch(isolate_);
|
| - task->Run(isolate_, context_);
|
| + task->Run(isolate_, contexts_.begin()->second);
|
| delete task;
|
| if (try_catch.HasCaught()) {
|
| ReportUncaughtException(isolate_, try_catch);
|
| @@ -87,7 +105,7 @@ void TaskRunner::RunMessageLoop(bool only_protocol) {
|
| _exit(0);
|
| }
|
| } else {
|
| - task->Run(isolate_, context_);
|
| + task->Run(isolate_, contexts_.begin()->second);
|
| delete task;
|
| }
|
| }
|
|
|