Chromium Code Reviews| 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 a33dbafaf9f050c81c5701da5a5fabc42039a45d..a6a6b8446c6dcaa67b5cfb92ea5258808e6e799d 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" |
| @@ -88,6 +91,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; |
| @@ -178,6 +182,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 { |
| @@ -751,4 +760,30 @@ TEST_F(CanvasRenderingContext2DTest, ContextDisposedBeforeCanvas) |
| // Passes by not crashing later during teardown |
| } |
| +TEST_F(CanvasRenderingContext2DTest, GetImageDataDisablesAcceleration) |
| +{ |
| + 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, NonOpaque)); |
| + canvasElement().createImageBufferUsingSurfaceForTesting(std::move(surface)); |
| + |
| + EXPECT_TRUE(bridge->isAccelerated()); |
| + EXPECT_EQ(1u, getGlobalAcceleratedImageBufferCount()); |
| + EXPECT_EQ(720000, getGlobalGPUMemoryUsage()); |
| + |
| + bool savedValue = RuntimeEnabledFeatures::canvas2dFixedRenderingModeEnabled(); |
| + RuntimeEnabledFeatures::setCanvas2dFixedRenderingModeEnabled(false); |
|
xlai (Olivia)
2016/06/23 19:55:02
Nits: Why don't you set the Canvas2dFixedRendering
Justin Novosad
2016/06/23 21:02:09
Done.
|
| + TrackExceptionState exceptionState; |
| + context2d()->getImageData(0, 0, 1, 1, exceptionState); |
| + RuntimeEnabledFeatures::setCanvas2dFixedRenderingModeEnabled(savedValue); |
| + |
| + EXPECT_FALSE(exceptionState.hadException()); |
| + EXPECT_FALSE(bridge->isAccelerated()); |
| + EXPECT_EQ(0u, getGlobalAcceleratedImageBufferCount()); |
| + EXPECT_EQ(0, getGlobalGPUMemoryUsage()); |
| +} |
| + |
| } // namespace blink |