Chromium Code Reviews| Index: third_party/WebKit/Source/bindings/core/v8/V8PerIsolateData.cpp |
| diff --git a/third_party/WebKit/Source/bindings/core/v8/V8PerIsolateData.cpp b/third_party/WebKit/Source/bindings/core/v8/V8PerIsolateData.cpp |
| index 69683686c9f09e1dff962ddd34532b6c2f53579a..ba7f6884c1bacf44155274e5c5c4980a0d6b8854 100644 |
| --- a/third_party/WebKit/Source/bindings/core/v8/V8PerIsolateData.cpp |
| +++ b/third_party/WebKit/Source/bindings/core/v8/V8PerIsolateData.cpp |
| @@ -52,8 +52,53 @@ static void microtasksCompletedCallback(v8::Isolate* isolate) |
| V8PerIsolateData::from(isolate)->runEndOfScopeTasks(); |
| } |
| -static void useCounterCallback(v8::Isolate* isolate, v8::Isolate::UseCounterFeature feature) |
| +V8PerIsolateData::V8PerIsolateData() |
| + : m_isolateHolder(adoptPtr(new gin::IsolateHolder())) |
| + , m_stringCache(adoptPtr(new StringCache(isolate()))) |
| + , m_hiddenValue(V8HiddenValue::create()) |
| + , m_constructorMode(ConstructorMode::CreateNewObject) |
| + , m_useCounterDisabled(false) |
| + , m_isHandlingRecursionLevelError(false) |
| + , m_isReportingException(false) |
| +{ |
| + // FIXME: Remove once all v8::Isolate::GetCurrent() calls are gone. |
| + isolate()->Enter(); |
| + isolate()->AddBeforeCallEnteredCallback(&beforeCallEnteredCallback); |
| + isolate()->AddMicrotasksCompletedCallback(µtasksCompletedCallback); |
| + if (isMainThread()) |
| + mainThreadPerIsolateData = this; |
| + isolate()->SetUseCounterCallback(&useCounterCallback); |
|
haraken
2016/04/18 08:04:15
Instead of introducing UseCounterDisabledScope, ca
Yuki
2016/04/18 08:27:07
You know, there can be multiple contexts in a sing
|
| +} |
| + |
| +V8PerIsolateData::~V8PerIsolateData() |
| +{ |
| +} |
| + |
| +v8::Isolate* V8PerIsolateData::mainThreadIsolate() |
| { |
| + ASSERT(isMainThread()); |
| + ASSERT(mainThreadPerIsolateData); |
| + return mainThreadPerIsolateData->isolate(); |
| +} |
| + |
| +v8::Isolate* V8PerIsolateData::initialize() |
| +{ |
| + V8PerIsolateData* data = new V8PerIsolateData(); |
| + v8::Isolate* isolate = data->isolate(); |
| + isolate->SetData(gin::kEmbedderBlink, data); |
| + return isolate; |
| +} |
| + |
| +void V8PerIsolateData::enableIdleTasks(v8::Isolate* isolate, PassOwnPtr<gin::V8IdleTaskRunner> taskRunner) |
| +{ |
| + from(isolate)->m_isolateHolder->EnableIdleTasks(std::unique_ptr<gin::V8IdleTaskRunner>(taskRunner.leakPtr())); |
| +} |
| + |
| +void V8PerIsolateData::useCounterCallback(v8::Isolate* isolate, v8::Isolate::UseCounterFeature feature) |
| +{ |
| + if (V8PerIsolateData::from(isolate)->m_useCounterDisabled) |
| + return; |
| + |
| UseCounter::Feature blinkFeature; |
| bool deprecated = false; |
| switch (feature) { |
| @@ -129,47 +174,6 @@ static void useCounterCallback(v8::Isolate* isolate, v8::Isolate::UseCounterFeat |
| UseCounter::count(currentExecutionContext(isolate), blinkFeature); |
| } |
| -V8PerIsolateData::V8PerIsolateData() |
| - : m_isolateHolder(adoptPtr(new gin::IsolateHolder())) |
| - , m_stringCache(adoptPtr(new StringCache(isolate()))) |
| - , m_hiddenValue(V8HiddenValue::create()) |
| - , m_constructorMode(ConstructorMode::CreateNewObject) |
| - , m_isHandlingRecursionLevelError(false) |
| - , m_isReportingException(false) |
| -{ |
| - // FIXME: Remove once all v8::Isolate::GetCurrent() calls are gone. |
| - isolate()->Enter(); |
| - isolate()->AddBeforeCallEnteredCallback(&beforeCallEnteredCallback); |
| - isolate()->AddMicrotasksCompletedCallback(µtasksCompletedCallback); |
| - if (isMainThread()) |
| - mainThreadPerIsolateData = this; |
| - isolate()->SetUseCounterCallback(&useCounterCallback); |
| -} |
| - |
| -V8PerIsolateData::~V8PerIsolateData() |
| -{ |
| -} |
| - |
| -v8::Isolate* V8PerIsolateData::mainThreadIsolate() |
| -{ |
| - ASSERT(isMainThread()); |
| - ASSERT(mainThreadPerIsolateData); |
| - return mainThreadPerIsolateData->isolate(); |
| -} |
| - |
| -v8::Isolate* V8PerIsolateData::initialize() |
| -{ |
| - V8PerIsolateData* data = new V8PerIsolateData(); |
| - v8::Isolate* isolate = data->isolate(); |
| - isolate->SetData(gin::kEmbedderBlink, data); |
| - return isolate; |
| -} |
| - |
| -void V8PerIsolateData::enableIdleTasks(v8::Isolate* isolate, PassOwnPtr<gin::V8IdleTaskRunner> taskRunner) |
| -{ |
| - from(isolate)->m_isolateHolder->EnableIdleTasks(std::unique_ptr<gin::V8IdleTaskRunner>(taskRunner.leakPtr())); |
| -} |
| - |
| v8::Persistent<v8::Value>& V8PerIsolateData::ensureLiveRoot() |
| { |
| if (m_liveRoot.isEmpty()) |