diff options
Diffstat (limited to 'Source/WebKit/chromium/tests/Canvas2DLayerChromiumTest.cpp')
| -rw-r--r-- | Source/WebKit/chromium/tests/Canvas2DLayerChromiumTest.cpp | 205 |
1 files changed, 0 insertions, 205 deletions
diff --git a/Source/WebKit/chromium/tests/Canvas2DLayerChromiumTest.cpp b/Source/WebKit/chromium/tests/Canvas2DLayerChromiumTest.cpp deleted file mode 100644 index b42485b71..000000000 --- a/Source/WebKit/chromium/tests/Canvas2DLayerChromiumTest.cpp +++ /dev/null @@ -1,205 +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 "Canvas2DLayerChromium.h" - -#include "CCSchedulerTestCommon.h" -#include "FakeCCLayerTreeHostClient.h" -#include "FakeWebGraphicsContext3D.h" -#include "GraphicsContext3DPrivate.h" -#include "Region.h" -#include "TextureCopier.h" -#include "TextureManager.h" -#include "WebCompositor.h" -#include "WebKit.h" -#include "cc/CCSingleThreadProxy.h" -#include "cc/CCTextureLayerImpl.h" -#include "cc/CCTextureUpdater.h" -#include "platform/WebKitPlatformSupport.h" -#include "platform/WebThread.h" - -#include <gmock/gmock.h> -#include <gtest/gtest.h> -#include <wtf/RefPtr.h> - -using namespace WebCore; -using namespace WebKit; -using namespace WebKitTests; -using testing::InSequence; -using testing::Return; -using testing::Test; - -namespace { - -class FakeCCLayerTreeHost : public CCLayerTreeHost { -public: - static PassOwnPtr<FakeCCLayerTreeHost> create() - { - OwnPtr<FakeCCLayerTreeHost> host(adoptPtr(new FakeCCLayerTreeHost)); - host->initialize(); - return host.release(); - } - -private: - FakeCCLayerTreeHost() - : CCLayerTreeHost(&m_client, CCSettings()) - { - } - - FakeCCLayerTreeHostClient m_client; -}; - -class MockCanvasContext : public FakeWebGraphicsContext3D { -public: - MOCK_METHOD0(flush, void(void)); -}; - -class MockTextureAllocator : public TextureAllocator { -public: - MOCK_METHOD2(createTexture, unsigned(const IntSize&, GC3Denum)); - MOCK_METHOD3(deleteTexture, void(unsigned, const IntSize&, GC3Denum)); -}; - -class MockTextureCopier : public TextureCopier { -public: - MOCK_METHOD4(copyTexture, void(GraphicsContext3D*, unsigned, unsigned, const IntSize&)); -}; - -class MockTextureUploader : public TextureUploader { -public: - MOCK_METHOD0(isBusy, bool()); - MOCK_METHOD0(beginUploads, void()); - MOCK_METHOD0(endUploads, void()); - MOCK_METHOD5(uploadTexture, void(GraphicsContext3D*, LayerTextureUpdater::Texture*, TextureAllocator*, const IntRect, const IntRect)); -}; - -} // namespace - -class Canvas2DLayerChromiumTest : public Test { -protected: - void fullLifecycleTest(bool threaded, bool deferred) - { - GraphicsContext3D::Attributes attrs; - - RefPtr<GraphicsContext3D> mainContext = GraphicsContext3DPrivate::createGraphicsContextFromWebContext(adoptPtr(new MockCanvasContext()), GraphicsContext3D::RenderDirectlyToHostWindow); - RefPtr<GraphicsContext3D> implContext = GraphicsContext3DPrivate::createGraphicsContextFromWebContext(adoptPtr(new MockCanvasContext()), GraphicsContext3D::RenderDirectlyToHostWindow); - - MockCanvasContext& mainMock = *static_cast<MockCanvasContext*>(GraphicsContext3DPrivate::extractWebGraphicsContext3D(mainContext.get())); - MockCanvasContext& implMock = *static_cast<MockCanvasContext*>(GraphicsContext3DPrivate::extractWebGraphicsContext3D(implContext.get())); - - MockTextureAllocator allocatorMock; - MockTextureCopier copierMock; - MockTextureUploader uploaderMock; - CCTextureUpdater updater; - - const IntSize size(300, 150); - - OwnPtr<WebThread> thread; - if (threaded) - thread = adoptPtr(WebKit::Platform::current()->createThread("Canvas2DLayerChromiumTest")); - WebCompositor::initialize(thread.get()); - - OwnPtr<FakeCCLayerTreeHost> layerTreeHost(FakeCCLayerTreeHost::create()); - // Force an update, so that we get a valid TextureManager. - layerTreeHost->updateLayers(updater); - - const WebGLId backTextureId = 1; - const WebGLId frontTextureId = 2; - { - InSequence sequence; - - // Paint canvas contents on the main thread. - EXPECT_CALL(mainMock, flush()); - - // Note that the canvas backing texture is doublebuffered only when using the threaded - // compositor and not using deferred canvas rendering - if (threaded && !deferred) { - // Create texture and do the copy (on the impl thread). - EXPECT_CALL(allocatorMock, createTexture(size, GraphicsContext3D::RGBA)) - .WillOnce(Return(frontTextureId)); - EXPECT_CALL(copierMock, copyTexture(implContext.get(), backTextureId, frontTextureId, size)); - EXPECT_CALL(implMock, flush()); - - // Teardown TextureManager. - EXPECT_CALL(allocatorMock, deleteTexture(frontTextureId, size, GraphicsContext3D::RGBA)); - } - } - - RefPtr<Canvas2DLayerChromium> canvas = Canvas2DLayerChromium::create(mainContext.get(), size, deferred ? Deferred : NonDeferred); - canvas->setIsDrawable(true); - canvas->setLayerTreeHost(layerTreeHost.get()); - canvas->setBounds(IntSize(600, 300)); - canvas->setTextureId(backTextureId); - - canvas->setNeedsDisplay(); - EXPECT_TRUE(canvas->needsDisplay()); - canvas->update(updater, 0); - EXPECT_FALSE(canvas->needsDisplay()); - { - DebugScopedSetImplThread scopedImplThread; - - OwnPtr<CCLayerImpl> layerImpl = canvas->createCCLayerImpl(); - EXPECT_EQ(0u, static_cast<CCTextureLayerImpl*>(layerImpl.get())->textureId()); - - updater.update(implContext.get(), &allocatorMock, &copierMock, &uploaderMock, 1); - canvas->pushPropertiesTo(layerImpl.get()); - - if (threaded && !deferred) - EXPECT_EQ(frontTextureId, static_cast<CCTextureLayerImpl*>(layerImpl.get())->textureId()); - else - EXPECT_EQ(backTextureId, static_cast<CCTextureLayerImpl*>(layerImpl.get())->textureId()); - } - canvas.clear(); - layerTreeHost->contentsTextureManager()->reduceMemoryToLimit(0); - layerTreeHost->contentsTextureManager()->deleteEvictedTextures(&allocatorMock); - layerTreeHost.clear(); - WebCompositor::shutdown(); - } -}; - -namespace { - -TEST_F(Canvas2DLayerChromiumTest, testFullLifecycleSingleThread) -{ - fullLifecycleTest(false, false); -} - -TEST_F(Canvas2DLayerChromiumTest, testFullLifecycleThreaded) -{ - fullLifecycleTest(true, false); -} - -TEST_F(Canvas2DLayerChromiumTest, testFullLifecycleSingleThreadDeferred) -{ - fullLifecycleTest(false, true); -} - -TEST_F(Canvas2DLayerChromiumTest, testFullLifecycleThreadedDeferred) -{ - fullLifecycleTest(true, true); -} - -} // namespace |
