WorkerScriptController::WorkerScriptController(WorkerGlobalScope& workerGlobalScope) : m_workerGlobalScope(workerGlobalScope) , m_executionForbidden(false) , m_executionScheduledToTerminate(false) { v8::Isolate* isolate = v8::Isolate::New(); isolate->Enter(); V8Initializer::initializeWorker(isolate); v8::V8::Initialize(); m_isolateHolder = adoptPtr(new gin::IsolateHolder(isolate, v8ArrayBufferAllocator())); V8PerIsolateData::ensureInitialized(isolate); m_world = DOMWrapperWorld::create(WorkerWorldId, -1); m_interruptor = adoptPtr(new V8IsolateInterruptor(isolate)); ThreadState::current()->addInterruptor(m_interruptor.get()); }
V8PerIsolateData::V8PerIsolateData(v8::Isolate* isolate) : m_isolate(isolate) , m_isolateHolder(adoptPtr(new gin::IsolateHolder(m_isolate, v8ArrayBufferAllocator()))) , m_stringCache(adoptPtr(new StringCache())) , m_hiddenValue(adoptPtr(new V8HiddenValue())) , m_constructorMode(ConstructorMode::CreateNewObject) , m_recursionLevel(0) #ifndef NDEBUG , m_internalScriptRecursionLevel(0) #endif , m_gcEventData(adoptPtr(new GCEventData())) , m_performingMicrotaskCheckpoint(false) { if (isMainThread()) mainThreadPerIsolateData = this; }
void V8Initializer::initializeMainThreadIfNeeded() { ASSERT(isMainThread()); static bool initialized = false; if (initialized) return; initialized = true; gin::IsolateHolder::Initialize(gin::IsolateHolder::kStrictMode, v8ArrayBufferAllocator()); v8::Isolate* isolate = V8PerIsolateData::initialize(); initializeV8Common(isolate); v8::V8::SetFatalErrorHandler(reportFatalErrorInMainThread); v8::V8::AddMessageListener(messageHandlerInMainThread); v8::V8::SetFailedAccessCheckCallbackFunction(failedAccessCheckCallbackInMainThread); isolate->SetEventLogger(timerTraceProfilerInMainThread); ScriptProfiler::initialize(); }