| Index: Source/core/platform/graphics/chromium/Canvas2DLayerBridgeTest.cpp
|
| diff --git a/Source/core/platform/graphics/chromium/Canvas2DLayerBridgeTest.cpp b/Source/core/platform/graphics/chromium/Canvas2DLayerBridgeTest.cpp
|
| index b7c83c4b47cc62d1ddcde47f324355a98eb76c11..b08539b8320d30c5217cc6636b21f236915c9ddd 100644
|
| --- a/Source/core/platform/graphics/chromium/Canvas2DLayerBridgeTest.cpp
|
| +++ b/Source/core/platform/graphics/chromium/Canvas2DLayerBridgeTest.cpp
|
| @@ -24,17 +24,15 @@
|
|
|
| #include "config.h"
|
|
|
| -#include "core/platform/graphics/chromium/Canvas2DLayerBridge.h"
|
| -
|
| #include "SkDeferredCanvas.h"
|
| +#include "SkSurface.h"
|
| #include "core/platform/graphics/ImageBuffer.h"
|
| -#include "core/tests/FakeWebGraphicsContext3D.h"
|
| +#include "core/platform/graphics/chromium/Canvas2DLayerBridgeTestHelper.h"
|
| #include "public/platform/Platform.h"
|
| #include "public/platform/WebThread.h"
|
| #include "third_party/skia/include/core/SkDevice.h"
|
| #include "wtf/RefPtr.h"
|
|
|
| -#include <gmock/gmock.h>
|
| #include <gtest/gtest.h>
|
|
|
| using namespace WebCore;
|
| @@ -45,63 +43,93 @@ using testing::Test;
|
|
|
| namespace {
|
|
|
| -class MockCanvasContext : public FakeWebGraphicsContext3D {
|
| -public:
|
| - MOCK_METHOD0(flush, void(void));
|
| - MOCK_METHOD0(createTexture, unsigned(void));
|
| - MOCK_METHOD1(deleteTexture, void(unsigned));
|
| -
|
| - virtual GrGLInterface* onCreateGrGLInterface() OVERRIDE { return 0; }
|
| -};
|
| -
|
| class FakeCanvas2DLayerBridge : public Canvas2DLayerBridge {
|
| public:
|
| - static PassOwnPtr<FakeCanvas2DLayerBridge> create(PassRefPtr<GraphicsContext3D> context, SkDeferredCanvas* canvas, OpacityMode opacityMode)
|
| + static PassOwnPtr<FakeCanvas2DLayerBridge> create(PassOwnPtr<Helper> helper, const IntSize& size, OpacityMode opacityMode, bool* success)
|
| {
|
| - return adoptPtr(new FakeCanvas2DLayerBridge(context, canvas, opacityMode));
|
| + return adoptPtr(new FakeCanvas2DLayerBridge(helper, size, opacityMode, success));
|
| }
|
| protected:
|
| - FakeCanvas2DLayerBridge(PassRefPtr<GraphicsContext3D> context, SkDeferredCanvas* canvas, OpacityMode opacityMode) :
|
| - Canvas2DLayerBridge(context, canvas, opacityMode)
|
| + FakeCanvas2DLayerBridge(PassOwnPtr<Helper> helper, const WebCore::IntSize& size, OpacityMode opacityMode, bool* success) :
|
| + Canvas2DLayerBridge(helper, size, opacityMode, success)
|
| { }
|
| };
|
|
|
| -} // namespace
|
| +}
|
|
|
| class Canvas2DLayerBridgeTest : public Test {
|
| protected:
|
| void fullLifecycleTest()
|
| {
|
| - RefPtr<GraphicsContext3D> mainContext = GraphicsContext3D::createGraphicsContextFromWebContext(adoptPtr(new MockCanvasContext));
|
| + OwnPtr<Canvas2DLayerBridgeTestHelper> testHelper = adoptPtr(new Canvas2DLayerBridgeTestHelper);
|
|
|
| - MockCanvasContext& mainMock = *static_cast<MockCanvasContext*>(mainContext->webContext());
|
| + MockCanvasContext* mockContext = &testHelper->mock();
|
| + ::testing::Mock::VerifyAndClearExpectations(mockContext);
|
|
|
| - SkDevice device(SkBitmap::kARGB_8888_Config, 300, 150);
|
| - SkDeferredCanvas canvas(&device);
|
| + IntSize size(300, 150);
|
| + bool success;
|
| + OwnPtr<Canvas2DLayerBridge> bridge = FakeCanvas2DLayerBridge::create(testHelper.release(), size, Canvas2DLayerBridge::NonOpaque, &success);
|
| + EXPECT_TRUE(success);
|
|
|
| - ::testing::Mock::VerifyAndClearExpectations(&mainMock);
|
| + ::testing::Mock::VerifyAndClearExpectations(mockContext);
|
|
|
| - OwnPtr<Canvas2DLayerBridge> bridge = FakeCanvas2DLayerBridge::create(mainContext.release(), &canvas, Canvas2DLayerBridge::NonOpaque);
|
| -
|
| - ::testing::Mock::VerifyAndClearExpectations(&mainMock);
|
| -
|
| - EXPECT_CALL(mainMock, flush());
|
| + EXPECT_CALL(*mockContext, flush());
|
| unsigned textureId = bridge->backBufferTexture();
|
| EXPECT_EQ(textureId, 0u);
|
|
|
| - ::testing::Mock::VerifyAndClearExpectations(&mainMock);
|
| + ::testing::Mock::VerifyAndClearExpectations(mockContext);
|
|
|
| bridge.clear();
|
|
|
| - ::testing::Mock::VerifyAndClearExpectations(&mainMock);
|
| + ::testing::Mock::VerifyAndClearExpectations(mockContext);
|
| + }
|
| +
|
| + void loseContextTest()
|
| + {
|
| + OwnPtr<Canvas2DLayerBridgeTestHelper> testHelper = adoptPtr(new Canvas2DLayerBridgeTestHelper);
|
| + MockCanvasContext* mockContext = &testHelper->mock();
|
| +
|
| + IntSize size(300, 150);
|
| + bool success;
|
| + OwnPtr<Canvas2DLayerBridge> bridge = FakeCanvas2DLayerBridge::create(testHelper.release(), size, Canvas2DLayerBridge::NonOpaque, &success);
|
| + EXPECT_TRUE(success);
|
| +
|
| + ::testing::Mock::VerifyAndClearExpectations(mockContext);
|
| + EXPECT_TRUE(bridge->isValid());
|
| +
|
| + mockContext->fakeContextLoss();
|
| +
|
| + ::testing::Mock::VerifyAndClearExpectations(mockContext);
|
| +
|
| + EXPECT_FALSE(bridge->isValid());
|
| +
|
| + ::testing::Mock::VerifyAndClearExpectations(mockContext);
|
| +
|
| + static_cast<Canvas2DLayerBridgeTestHelper*>(bridge->helper())->regenerateContext();
|
| + mockContext = &static_cast<Canvas2DLayerBridgeTestHelper*>(bridge->helper())->mock();
|
| +
|
| + ::testing::Mock::VerifyAndClearExpectations(mockContext);
|
| +
|
| + EXPECT_TRUE(bridge->isValid());
|
| +
|
| + ::testing::Mock::VerifyAndClearExpectations(mockContext);
|
| +
|
| + EXPECT_FALSE(bridge->prepareMailbox(0, 0));
|
| +
|
| + ::testing::Mock::VerifyAndClearExpectations(mockContext);
|
| }
|
| };
|
|
|
| namespace {
|
|
|
| -TEST_F(Canvas2DLayerBridgeTest, testFullLifecycleSingleThreaded)
|
| +TEST_F(Canvas2DLayerBridgeTest, testFullLifecycle)
|
| {
|
| fullLifecycleTest();
|
| }
|
|
|
| +TEST_F(Canvas2DLayerBridgeTest, testLoseContext)
|
| +{
|
| + loseContextTest();
|
| +}
|
| +
|
| } // namespace
|
|
|