Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(2544)

Unified Diff: third_party/WebKit/Source/modules/compositorworker/AnimationWorkletThreadTest.cpp

Issue 2254593002: [worklets] Introduce AnimationWorkletGlobalScope and ThreadedWorkletGlobalScope (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Add super call to WorkletGlobalScope::dispose() Created 4 years, 4 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: third_party/WebKit/Source/modules/compositorworker/AnimationWorkletThreadTest.cpp
diff --git a/third_party/WebKit/Source/modules/compositorworker/CompositorWorkerThreadTest.cpp b/third_party/WebKit/Source/modules/compositorworker/AnimationWorkletThreadTest.cpp
similarity index 36%
copy from third_party/WebKit/Source/modules/compositorworker/CompositorWorkerThreadTest.cpp
copy to third_party/WebKit/Source/modules/compositorworker/AnimationWorkletThreadTest.cpp
index 9220ccc44d39e2dbd92972069dd7b515e88551e9..a5cf53470c5dd1621f5c7491a60908a3589c08fa 100644
--- a/third_party/WebKit/Source/modules/compositorworker/CompositorWorkerThreadTest.cpp
+++ b/third_party/WebKit/Source/modules/compositorworker/AnimationWorkletThreadTest.cpp
@@ -2,15 +2,13 @@
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
-#include "modules/compositorworker/CompositorWorkerThread.h"
+#include "modules/compositorworker/AnimationWorkletThread.h"
#include "bindings/core/v8/ScriptSourceCode.h"
#include "bindings/core/v8/SourceLocation.h"
#include "bindings/core/v8/V8GCController.h"
#include "bindings/core/v8/WorkerOrWorkletScriptController.h"
-#include "core/dom/CompositorProxyClient.h"
#include "core/inspector/ConsoleMessage.h"
-#include "core/testing/DummyPageHolder.h"
#include "core/workers/InProcessWorkerObjectProxy.h"
#include "core/workers/WorkerBackingThread.h"
#include "core/workers/WorkerLoaderProxy.h"
@@ -31,16 +29,16 @@
namespace blink {
namespace {
-// A null InProcessWorkerObjectProxy, supplied when creating CompositorWorkerThreads.
-class TestCompositorWorkerObjectProxy : public InProcessWorkerObjectProxy {
+// A null WorkerReportingProxy, supplied when creating AnimationWorkletThreads.
+class TestAnimationWorkletReportingProxy : public WorkerReportingProxy {
public:
- static std::unique_ptr<TestCompositorWorkerObjectProxy> create(ExecutionContext* context)
+ static std::unique_ptr<TestAnimationWorkletReportingProxy> create()
{
- return wrapUnique(new TestCompositorWorkerObjectProxy(context));
+ return wrapUnique(new TestAnimationWorkletReportingProxy());
}
// (Empty) WorkerReportingProxy implementation:
- virtual void dispatchErrorEvent(const String& errorMessage, std::unique_ptr<SourceLocation>, int exceptionId) {}
+ void reportException(const String& errorMessage, std::unique_ptr<SourceLocation>, int exceptionId) override {}
void reportConsoleMessage(MessageSource, MessageLevel, const String& message, SourceLocation*) override {}
void postMessageToPageInspector(const String&) override {}
@@ -50,34 +48,13 @@ public:
void workerThreadTerminated() override {}
void willDestroyWorkerGlobalScope() override {}
- ExecutionContext* getExecutionContext() override { return m_executionContext.get(); }
-
private:
- TestCompositorWorkerObjectProxy(ExecutionContext* context)
- : InProcessWorkerObjectProxy(nullptr)
- , m_executionContext(context)
- {
- }
-
- Persistent<ExecutionContext> m_executionContext;
-};
-
-class TestCompositorProxyClient
- : public GarbageCollected<TestCompositorProxyClient>
- , public CompositorProxyClient {
- USING_GARBAGE_COLLECTED_MIXIN(TestCompositorProxyClient);
-public:
- TestCompositorProxyClient() {}
-
- void setGlobalScope(WorkerGlobalScope*) override {}
- void requestAnimationFrame() override {}
- void registerCompositorProxy(CompositorProxy*) override {}
- void unregisterCompositorProxy(CompositorProxy*) override {}
+ TestAnimationWorkletReportingProxy() {}
};
-class CompositorWorkerTestPlatform : public TestingPlatformSupport {
+class AnimationWorkletTestPlatform : public TestingPlatformSupport {
public:
- CompositorWorkerTestPlatform()
+ AnimationWorkletTestPlatform()
: m_thread(wrapUnique(m_oldPlatform->createThread("Compositor")))
{
}
@@ -96,151 +73,149 @@ private:
} // namespace
-class CompositorWorkerThreadTest : public ::testing::Test {
+class AnimationWorkletThreadTest : public ::testing::Test {
public:
void SetUp() override
{
- CompositorWorkerThread::createSharedBackingThreadForTest();
- m_page = DummyPageHolder::create();
- m_objectProxy = TestCompositorWorkerObjectProxy::create(&m_page->document());
+ AnimationWorkletThread::createSharedBackingThreadForTest();
+ m_reportingProxy = TestAnimationWorkletReportingProxy::create();
m_securityOrigin = SecurityOrigin::create(KURL(ParsedURLString, "http://fake.url/"));
}
void TearDown() override
{
- m_page.reset();
- CompositorWorkerThread::clearSharedBackingThread();
+ AnimationWorkletThread::clearSharedBackingThread();
}
- std::unique_ptr<CompositorWorkerThread> createCompositorWorker()
+ std::unique_ptr<AnimationWorkletThread> createAnimationWorkletThread()
{
- std::unique_ptr<CompositorWorkerThread> workerThread = CompositorWorkerThread::create(nullptr, *m_objectProxy, 0);
- WorkerClients* clients = WorkerClients::create();
- provideCompositorProxyClientTo(clients, new TestCompositorProxyClient);
- workerThread->start(WorkerThreadStartupData::create(
+ std::unique_ptr<AnimationWorkletThread> thread = AnimationWorkletThread::create(nullptr, *m_reportingProxy);
+ thread->start(WorkerThreadStartupData::create(
KURL(ParsedURLString, "http://fake.url/"),
"fake user agent",
- "//fake source code",
+ "",
nullptr,
DontPauseWorkerGlobalScopeOnStart,
nullptr,
"",
m_securityOrigin.get(),
- clients,
+ nullptr,
WebAddressSpaceLocal,
nullptr,
nullptr,
V8CacheOptionsDefault));
- return workerThread;
+ return thread;
}
- // Attempts to run some simple script for |worker|.
- void checkWorkerCanExecuteScript(WorkerThread* worker)
+ // Attempts to run some simple script for |thread|.
+ void checkWorkletCanExecuteScript(WorkerThread* thread)
{
std::unique_ptr<WaitableEvent> waitEvent = wrapUnique(new WaitableEvent());
- worker->workerBackingThread().backingThread().postTask(BLINK_FROM_HERE, crossThreadBind(&CompositorWorkerThreadTest::executeScriptInWorker, crossThreadUnretained(this),
- crossThreadUnretained(worker), crossThreadUnretained(waitEvent.get())));
+ thread->workerBackingThread().backingThread().postTask(BLINK_FROM_HERE, crossThreadBind(&AnimationWorkletThreadTest::executeScriptInWorklet, crossThreadUnretained(this),
+ crossThreadUnretained(thread), crossThreadUnretained(waitEvent.get())));
waitEvent->wait();
}
private:
- void executeScriptInWorker(WorkerThread* worker, WaitableEvent* waitEvent)
+ void executeScriptInWorklet(WorkerThread* thread, WaitableEvent* waitEvent)
{
- WorkerOrWorkletScriptController* scriptController = worker->globalScope()->scriptController();
- bool evaluateResult = scriptController->evaluate(ScriptSourceCode("var counter = 0; ++counter;"));
- ASSERT_UNUSED(evaluateResult, evaluateResult);
+ WorkerOrWorkletScriptController* scriptController = thread->globalScope()->scriptController();
+ scriptController->evaluate(ScriptSourceCode("var counter = 0; ++counter;"));
waitEvent->signal();
}
- std::unique_ptr<DummyPageHolder> m_page;
RefPtr<SecurityOrigin> m_securityOrigin;
- std::unique_ptr<InProcessWorkerObjectProxy> m_objectProxy;
- CompositorWorkerTestPlatform m_testPlatform;
+ std::unique_ptr<WorkerReportingProxy> m_reportingProxy;
+ AnimationWorkletTestPlatform m_testPlatform;
};
-TEST_F(CompositorWorkerThreadTest, Basic)
+TEST_F(AnimationWorkletThreadTest, Basic)
{
- std::unique_ptr<CompositorWorkerThread> compositorWorker = createCompositorWorker();
- checkWorkerCanExecuteScript(compositorWorker.get());
- compositorWorker->terminateAndWait();
+ std::unique_ptr<AnimationWorkletThread> worklet = createAnimationWorkletThread();
+ checkWorkletCanExecuteScript(worklet.get());
+ worklet->terminateAndWait();
}
-// Tests that the same WebThread is used for new workers if the WebThread is still alive.
-TEST_F(CompositorWorkerThreadTest, CreateSecondAndTerminateFirst)
+// Tests that the same WebThread is used for new worklets if the WebThread is
+// still alive.
+TEST_F(AnimationWorkletThreadTest, CreateSecondAndTerminateFirst)
{
- // Create the first worker and wait until it is initialized.
- std::unique_ptr<CompositorWorkerThread> firstWorker = createCompositorWorker();
- WebThreadSupportingGC* firstThread = &firstWorker->workerBackingThread().backingThread();
- checkWorkerCanExecuteScript(firstWorker.get());
- v8::Isolate* firstIsolate = firstWorker->isolate();
+ // Create the first worklet and wait until it is initialized.
+ std::unique_ptr<AnimationWorkletThread> firstWorklet = createAnimationWorkletThread();
+ WebThreadSupportingGC* firstThread = &firstWorklet->workerBackingThread().backingThread();
+ checkWorkletCanExecuteScript(firstWorklet.get());
+ v8::Isolate* firstIsolate = firstWorklet->isolate();
ASSERT_TRUE(firstIsolate);
- // Create the second worker and immediately destroy the first worker.
- std::unique_ptr<CompositorWorkerThread> secondWorker = createCompositorWorker();
+ // Create the second worklet and immediately destroy the first worklet.
+ std::unique_ptr<AnimationWorkletThread> secondWorklet = createAnimationWorkletThread();
// We don't use terminateAndWait here to avoid forcible termination.
- firstWorker->terminate();
- firstWorker->waitForShutdownForTesting();
+ firstWorklet->terminate();
+ firstWorklet->waitForShutdownForTesting();
- // 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 = &secondWorker->workerBackingThread().backingThread();
+ // Wait until the second worklet is initialized. Verify that the second
+ // worklet is using the same thread and Isolate as the first worklet.
+ WebThreadSupportingGC* secondThread = &secondWorklet->workerBackingThread().backingThread();
ASSERT_EQ(firstThread, secondThread);
- v8::Isolate* secondIsolate = secondWorker->isolate();
+ v8::Isolate* secondIsolate = secondWorklet->isolate();
ASSERT_TRUE(secondIsolate);
EXPECT_EQ(firstIsolate, secondIsolate);
- // Verify that the worker can still successfully execute script.
- checkWorkerCanExecuteScript(secondWorker.get());
+ // Verify that the worklet can still successfully execute script.
+ checkWorkletCanExecuteScript(secondWorklet.get());
- secondWorker->terminateAndWait();
+ secondWorklet->terminateAndWait();
}
-// Tests that a new WebThread is created if all existing workers are terminated before a new worker is created.
-TEST_F(CompositorWorkerThreadTest, TerminateFirstAndCreateSecond)
+// Tests that a new WebThread is created if all existing worklets are
+// terminated before a new worklet is created.
+TEST_F(AnimationWorkletThreadTest, TerminateFirstAndCreateSecond)
{
- // Create the first worker, wait until it is initialized, and terminate it.
- std::unique_ptr<CompositorWorkerThread> compositorWorker = createCompositorWorker();
- WebThreadSupportingGC* firstThread = &compositorWorker->workerBackingThread().backingThread();
- checkWorkerCanExecuteScript(compositorWorker.get());
+ // Create the first worklet, wait until it is initialized, and terminate it.
+ std::unique_ptr<AnimationWorkletThread> worklet = createAnimationWorkletThread();
+ WebThreadSupportingGC* firstThread = &worklet->workerBackingThread().backingThread();
+ checkWorkletCanExecuteScript(worklet.get());
// We don't use terminateAndWait here to avoid forcible termination.
- compositorWorker->terminate();
- compositorWorker->waitForShutdownForTesting();
+ worklet->terminate();
+ worklet->waitForShutdownForTesting();
- // Create the second worker. The backing thread is same.
- compositorWorker = createCompositorWorker();
- WebThreadSupportingGC* secondThread = &compositorWorker->workerBackingThread().backingThread();
+ // Create the second worklet. The backing thread is same.
+ worklet = createAnimationWorkletThread();
+ WebThreadSupportingGC* secondThread = &worklet->workerBackingThread().backingThread();
EXPECT_EQ(firstThread, secondThread);
- checkWorkerCanExecuteScript(compositorWorker.get());
+ checkWorkletCanExecuteScript(worklet.get());
- compositorWorker->terminateAndWait();
+ worklet->terminateAndWait();
}
-// Tests that v8::Isolate and WebThread are correctly set-up if a worker is created while another is terminating.
-TEST_F(CompositorWorkerThreadTest, CreatingSecondDuringTerminationOfFirst)
+// Tests that v8::Isolate and WebThread are correctly set-up if a worklet is
+// created while another is terminating.
+TEST_F(AnimationWorkletThreadTest, CreatingSecondDuringTerminationOfFirst)
{
- std::unique_ptr<CompositorWorkerThread> firstWorker = createCompositorWorker();
- checkWorkerCanExecuteScript(firstWorker.get());
- v8::Isolate* firstIsolate = firstWorker->isolate();
+ std::unique_ptr<AnimationWorkletThread> firstWorklet = createAnimationWorkletThread();
+ checkWorkletCanExecuteScript(firstWorklet.get());
+ v8::Isolate* firstIsolate = firstWorklet->isolate();
ASSERT_TRUE(firstIsolate);
- // Request termination of the first worker and create the second worker
+ // Request termination of the first worklet and create the second worklet
// as soon as possible.
- firstWorker->terminate();
+ firstWorklet->terminate();
// We don't wait for its termination.
// Note: We rely on the assumption that the termination steps don't run
- // on the worker thread so quickly. This could be a source of flakiness.
+ // on the worklet thread so quickly. This could be a source of flakiness.
- std::unique_ptr<CompositorWorkerThread> secondWorker = createCompositorWorker();
+ std::unique_ptr<AnimationWorkletThread> secondWorklet = createAnimationWorkletThread();
- v8::Isolate* secondIsolate = secondWorker->isolate();
+ v8::Isolate* secondIsolate = secondWorklet->isolate();
ASSERT_TRUE(secondIsolate);
EXPECT_EQ(firstIsolate, secondIsolate);
- // Verify that the isolate can run some scripts correctly in the second worker.
- checkWorkerCanExecuteScript(secondWorker.get());
- secondWorker->terminateAndWait();
+ // Verify that the isolate can run some scripts correctly in the second
+ // worklet.
+ checkWorkletCanExecuteScript(secondWorklet.get());
+ secondWorklet->terminateAndWait();
}
} // namespace blink

Powered by Google App Engine
This is Rietveld 408576698