| Index: third_party/WebKit/Source/modules/canvas2d/CanvasRenderingContext2DTest.cpp
|
| diff --git a/third_party/WebKit/Source/modules/canvas2d/CanvasRenderingContext2DTest.cpp b/third_party/WebKit/Source/modules/canvas2d/CanvasRenderingContext2DTest.cpp
|
| index e15306497f0b0923c9d3d298b71ecc6f13fe3b5e..1a0c7ffd02a3d55f39f215c56c366c01a2c96cbf 100644
|
| --- a/third_party/WebKit/Source/modules/canvas2d/CanvasRenderingContext2DTest.cpp
|
| +++ b/third_party/WebKit/Source/modules/canvas2d/CanvasRenderingContext2DTest.cpp
|
| @@ -16,10 +16,13 @@
|
| #include "modules/canvas2d/CanvasGradient.h"
|
| #include "modules/canvas2d/CanvasPattern.h"
|
| #include "modules/webgl/WebGLRenderingContext.h"
|
| +#include "platform/graphics/Canvas2DImageBufferSurface.h"
|
| #include "platform/graphics/ExpensiveCanvasHeuristicParameters.h"
|
| #include "platform/graphics/RecordingImageBufferSurface.h"
|
| #include "platform/graphics/StaticBitmapImage.h"
|
| #include "platform/graphics/UnacceleratedImageBufferSurface.h"
|
| +#include "platform/graphics/test/FakeGLES2Interface.h"
|
| +#include "platform/graphics/test/FakeWebGraphicsContext3DProvider.h"
|
| #include "testing/gmock/include/gmock/gmock.h"
|
| #include "testing/gtest/include/gtest/gtest.h"
|
| #include "third_party/skia/include/core/SkSurface.h"
|
| @@ -90,6 +93,7 @@ protected:
|
| void createContext(OpacityMode);
|
| void TearDown();
|
| void unrefCanvas();
|
| + PassRefPtr<Canvas2DLayerBridge> makeBridge(std::unique_ptr<FakeWebGraphicsContext3DProvider>, const IntSize&, Canvas2DLayerBridge::AccelerationMode);
|
|
|
| private:
|
| std::unique_ptr<DummyPageHolder> m_dummyPageHolder;
|
| @@ -180,6 +184,11 @@ void CanvasRenderingContext2DTest::TearDown()
|
| replaceMemoryCacheForTesting(m_globalMemoryCache.release());
|
| }
|
|
|
| +PassRefPtr<Canvas2DLayerBridge> CanvasRenderingContext2DTest::makeBridge(std::unique_ptr<FakeWebGraphicsContext3DProvider> provider, const IntSize& size, Canvas2DLayerBridge::AccelerationMode accelerationMode)
|
| +{
|
| + return adoptRef(new Canvas2DLayerBridge(std::move(provider), size, 0, NonOpaque, accelerationMode));
|
| +}
|
| +
|
| //============================================================================
|
|
|
| class FakeAcceleratedImageBufferSurfaceForTesting : public UnacceleratedImageBufferSurface {
|
| @@ -753,4 +762,33 @@ TEST_F(CanvasRenderingContext2DTest, ContextDisposedBeforeCanvas)
|
| // Passes by not crashing later during teardown
|
| }
|
|
|
| +TEST_F(CanvasRenderingContext2DTest, GetImageDataDisablesAcceleration)
|
| +{
|
| + bool savedFixedRenderingMode = RuntimeEnabledFeatures::canvas2dFixedRenderingModeEnabled();
|
| + RuntimeEnabledFeatures::setCanvas2dFixedRenderingModeEnabled(false);
|
| +
|
| + createContext(NonOpaque);
|
| + FakeGLES2Interface gl;
|
| + std::unique_ptr<FakeWebGraphicsContext3DProvider> contextProvider(new FakeWebGraphicsContext3DProvider(&gl));
|
| + IntSize size(300, 300);
|
| + RefPtr<Canvas2DLayerBridge> bridge = makeBridge(std::move(contextProvider), size, Canvas2DLayerBridge::EnableAcceleration);
|
| + std::unique_ptr<Canvas2DImageBufferSurface> surface(new Canvas2DImageBufferSurface(bridge, size));
|
| + canvasElement().createImageBufferUsingSurfaceForTesting(std::move(surface));
|
| +
|
| + EXPECT_TRUE(bridge->isAccelerated());
|
| + EXPECT_EQ(1u, getGlobalAcceleratedImageBufferCount());
|
| + EXPECT_EQ(720000, getGlobalGPUMemoryUsage());
|
| +
|
| + TrackExceptionState exceptionState;
|
| + context2d()->getImageData(0, 0, 1, 1, exceptionState);
|
| +
|
| + EXPECT_FALSE(exceptionState.hadException());
|
| + EXPECT_FALSE(bridge->isAccelerated());
|
| + EXPECT_EQ(0u, getGlobalAcceleratedImageBufferCount());
|
| + EXPECT_EQ(0, getGlobalGPUMemoryUsage());
|
| +
|
| + // Restore global state to prevent side-effects on other tests
|
| + RuntimeEnabledFeatures::setCanvas2dFixedRenderingModeEnabled(savedFixedRenderingMode);
|
| +}
|
| +
|
| } // namespace blink
|
|
|