diff --git a/atom/browser/atom_browser_main_parts.cc b/atom/browser/atom_browser_main_parts.cc index 204c9d181b..4595a94620 100644 --- a/atom/browser/atom_browser_main_parts.cc +++ b/atom/browser/atom_browser_main_parts.cc @@ -145,7 +145,7 @@ void AtomBrowserMainParts::PostEarlyInitialization() { // Enable support for v8 inspector node_debugger_.reset(new NodeDebugger(env)); - node_debugger_->Start(); + node_debugger_->Start(js_env_->platform()); // Add Electron extended APIs. atom_bindings_->BindTo(js_env_->isolate(), env->process_object()); diff --git a/atom/browser/javascript_environment.cc b/atom/browser/javascript_environment.cc index e7a510488a..a1e824cad3 100644 --- a/atom/browser/javascript_environment.cc +++ b/atom/browser/javascript_environment.cc @@ -26,7 +26,8 @@ JavascriptEnvironment::JavascriptEnvironment() locker_(isolate_), handle_scope_(isolate_), context_(isolate_, v8::Context::New(isolate_)), - context_scope_(v8::Local::New(isolate_, context_)) {} + context_scope_(v8::Local::New(isolate_, context_)) { +} void JavascriptEnvironment::OnMessageLoopCreated() { isolate_holder_.AddRunMicrotasksObserver(); @@ -44,10 +45,17 @@ bool JavascriptEnvironment::Initialize() { if (!js_flags.empty()) v8::V8::SetFlagsFromString(js_flags.c_str(), js_flags.size()); + // The V8Platform of gin relies on Chromium's task schedule, which has not + // been started at this point, so we have to rely on Node's V8Platform. + platform_ = node::CreatePlatform( + base::RecommendedMaxNumberOfThreadsInPool(3, 8, 0.1, 0), + uv_default_loop(), nullptr); + v8::V8::InitializePlatform(platform_); + gin::IsolateHolder::Initialize(gin::IsolateHolder::kNonStrictMode, gin::IsolateHolder::kStableV8Extras, - gin::ArrayBufferAllocator::SharedInstance()); - + gin::ArrayBufferAllocator::SharedInstance(), + false); return true; } diff --git a/atom/browser/javascript_environment.h b/atom/browser/javascript_environment.h index e515307819..0754df212c 100644 --- a/atom/browser/javascript_environment.h +++ b/atom/browser/javascript_environment.h @@ -32,6 +32,9 @@ class JavascriptEnvironment { private: bool Initialize(); + // Leaked on exit. + node::NodePlatform* platform_; + bool initialized_; gin::IsolateHolder isolate_holder_; v8::Isolate* isolate_;