summaryrefslogtreecommitdiff
path: root/Source/WebKit/chromium/tests/CCThreadedTest.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'Source/WebKit/chromium/tests/CCThreadedTest.cpp')
-rw-r--r--Source/WebKit/chromium/tests/CCThreadedTest.cpp649
1 files changed, 0 insertions, 649 deletions
diff --git a/Source/WebKit/chromium/tests/CCThreadedTest.cpp b/Source/WebKit/chromium/tests/CCThreadedTest.cpp
deleted file mode 100644
index a74e8e03a..000000000
--- a/Source/WebKit/chromium/tests/CCThreadedTest.cpp
+++ /dev/null
@@ -1,649 +0,0 @@
-/*
- * Copyright (C) 2011 Google Inc. All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
- * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
- * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
- * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
- * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
- * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
- * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
- * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-#include "config.h"
-
-#include "CCThreadedTest.h"
-
-#include "CCActiveAnimation.h"
-#include "CCAnimationTestCommon.h"
-#include "CCInputHandler.h"
-#include "CCLayerAnimationController.h"
-#include "CCLayerImpl.h"
-#include "CCLayerTreeHostImpl.h"
-#include "CCOcclusionTrackerTestCommon.h"
-#include "CCScopedThreadProxy.h"
-#include "CCSingleThreadProxy.h"
-#include "CCTextureUpdateQueue.h"
-#include "CCThreadTask.h"
-#include "CCTiledLayerTestCommon.h"
-#include "CCTimingFunction.h"
-#include "ContentLayerChromium.h"
-#include "FakeWebCompositorOutputSurface.h"
-#include "FakeWebGraphicsContext3D.h"
-#include "LayerChromium.h"
-#include <gmock/gmock.h>
-#include <public/Platform.h>
-#include <public/WebCompositorSupport.h>
-#include <public/WebFilterOperation.h>
-#include <public/WebFilterOperations.h>
-#include <public/WebThread.h>
-#include <wtf/Locker.h>
-#include <wtf/MainThread.h>
-#include <wtf/PassRefPtr.h>
-#include <wtf/ThreadingPrimitives.h>
-#include <wtf/Vector.h>
-
-using namespace WebCore;
-using namespace WebKit;
-
-namespace WebKitTests {
-
-PassOwnPtr<CompositorFakeWebGraphicsContext3DWithTextureTracking> CompositorFakeWebGraphicsContext3DWithTextureTracking::create(Attributes attrs)
-{
- return adoptPtr(new CompositorFakeWebGraphicsContext3DWithTextureTracking(attrs));
-}
-
-WebGLId CompositorFakeWebGraphicsContext3DWithTextureTracking::createTexture()
-{
- WebGLId texture = m_textures.size() + 1;
- m_textures.append(texture);
- return texture;
-}
-
-void CompositorFakeWebGraphicsContext3DWithTextureTracking::deleteTexture(WebGLId texture)
-{
- for (size_t i = 0; i < m_textures.size(); i++) {
- if (m_textures[i] == texture) {
- m_textures.remove(i);
- break;
- }
- }
-}
-
-void CompositorFakeWebGraphicsContext3DWithTextureTracking::bindTexture(WGC3Denum /* target */, WebGLId texture)
-{
- m_usedTextures.add(texture);
-}
-
-int CompositorFakeWebGraphicsContext3DWithTextureTracking::numTextures() const { return static_cast<int>(m_textures.size()); }
-int CompositorFakeWebGraphicsContext3DWithTextureTracking::texture(int i) const { return m_textures[i]; }
-void CompositorFakeWebGraphicsContext3DWithTextureTracking::resetTextures() { m_textures.clear(); }
-
-int CompositorFakeWebGraphicsContext3DWithTextureTracking::numUsedTextures() const { return static_cast<int>(m_usedTextures.size()); }
-bool CompositorFakeWebGraphicsContext3DWithTextureTracking::usedTexture(int texture) const { return m_usedTextures.find(texture) != m_usedTextures.end(); }
-void CompositorFakeWebGraphicsContext3DWithTextureTracking::resetUsedTextures() { m_usedTextures.clear(); }
-
-CompositorFakeWebGraphicsContext3DWithTextureTracking::CompositorFakeWebGraphicsContext3DWithTextureTracking(Attributes attrs) : CompositorFakeWebGraphicsContext3D(attrs)
-{
-}
-
-PassOwnPtr<WebCompositorOutputSurface> TestHooks::createOutputSurface()
-{
- return FakeWebCompositorOutputSurface::create(CompositorFakeWebGraphicsContext3DWithTextureTracking::create(WebGraphicsContext3D::Attributes()));
-}
-
-PassOwnPtr<MockLayerTreeHostImpl> MockLayerTreeHostImpl::create(TestHooks* testHooks, const CCLayerTreeSettings& settings, CCLayerTreeHostImplClient* client)
-{
- return adoptPtr(new MockLayerTreeHostImpl(testHooks, settings, client));
-}
-
-void MockLayerTreeHostImpl::beginCommit()
-{
- CCLayerTreeHostImpl::beginCommit();
- m_testHooks->beginCommitOnCCThread(this);
-}
-
-void MockLayerTreeHostImpl::commitComplete()
-{
- CCLayerTreeHostImpl::commitComplete();
- m_testHooks->commitCompleteOnCCThread(this);
-}
-
-bool MockLayerTreeHostImpl::prepareToDraw(FrameData& frame)
-{
- bool result = CCLayerTreeHostImpl::prepareToDraw(frame);
- if (!m_testHooks->prepareToDrawOnCCThread(this))
- result = false;
- return result;
-}
-
-void MockLayerTreeHostImpl::drawLayers(const FrameData& frame)
-{
- CCLayerTreeHostImpl::drawLayers(frame);
- m_testHooks->drawLayersOnCCThread(this);
-}
-
-void MockLayerTreeHostImpl::animateLayers(double monotonicTime, double wallClockTime)
-{
- m_testHooks->willAnimateLayers(this, monotonicTime);
- CCLayerTreeHostImpl::animateLayers(monotonicTime, wallClockTime);
- m_testHooks->animateLayers(this, monotonicTime);
-}
-
-double MockLayerTreeHostImpl::lowFrequencyAnimationInterval() const
-{
- return 1.0 / 60;
-}
-
-MockLayerTreeHostImpl::MockLayerTreeHostImpl(TestHooks* testHooks, const CCLayerTreeSettings& settings, CCLayerTreeHostImplClient* client)
- : CCLayerTreeHostImpl(settings, client)
- , m_testHooks(testHooks)
-{
-}
-
-// Adapts CCLayerTreeHost for test. Injects MockLayerTreeHostImpl.
-class MockLayerTreeHost : public WebCore::CCLayerTreeHost {
-public:
- static PassOwnPtr<MockLayerTreeHost> create(TestHooks* testHooks, WebCore::CCLayerTreeHostClient* client, PassRefPtr<WebCore::LayerChromium> rootLayer, const WebCore::CCLayerTreeSettings& settings)
- {
- OwnPtr<MockLayerTreeHost> layerTreeHost(adoptPtr(new MockLayerTreeHost(testHooks, client, settings)));
- bool success = layerTreeHost->initialize();
- EXPECT_TRUE(success);
- layerTreeHost->setRootLayer(rootLayer);
-
- // LayerTreeHostImpl won't draw if it has 1x1 viewport.
- layerTreeHost->setViewportSize(IntSize(1, 1), IntSize(1, 1));
-
- layerTreeHost->rootLayer()->setLayerAnimationDelegate(testHooks);
-
- return layerTreeHost.release();
- }
-
- virtual PassOwnPtr<WebCore::CCLayerTreeHostImpl> createLayerTreeHostImpl(WebCore::CCLayerTreeHostImplClient* client)
- {
- return MockLayerTreeHostImpl::create(m_testHooks, settings(), client);
- }
-
- virtual void didAddAnimation() OVERRIDE
- {
- CCLayerTreeHost::didAddAnimation();
- m_testHooks->didAddAnimation();
- }
-
-private:
- MockLayerTreeHost(TestHooks* testHooks, WebCore::CCLayerTreeHostClient* client, const WebCore::CCLayerTreeSettings& settings)
- : CCLayerTreeHost(client, settings)
- , m_testHooks(testHooks)
- {
- }
-
- TestHooks* m_testHooks;
-};
-
-// Implementation of CCLayerTreeHost callback interface.
-class MockLayerTreeHostClient : public MockCCLayerTreeHostClient {
-public:
- static PassOwnPtr<MockLayerTreeHostClient> create(TestHooks* testHooks)
- {
- return adoptPtr(new MockLayerTreeHostClient(testHooks));
- }
-
- virtual void willBeginFrame() OVERRIDE
- {
- }
-
- virtual void didBeginFrame() OVERRIDE
- {
- }
-
- virtual void animate(double monotonicTime) OVERRIDE
- {
- m_testHooks->animate(monotonicTime);
- }
-
- virtual void layout() OVERRIDE
- {
- m_testHooks->layout();
- }
-
- virtual void applyScrollAndScale(const IntSize& scrollDelta, float scale) OVERRIDE
- {
- m_testHooks->applyScrollAndScale(scrollDelta, scale);
- }
-
- virtual PassOwnPtr<WebCompositorOutputSurface> createOutputSurface() OVERRIDE
- {
- return m_testHooks->createOutputSurface();
- }
-
- virtual void didRecreateOutputSurface(bool succeeded) OVERRIDE
- {
- m_testHooks->didRecreateOutputSurface(succeeded);
- }
-
- virtual PassOwnPtr<CCInputHandler> createInputHandler() OVERRIDE
- {
- return nullptr;
- }
-
- virtual void willCommit() OVERRIDE
- {
- }
-
- virtual void didCommit() OVERRIDE
- {
- m_testHooks->didCommit();
- }
-
- virtual void didCommitAndDrawFrame() OVERRIDE
- {
- m_testHooks->didCommitAndDrawFrame();
- }
-
- virtual void didCompleteSwapBuffers() OVERRIDE
- {
- }
-
- virtual void scheduleComposite() OVERRIDE
- {
- m_testHooks->scheduleComposite();
- }
-
-private:
- explicit MockLayerTreeHostClient(TestHooks* testHooks) : m_testHooks(testHooks) { }
-
- TestHooks* m_testHooks;
-};
-
-class TimeoutTask : public WebThread::Task {
-public:
- explicit TimeoutTask(CCThreadedTest* test)
- : m_test(test)
- {
- }
-
- void clearTest()
- {
- m_test = 0;
- }
-
- virtual ~TimeoutTask()
- {
- if (m_test)
- m_test->clearTimeout();
- }
-
- virtual void run()
- {
- if (m_test)
- m_test->timeout();
- }
-
-private:
- CCThreadedTest* m_test;
-};
-
-class BeginTask : public WebThread::Task {
-public:
- explicit BeginTask(CCThreadedTest* test)
- : m_test(test)
- {
- }
-
- virtual ~BeginTask() { }
- virtual void run()
- {
- m_test->doBeginTest();
- }
-private:
- CCThreadedTest* m_test;
-};
-
-class EndTestTask : public WebThread::Task {
-public:
- explicit EndTestTask(CCThreadedTest* test)
- : m_test(test)
- {
- }
-
- virtual ~EndTestTask()
- {
- if (m_test)
- m_test->clearEndTestTask();
- }
-
- void clearTest()
- {
- m_test = 0;
- }
-
- virtual void run()
- {
- if (m_test)
- m_test->endTest();
- }
-
-private:
- CCThreadedTest* m_test;
-};
-
-CCThreadedTest::CCThreadedTest()
- : m_beginning(false)
- , m_endWhenBeginReturns(false)
- , m_timedOut(false)
- , m_finished(false)
- , m_scheduled(false)
- , m_started(false)
- , m_endTestTask(0)
-{ }
-
-void CCThreadedTest::endTest()
-{
- m_finished = true;
-
- // If we are called from the CCThread, re-call endTest on the main thread.
- if (!isMainThread())
- m_mainThreadProxy->postTask(createCCThreadTask(this, &CCThreadedTest::endTest));
- else {
- // For the case where we endTest during beginTest(), set a flag to indicate that
- // the test should end the second beginTest regains control.
- if (m_beginning)
- m_endWhenBeginReturns = true;
- else
- onEndTest(static_cast<void*>(this));
- }
-}
-
-void CCThreadedTest::endTestAfterDelay(int delayMilliseconds)
-{
- // If we are called from the CCThread, re-call endTest on the main thread.
- if (!isMainThread())
- m_mainThreadProxy->postTask(createCCThreadTask(this, &CCThreadedTest::endTestAfterDelay, delayMilliseconds));
- else {
- m_endTestTask = new EndTestTask(this);
- WebKit::Platform::current()->currentThread()->postDelayedTask(m_endTestTask, delayMilliseconds);
- }
-}
-
-void CCThreadedTest::postSetNeedsAnimateToMainThread()
-{
- callOnMainThread(CCThreadedTest::dispatchSetNeedsAnimate, this);
-}
-
-void CCThreadedTest::postAddAnimationToMainThread()
-{
- callOnMainThread(CCThreadedTest::dispatchAddAnimation, this);
-}
-
-void CCThreadedTest::postAddInstantAnimationToMainThread()
-{
- callOnMainThread(CCThreadedTest::dispatchAddInstantAnimation, this);
-}
-
-void CCThreadedTest::postSetNeedsCommitToMainThread()
-{
- callOnMainThread(CCThreadedTest::dispatchSetNeedsCommit, this);
-}
-
-void CCThreadedTest::postAcquireLayerTextures()
-{
- callOnMainThread(CCThreadedTest::dispatchAcquireLayerTextures, this);
-}
-
-void CCThreadedTest::postSetNeedsRedrawToMainThread()
-{
- callOnMainThread(CCThreadedTest::dispatchSetNeedsRedraw, this);
-}
-
-void CCThreadedTest::postSetNeedsAnimateAndCommitToMainThread()
-{
- callOnMainThread(CCThreadedTest::dispatchSetNeedsAnimateAndCommit, this);
-}
-
-void CCThreadedTest::postSetVisibleToMainThread(bool visible)
-{
- callOnMainThread(visible ? CCThreadedTest::dispatchSetVisible : CCThreadedTest::dispatchSetInvisible, this);
-}
-
-void CCThreadedTest::postDidAddAnimationToMainThread()
-{
- callOnMainThread(CCThreadedTest::dispatchDidAddAnimation, this);
-}
-
-void CCThreadedTest::doBeginTest()
-{
- ASSERT(isMainThread());
- m_client = MockLayerTreeHostClient::create(this);
-
- RefPtr<LayerChromium> rootLayer = LayerChromium::create();
- m_layerTreeHost = MockLayerTreeHost::create(this, m_client.get(), rootLayer, m_settings);
- ASSERT_TRUE(m_layerTreeHost);
- rootLayer->setLayerTreeHost(m_layerTreeHost.get());
- m_layerTreeHost->setSurfaceReady();
-
- m_started = true;
- m_beginning = true;
- beginTest();
- m_beginning = false;
- if (m_endWhenBeginReturns)
- onEndTest(static_cast<void*>(this));
-}
-
-void CCThreadedTest::timeout()
-{
- m_timedOut = true;
- endTest();
-}
-
-void CCThreadedTest::scheduleComposite()
-{
- if (!m_started || m_scheduled || m_finished)
- return;
- m_scheduled = true;
- callOnMainThread(&CCThreadedTest::dispatchComposite, this);
-}
-
-void CCThreadedTest::onEndTest(void* self)
-{
- ASSERT(isMainThread());
- WebKit::Platform::current()->currentThread()->exitRunLoop();
-}
-
-void CCThreadedTest::dispatchSetNeedsAnimate(void* self)
-{
- ASSERT(isMainThread());
-
- CCThreadedTest* test = static_cast<CCThreadedTest*>(self);
- ASSERT(test);
- if (test->m_finished)
- return;
-
- if (test->m_layerTreeHost)
- test->m_layerTreeHost->setNeedsAnimate();
-}
-
-void CCThreadedTest::dispatchAddInstantAnimation(void* self)
-{
- ASSERT(isMainThread());
-
- CCThreadedTest* test = static_cast<CCThreadedTest*>(self);
- ASSERT(test);
- if (test->m_finished)
- return;
-
- if (test->m_layerTreeHost && test->m_layerTreeHost->rootLayer())
- addOpacityTransitionToLayer(*test->m_layerTreeHost->rootLayer(), 0, 0, 0.5, false);
-}
-
-void CCThreadedTest::dispatchAddAnimation(void* self)
-{
- ASSERT(isMainThread());
-
- CCThreadedTest* test = static_cast<CCThreadedTest*>(self);
- ASSERT(test);
- if (test->m_finished)
- return;
-
- if (test->m_layerTreeHost && test->m_layerTreeHost->rootLayer())
- addOpacityTransitionToLayer(*test->m_layerTreeHost->rootLayer(), 10, 0, 0.5, true);
-}
-
-void CCThreadedTest::dispatchSetNeedsAnimateAndCommit(void* self)
-{
- ASSERT(isMainThread());
-
- CCThreadedTest* test = static_cast<CCThreadedTest*>(self);
- ASSERT(test);
- if (test->m_finished)
- return;
-
- if (test->m_layerTreeHost) {
- test->m_layerTreeHost->setNeedsAnimate();
- test->m_layerTreeHost->setNeedsCommit();
- }
-}
-
-void CCThreadedTest::dispatchSetNeedsCommit(void* self)
-{
- ASSERT(isMainThread());
-
- CCThreadedTest* test = static_cast<CCThreadedTest*>(self);
- ASSERT_TRUE(test);
- if (test->m_finished)
- return;
-
- if (test->m_layerTreeHost)
- test->m_layerTreeHost->setNeedsCommit();
-}
-
-void CCThreadedTest::dispatchAcquireLayerTextures(void* self)
-{
- ASSERT(isMainThread());
-
- CCThreadedTest* test = static_cast<CCThreadedTest*>(self);
- ASSERT_TRUE(test);
- if (test->m_finished)
- return;
-
- if (test->m_layerTreeHost)
- test->m_layerTreeHost->acquireLayerTextures();
-}
-
-void CCThreadedTest::dispatchSetNeedsRedraw(void* self)
-{
- ASSERT(isMainThread());
-
- CCThreadedTest* test = static_cast<CCThreadedTest*>(self);
- ASSERT_TRUE(test);
- if (test->m_finished)
- return;
-
- if (test->m_layerTreeHost)
- test->m_layerTreeHost->setNeedsRedraw();
-}
-
-void CCThreadedTest::dispatchSetVisible(void* self)
-{
- ASSERT(isMainThread());
-
- CCThreadedTest* test = static_cast<CCThreadedTest*>(self);
- ASSERT(test);
- if (test->m_finished)
- return;
-
- if (test->m_layerTreeHost)
- test->m_layerTreeHost->setVisible(true);
-}
-
-void CCThreadedTest::dispatchSetInvisible(void* self)
-{
- ASSERT(isMainThread());
-
- CCThreadedTest* test = static_cast<CCThreadedTest*>(self);
- ASSERT(test);
- if (test->m_finished)
- return;
-
- if (test->m_layerTreeHost)
- test->m_layerTreeHost->setVisible(false);
-}
-
-void CCThreadedTest::dispatchComposite(void* self)
-{
- CCThreadedTest* test = static_cast<CCThreadedTest*>(self);
- ASSERT(isMainThread());
- ASSERT(test);
- test->m_scheduled = false;
- if (test->m_layerTreeHost && !test->m_finished)
- test->m_layerTreeHost->composite();
-}
-
-void CCThreadedTest::dispatchDidAddAnimation(void* self)
-{
- ASSERT(isMainThread());
-
- CCThreadedTest* test = static_cast<CCThreadedTest*>(self);
- ASSERT(test);
- if (test->m_finished)
- return;
-
- if (test->m_layerTreeHost)
- test->m_layerTreeHost->didAddAnimation();
-}
-
-void CCThreadedTest::runTest(bool threaded)
-{
- // For these tests, we will enable threaded animations.
- Platform::current()->compositorSupport()->setAcceleratedAnimationEnabled(true);
-
- if (threaded) {
- m_webThread = adoptPtr(WebKit::Platform::current()->createThread("CCThreadedTest"));
- Platform::current()->compositorSupport()->initialize(m_webThread.get());
- } else
- Platform::current()->compositorSupport()->initialize(0);
-
- ASSERT(CCProxy::isMainThread());
- m_mainThreadProxy = CCScopedThreadProxy::create(CCProxy::mainThread());
-
- initializeSettings(m_settings);
-
- m_beginTask = new BeginTask(this);
- WebKit::Platform::current()->currentThread()->postDelayedTask(m_beginTask, 0); // postDelayedTask takes ownership of the task
- m_timeoutTask = new TimeoutTask(this);
- WebKit::Platform::current()->currentThread()->postDelayedTask(m_timeoutTask, 5000);
- WebKit::Platform::current()->currentThread()->enterRunLoop();
-
- if (m_layerTreeHost && m_layerTreeHost->rootLayer())
- m_layerTreeHost->rootLayer()->setLayerTreeHost(0);
- m_layerTreeHost.clear();
-
- if (m_timeoutTask)
- m_timeoutTask->clearTest();
-
- if (m_endTestTask)
- m_endTestTask->clearTest();
-
- ASSERT_FALSE(m_layerTreeHost.get());
- m_client.clear();
- if (m_timedOut) {
- FAIL() << "Test timed out";
- Platform::current()->compositorSupport()->shutdown();
- return;
- }
- afterTest();
- Platform::current()->compositorSupport()->shutdown();
-}
-
-} // namespace WebKitTests