| Index: third_party/WebKit/Source/modules/compositorworker/CompositorWorkerThreadTest.cpp
|
| diff --git a/third_party/WebKit/Source/modules/compositorworker/CompositorWorkerManagerTest.cpp b/third_party/WebKit/Source/modules/compositorworker/CompositorWorkerThreadTest.cpp
|
| similarity index 84%
|
| rename from third_party/WebKit/Source/modules/compositorworker/CompositorWorkerManagerTest.cpp
|
| rename to third_party/WebKit/Source/modules/compositorworker/CompositorWorkerThreadTest.cpp
|
| index a0655a796002f0ba0b07442c822f979ecedacdd6..6b48351f3f0b3e9e92887c892e2da041a07736cf 100644
|
| --- a/third_party/WebKit/Source/modules/compositorworker/CompositorWorkerManagerTest.cpp
|
| +++ b/third_party/WebKit/Source/modules/compositorworker/CompositorWorkerThreadTest.cpp
|
| @@ -3,7 +3,7 @@
|
| // found in the LICENSE file.
|
|
|
| #include "config.h"
|
| -#include "modules/compositorworker/CompositorWorkerManager.h"
|
| +#include "modules/compositorworker/CompositorWorkerThread.h"
|
|
|
| #include "bindings/core/v8/ScriptSourceCode.h"
|
| #include "bindings/core/v8/V8GCController.h"
|
| @@ -12,10 +12,10 @@
|
| #include "core/workers/WorkerLoaderProxy.h"
|
| #include "core/workers/WorkerObjectProxy.h"
|
| #include "core/workers/WorkerThreadStartupData.h"
|
| -#include "modules/compositorworker/CompositorWorkerThread.h"
|
| #include "platform/NotImplemented.h"
|
| #include "platform/ThreadSafeFunctional.h"
|
| #include "platform/heap/Handle.h"
|
| +#include "platform/testing/TestingPlatformSupport.h"
|
| #include "platform/testing/UnitTestHelpers.h"
|
| #include "public/platform/Platform.h"
|
| #include "public/platform/WebWaitableEvent.h"
|
| @@ -32,7 +32,7 @@ public:
|
| {
|
| }
|
|
|
| - ~TestCompositorWorkerThread() override { }
|
| + ~TestCompositorWorkerThread() override {}
|
|
|
| void setCallbackAfterV8Termination(PassOwnPtr<Function<void()>> callback)
|
| {
|
| @@ -51,9 +51,11 @@ private:
|
| if (m_v8TerminationCallback)
|
| (*m_v8TerminationCallback)();
|
| }
|
| +
|
| void willDestroyIsolate() override
|
| {
|
| - V8GCController::collectAllGarbageForTesting(v8::Isolate::GetCurrent());
|
| + v8::Isolate::GetCurrent()->RequestGarbageCollectionForTesting(v8::Isolate::kFullGarbageCollection);
|
| + Heap::collectAllGarbage();
|
| CompositorWorkerThread::willDestroyIsolate();
|
| }
|
|
|
| @@ -93,9 +95,32 @@ private:
|
| RefPtrWillBePersistent<ExecutionContext> m_executionContext;
|
| };
|
|
|
| +class CompositorWorkerTestPlatform : public TestingPlatformSupport {
|
| +public:
|
| + CompositorWorkerTestPlatform()
|
| + : m_thread(adoptPtr(m_oldPlatform->createThread("Compositor")))
|
| + {
|
| + }
|
| +
|
| + WebThread* compositorThread() const override
|
| + {
|
| + return m_thread.get();
|
| + }
|
| +
|
| + WebWaitableEvent* createWaitableEvent(
|
| + WebWaitableEvent::ResetPolicy policy,
|
| + WebWaitableEvent::InitialState state) override
|
| + {
|
| + return m_oldPlatform->createWaitableEvent(policy, state);
|
| + }
|
| +
|
| +private:
|
| + OwnPtr<WebThread> m_thread;
|
| +};
|
| +
|
| } // namespace
|
|
|
| -class CompositorWorkerManagerTest : public ::testing::Test {
|
| +class CompositorWorkerThreadTest : public ::testing::Test {
|
| public:
|
| void SetUp() override
|
| {
|
| @@ -106,8 +131,8 @@ public:
|
|
|
| void TearDown() override
|
| {
|
| - ASSERT(!managerHasThread());
|
| - ASSERT(!managerHasIsolate());
|
| + ASSERT(!hasThread());
|
| + ASSERT(!hasIsolate());
|
| m_page.clear();
|
| }
|
|
|
| @@ -137,7 +162,7 @@ public:
|
| void checkWorkerCanExecuteScript(WorkerThread* worker)
|
| {
|
| OwnPtr<WebWaitableEvent> waitEvent = adoptPtr(Platform::current()->createWaitableEvent());
|
| - worker->backingThread().platformThread().taskRunner()->postTask(BLINK_FROM_HERE, threadSafeBind(&CompositorWorkerManagerTest::executeScriptInWorker, AllowCrossThreadAccess(this),
|
| + worker->backingThread().platformThread().taskRunner()->postTask(BLINK_FROM_HERE, threadSafeBind(&CompositorWorkerThreadTest::executeScriptInWorker, AllowCrossThreadAccess(this),
|
| AllowCrossThreadAccess(worker), AllowCrossThreadAccess(waitEvent.get())));
|
| waitEvent->wait();
|
| }
|
| @@ -148,14 +173,14 @@ public:
|
| waitEvent->wait();
|
| }
|
|
|
| - bool managerHasThread() const
|
| + bool hasThread() const
|
| {
|
| - return CompositorWorkerManager::instance()->m_thread;
|
| + return CompositorWorkerThread::hasThreadForTest();
|
| }
|
|
|
| - bool managerHasIsolate() const
|
| + bool hasIsolate() const
|
| {
|
| - return CompositorWorkerManager::instance()->m_isolate;
|
| + return CompositorWorkerThread::hasIsolateForTest();
|
| }
|
|
|
| private:
|
| @@ -170,9 +195,10 @@ private:
|
| OwnPtr<DummyPageHolder> m_page;
|
| RefPtr<SecurityOrigin> m_securityOrigin;
|
| OwnPtr<WorkerObjectProxy> m_objectProxy;
|
| + CompositorWorkerTestPlatform m_testPlatform;
|
| };
|
|
|
| -TEST_F(CompositorWorkerManagerTest, Basic)
|
| +TEST_F(CompositorWorkerThreadTest, Basic)
|
| {
|
| OwnPtr<WebWaitableEvent> creationEvent = adoptPtr(Platform::current()->createWaitableEvent());
|
| RefPtr<CompositorWorkerThread> compositorWorker = createCompositorWorker(creationEvent.get());
|
| @@ -182,12 +208,12 @@ TEST_F(CompositorWorkerManagerTest, Basic)
|
| }
|
|
|
| // Tests that the same WebThread is used for new workers if the WebThread is still alive.
|
| -TEST_F(CompositorWorkerManagerTest, CreateSecondAndTerminateFirst)
|
| +TEST_F(CompositorWorkerThreadTest, CreateSecondAndTerminateFirst)
|
| {
|
| // Create the first worker and wait until it is initialized.
|
| OwnPtr<WebWaitableEvent> firstCreationEvent = adoptPtr(Platform::current()->createWaitableEvent());
|
| RefPtr<CompositorWorkerThread> firstWorker = createCompositorWorker(firstCreationEvent.get());
|
| - WebThreadSupportingGC* firstThread = &CompositorWorkerManager::instance()->compositorWorkerThread();
|
| + WebThreadSupportingGC* firstThread = CompositorWorkerThread::sharedBackingThread();
|
| ASSERT(firstThread);
|
| waitForWaitableEventAfterIteratingCurrentLoop(firstCreationEvent.get());
|
| v8::Isolate* firstIsolate = firstWorker->isolate();
|
| @@ -200,7 +226,7 @@ TEST_F(CompositorWorkerManagerTest, CreateSecondAndTerminateFirst)
|
|
|
| // Wait until the second worker is initialized. Verify that the second worker is using the same
|
| // thread and Isolate as the first worker.
|
| - WebThreadSupportingGC* secondThread = &CompositorWorkerManager::instance()->compositorWorkerThread();
|
| + WebThreadSupportingGC* secondThread = CompositorWorkerThread::sharedBackingThread();
|
| ASSERT(secondThread);
|
| waitForWaitableEventAfterIteratingCurrentLoop(secondCreationEvent.get());
|
| EXPECT_EQ(firstThread, secondThread);
|
| @@ -222,12 +248,12 @@ static void checkCurrentIsolate(v8::Isolate* isolate, WebWaitableEvent* event)
|
| }
|
|
|
| // Tests that a new WebThread is created if all existing workers are terminated before a new worker is created.
|
| -TEST_F(CompositorWorkerManagerTest, TerminateFirstAndCreateSecond)
|
| +TEST_F(CompositorWorkerThreadTest, TerminateFirstAndCreateSecond)
|
| {
|
| // Create the first worker, wait until it is initialized, and terminate it.
|
| OwnPtr<WebWaitableEvent> creationEvent = adoptPtr(Platform::current()->createWaitableEvent());
|
| RefPtr<CompositorWorkerThread> compositorWorker = createCompositorWorker(creationEvent.get());
|
| - WebThreadSupportingGC* firstThread = &CompositorWorkerManager::instance()->compositorWorkerThread();
|
| + WebThreadSupportingGC* firstThread = CompositorWorkerThread::sharedBackingThread();
|
| waitForWaitableEventAfterIteratingCurrentLoop(creationEvent.get());
|
| ASSERT(compositorWorker->isolate());
|
| compositorWorker->terminateAndWait();
|
| @@ -236,7 +262,7 @@ TEST_F(CompositorWorkerManagerTest, TerminateFirstAndCreateSecond)
|
| // thread will have been destroyed after destroying the first worker.
|
| creationEvent = adoptPtr(Platform::current()->createWaitableEvent());
|
| compositorWorker = createCompositorWorker(creationEvent.get());
|
| - WebThreadSupportingGC* secondThread = &CompositorWorkerManager::instance()->compositorWorkerThread();
|
| + WebThreadSupportingGC* secondThread = CompositorWorkerThread::sharedBackingThread();
|
| EXPECT_NE(firstThread, secondThread);
|
| waitForWaitableEventAfterIteratingCurrentLoop(creationEvent.get());
|
|
|
| @@ -250,7 +276,7 @@ TEST_F(CompositorWorkerManagerTest, TerminateFirstAndCreateSecond)
|
| }
|
|
|
| // Tests that v8::Isolate and WebThread are correctly set-up if a worker is created while another is terminating.
|
| -TEST_F(CompositorWorkerManagerTest, CreatingSecondDuringTerminationOfFirst)
|
| +TEST_F(CompositorWorkerThreadTest, CreatingSecondDuringTerminationOfFirst)
|
| {
|
| OwnPtr<WebWaitableEvent> firstCreationEvent = adoptPtr(Platform::current()->createWaitableEvent());
|
| RefPtr<TestCompositorWorkerThread> firstWorker = createCompositorWorker(firstCreationEvent.get());
|
| @@ -262,7 +288,7 @@ TEST_F(CompositorWorkerManagerTest, CreatingSecondDuringTerminationOfFirst)
|
| // the first worker terminates its isolate.
|
| OwnPtr<WebWaitableEvent> secondCreationEvent = adoptPtr(Platform::current()->createWaitableEvent());
|
| RefPtr<CompositorWorkerThread> secondWorker;
|
| - firstWorker->setCallbackAfterV8Termination(bind(&CompositorWorkerManagerTest::createWorkerAdapter, this, &secondWorker, secondCreationEvent.get()));
|
| + firstWorker->setCallbackAfterV8Termination(bind(&CompositorWorkerThreadTest::createWorkerAdapter, this, &secondWorker, secondCreationEvent.get()));
|
| firstWorker->terminateAndWait();
|
| ASSERT(secondWorker);
|
|
|
|
|