| Index: third_party/WebKit/Source/modules/compositorworker/CompositorWorkerThread.cpp
|
| diff --git a/third_party/WebKit/Source/modules/compositorworker/CompositorWorkerThread.cpp b/third_party/WebKit/Source/modules/compositorworker/CompositorWorkerThread.cpp
|
| index d0f51a47ade67425444287a3a157c1cf1f054685..fa420027933081e3485cf6dce85ce7dc3144510f 100644
|
| --- a/third_party/WebKit/Source/modules/compositorworker/CompositorWorkerThread.cpp
|
| +++ b/third_party/WebKit/Source/modules/compositorworker/CompositorWorkerThread.cpp
|
| @@ -5,133 +5,17 @@
|
| #include "config.h"
|
| #include "modules/compositorworker/CompositorWorkerThread.h"
|
|
|
| -#include "bindings/core/v8/V8GCController.h"
|
| #include "bindings/core/v8/V8Initializer.h"
|
| #include "core/workers/WorkerObjectProxy.h"
|
| #include "core/workers/WorkerThreadStartupData.h"
|
| #include "modules/compositorworker/CompositorWorkerGlobalScope.h"
|
| -#include "platform/ThreadSafeFunctional.h"
|
| -#include "platform/TraceEvent.h"
|
| +#include "modules/compositorworker/CompositorWorkerManager.h"
|
| #include "public/platform/Platform.h"
|
|
|
| namespace blink {
|
|
|
| -namespace {
|
| -
|
| -class CompositorWorkerSharedState {
|
| -public:
|
| - static CompositorWorkerSharedState& instance()
|
| - {
|
| - AtomicallyInitializedStaticReference(CompositorWorkerSharedState, compositorWorkerSharedState, (new CompositorWorkerSharedState()));
|
| - return compositorWorkerSharedState;
|
| - }
|
| -
|
| - WebThreadSupportingGC* compositorWorkerThread()
|
| - {
|
| - MutexLocker lock(m_mutex);
|
| - if (!m_thread && isMainThread()) {
|
| - ASSERT(!m_workerCount);
|
| - WebThread* platformThread = Platform::current()->compositorThread();
|
| - m_thread = WebThreadSupportingGC::createForThread(platformThread);
|
| - }
|
| - return m_thread.get();
|
| - }
|
| -
|
| - void initializeBackingThread()
|
| - {
|
| - MutexLocker lock(m_mutex);
|
| - ASSERT(m_thread->isCurrentThread());
|
| - ++m_workerCount;
|
| - if (m_workerCount > 1)
|
| - return;
|
| -
|
| - m_thread->initialize();
|
| -
|
| - // Initialize the isolate at the same time.
|
| - ASSERT(!m_isolate);
|
| - m_isolate = V8PerIsolateData::initialize();
|
| - V8Initializer::initializeWorker(m_isolate);
|
| -
|
| - OwnPtr<V8IsolateInterruptor> interruptor = adoptPtr(new V8IsolateInterruptor(m_isolate));
|
| - ThreadState::current()->addInterruptor(interruptor.release());
|
| - ThreadState::current()->registerTraceDOMWrappers(m_isolate, V8GCController::traceDOMWrappers);
|
| - }
|
| -
|
| - void shutdownBackingThread()
|
| - {
|
| - MutexLocker lock(m_mutex);
|
| - ASSERT(m_thread->isCurrentThread());
|
| - ASSERT(m_workerCount > 0);
|
| - --m_workerCount;
|
| - if (m_workerCount == 0) {
|
| - m_thread->shutdown();
|
| - m_thread = nullptr;
|
| - }
|
| - }
|
| -
|
| - v8::Isolate* initializeIsolate()
|
| - {
|
| - MutexLocker lock(m_mutex);
|
| - ASSERT(m_thread->isCurrentThread());
|
| - ASSERT(m_isolate);
|
| - // It is safe to use the existing isolate even if TerminateExecution() has been
|
| - // called on it, without calling CancelTerminateExecution().
|
| - return m_isolate;
|
| - }
|
| -
|
| - void willDestroyIsolate()
|
| - {
|
| - MutexLocker lock(m_mutex);
|
| - ASSERT(m_thread->isCurrentThread());
|
| - if (m_workerCount == 1)
|
| - V8PerIsolateData::willBeDestroyed(m_isolate);
|
| - }
|
| -
|
| - void destroyIsolate()
|
| - {
|
| - MutexLocker lock(m_mutex);
|
| - if (!m_thread) {
|
| - ASSERT(m_workerCount == 0);
|
| - V8PerIsolateData::destroy(m_isolate);
|
| - m_isolate = nullptr;
|
| - }
|
| - }
|
| -
|
| - void terminateV8Execution()
|
| - {
|
| - MutexLocker lock(m_mutex);
|
| - ASSERT(isMainThread());
|
| - if (m_workerCount > 1)
|
| - return;
|
| -
|
| - v8::V8::TerminateExecution(m_isolate);
|
| - }
|
| -
|
| - bool hasThreadForTest()
|
| - {
|
| - return m_thread;
|
| - }
|
| -
|
| - bool hasIsolateForTest()
|
| - {
|
| - return m_isolate;
|
| - }
|
| -
|
| -private:
|
| - CompositorWorkerSharedState() {}
|
| - ~CompositorWorkerSharedState() {}
|
| -
|
| - Mutex m_mutex;
|
| - OwnPtr<WebThreadSupportingGC> m_thread;
|
| - int m_workerCount = 0;
|
| - v8::Isolate* m_isolate = nullptr;
|
| -};
|
| -
|
| -} // namespace
|
| -
|
| PassRefPtr<CompositorWorkerThread> CompositorWorkerThread::create(PassRefPtr<WorkerLoaderProxy> workerLoaderProxy, WorkerObjectProxy& workerObjectProxy, double timeOrigin)
|
| {
|
| - TRACE_EVENT0(TRACE_DISABLED_BY_DEFAULT("compositor-worker"), "CompositorWorkerThread::create");
|
| ASSERT(isMainThread());
|
| return adoptRef(new CompositorWorkerThread(workerLoaderProxy, workerObjectProxy, timeOrigin));
|
| }
|
| @@ -147,65 +31,44 @@
|
| {
|
| }
|
|
|
| -WebThreadSupportingGC* CompositorWorkerThread::sharedBackingThread()
|
| -{
|
| - return CompositorWorkerSharedState::instance().compositorWorkerThread();
|
| -}
|
| -
|
| PassRefPtrWillBeRawPtr<WorkerGlobalScope> CompositorWorkerThread::createWorkerGlobalScope(PassOwnPtr<WorkerThreadStartupData> startupData)
|
| {
|
| - TRACE_EVENT0(TRACE_DISABLED_BY_DEFAULT("compositor-worker"), "CompositorWorkerThread::createWorkerGlobalScope");
|
| return CompositorWorkerGlobalScope::create(this, startupData, m_timeOrigin);
|
| }
|
|
|
| WebThreadSupportingGC& CompositorWorkerThread::backingThread()
|
| {
|
| - return *CompositorWorkerSharedState::instance().compositorWorkerThread();
|
| + return CompositorWorkerManager::instance()->compositorWorkerThread();
|
| }
|
|
|
| void CompositorWorkerThread::initializeBackingThread()
|
| {
|
| - TRACE_EVENT0(TRACE_DISABLED_BY_DEFAULT("compositor-worker"), "CompositorWorkerThread::initializeBackingThread");
|
| - CompositorWorkerSharedState::instance().initializeBackingThread();
|
| + CompositorWorkerManager::instance()->initializeBackingThread();
|
| }
|
|
|
| void CompositorWorkerThread::shutdownBackingThread()
|
| {
|
| - TRACE_EVENT0(TRACE_DISABLED_BY_DEFAULT("compositor-worker"), "CompositorWorkerThread::shutdownBackingThread");
|
| - CompositorWorkerSharedState::instance().shutdownBackingThread();
|
| + CompositorWorkerManager::instance()->shutdownBackingThread();
|
| }
|
|
|
| v8::Isolate* CompositorWorkerThread::initializeIsolate()
|
| {
|
| - return CompositorWorkerSharedState::instance().initializeIsolate();
|
| + return CompositorWorkerManager::instance()->initializeIsolate();
|
| }
|
|
|
| void CompositorWorkerThread::willDestroyIsolate()
|
| {
|
| - TRACE_EVENT0(TRACE_DISABLED_BY_DEFAULT("compositor-worker"), "CompositorWorkerThread::willDestroyIsolate");
|
| - CompositorWorkerSharedState::instance().willDestroyIsolate();
|
| + CompositorWorkerManager::instance()->willDestroyIsolate();
|
| }
|
|
|
| void CompositorWorkerThread::destroyIsolate()
|
| {
|
| - TRACE_EVENT0(TRACE_DISABLED_BY_DEFAULT("compositor-worker"), "CompositorWorkerThread::destroyIsolate");
|
| - CompositorWorkerSharedState::instance().destroyIsolate();
|
| + CompositorWorkerManager::instance()->destroyIsolate();
|
| }
|
|
|
| void CompositorWorkerThread::terminateV8Execution()
|
| {
|
| - TRACE_EVENT0(TRACE_DISABLED_BY_DEFAULT("compositor-worker"), "CompositorWorkerThread::terminateV8Execution");
|
| - CompositorWorkerSharedState::instance().terminateV8Execution();
|
| -}
|
| -
|
| -bool CompositorWorkerThread::hasThreadForTest()
|
| -{
|
| - return CompositorWorkerSharedState::instance().hasThreadForTest();
|
| -}
|
| -
|
| -bool CompositorWorkerThread::hasIsolateForTest()
|
| -{
|
| - return CompositorWorkerSharedState::instance().hasIsolateForTest();
|
| + CompositorWorkerManager::instance()->terminateV8Execution();
|
| }
|
|
|
| } // namespace blink
|
|
|