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 3d3f0736e97da17a970bbcde7ef9000ce9273ee2..5acf8ef0cb167c16fae6fab6dcbdf66e14d91baf 100644 |
| --- a/third_party/WebKit/Source/modules/canvas2d/CanvasRenderingContext2DTest.cpp |
| +++ b/third_party/WebKit/Source/modules/canvas2d/CanvasRenderingContext2DTest.cpp |
| @@ -47,6 +47,7 @@ public: |
| bool wouldTaintOrigin(SecurityOrigin* destinationSecurityOrigin) const override { return false; } |
| FloatSize elementSize(const FloatSize&) const override { return FloatSize(m_size); } |
| bool isOpaque() const override { return m_isOpaque; } |
| + bool isAccelerated() const { return false; } |
| int sourceWidth() override { return m_size.width(); } |
| int sourceHeight() override { return m_size.height(); } |
| @@ -799,6 +800,74 @@ TEST_F(CanvasRenderingContext2DTest, GetImageDataDisablesAcceleration) |
| RuntimeEnabledFeatures::setCanvas2dFixedRenderingModeEnabled(savedFixedRenderingMode); |
| } |
| +TEST_F(CanvasRenderingContext2DTest, LargeTextureUploadDisablesAcceleration) |
| +{ |
|
xidachen
2016/09/24 01:36:34
I can see that these two tests are sharing a lot o
|
| + bool savedFixedRenderingMode = RuntimeEnabledFeatures::canvas2dFixedRenderingModeEnabled(); |
| + RuntimeEnabledFeatures::setCanvas2dFixedRenderingModeEnabled(false); |
| + |
| + int srcDim = sqrt(ExpensiveCanvasHeuristicParameters::DrawImageTextureUploadSoftSizeLimit) + 1; |
| + int dstDim = srcDim / sqrt(ExpensiveCanvasHeuristicParameters::DrawImageTextureUploadSoftSizeLimitScaleThreshold) - 1; |
| + |
| + createContext(NonOpaque); |
| + FakeGLES2Interface gl; |
| + std::unique_ptr<FakeWebGraphicsContext3DProvider> contextProvider(new FakeWebGraphicsContext3DProvider(&gl)); |
| + IntSize size(dstDim, dstDim); |
|
xidachen
2016/09/24 01:36:34
Could we name this dstSize?
|
| + 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(canvasElement().buffer()->isAccelerated()); |
| + EXPECT_EQ(1u, getGlobalAcceleratedImageBufferCount()); |
| + EXPECT_EQ(8*dstDim*dstDim, getGlobalGPUMemoryUsage()); |
|
xidachen
2016/09/24 01:36:34
I don't quite understand why is this *8? My impres
|
| + sk_sp<SkSurface> skSurface = SkSurface::MakeRasterN32Premul(srcDim, srcDim); |
| + RefPtr<StaticBitmapImage> bigBitmap = StaticBitmapImage::create(skSurface->makeImageSnapshot()); |
| + ImageBitmap* bigImage = ImageBitmap::create(std::move(bigBitmap)); |
| + NonThrowableExceptionState exceptionState; |
| + context2d()->drawImage(nullptr, bigImage, 0, 0, srcDim, srcDim, 0, 0, dstDim, dstDim, exceptionState); |
| + EXPECT_FALSE(exceptionState.hadException()); |
| + |
| + EXPECT_TRUE(!canvasElement().buffer()->isAccelerated()); |
|
xidachen
2016/09/24 01:36:34
Maybe change to EXPECT_FALSE(canvasElement().buffe
|
| + EXPECT_EQ(0u, getGlobalAcceleratedImageBufferCount()); |
| + EXPECT_EQ(0, getGlobalGPUMemoryUsage()); |
| + |
| + // Restore global state to prevent side-effects on other tests |
| + RuntimeEnabledFeatures::setCanvas2dFixedRenderingModeEnabled(savedFixedRenderingMode); |
| +} |
| + |
| +TEST_F(CanvasRenderingContext2DTest, SmallTextureUploadDoesNotDisableAcceleration) |
| +{ |
| + bool savedFixedRenderingMode = RuntimeEnabledFeatures::canvas2dFixedRenderingModeEnabled(); |
| + RuntimeEnabledFeatures::setCanvas2dFixedRenderingModeEnabled(false); |
| + |
| + int srcDim = sqrt(ExpensiveCanvasHeuristicParameters::DrawImageTextureUploadSoftSizeLimit) - 1; |
| + int dstDim = srcDim / sqrt(ExpensiveCanvasHeuristicParameters::DrawImageTextureUploadSoftSizeLimitScaleThreshold) + 1; |
| + |
| + createContext(NonOpaque); |
| + FakeGLES2Interface gl; |
| + std::unique_ptr<FakeWebGraphicsContext3DProvider> contextProvider(new FakeWebGraphicsContext3DProvider(&gl)); |
| + IntSize size(dstDim, dstDim); |
|
xidachen
2016/09/24 01:36:34
dstSize?
|
| + 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(canvasElement().buffer()->isAccelerated()); |
| + EXPECT_EQ(1u, getGlobalAcceleratedImageBufferCount()); |
| + EXPECT_EQ(8*dstDim*dstDim, getGlobalGPUMemoryUsage()); |
| + sk_sp<SkSurface> skSurface = SkSurface::MakeRasterN32Premul(srcDim, srcDim); |
| + RefPtr<StaticBitmapImage> bigBitmap = StaticBitmapImage::create(skSurface->makeImageSnapshot()); |
| + ImageBitmap* bigImage = ImageBitmap::create(std::move(bigBitmap)); |
| + NonThrowableExceptionState exceptionState; |
| + context2d()->drawImage(nullptr, bigImage, 0, 0, srcDim, srcDim, 0, 0, dstDim, dstDim, exceptionState); |
| + EXPECT_FALSE(exceptionState.hadException()); |
| + |
| + EXPECT_TRUE(canvasElement().buffer()->isAccelerated()); |
| + EXPECT_EQ(1u, getGlobalAcceleratedImageBufferCount()); |
| + EXPECT_EQ(8*dstDim*dstDim, getGlobalGPUMemoryUsage()); |
| + |
| + // Restore global state to prevent side-effects on other tests |
| + RuntimeEnabledFeatures::setCanvas2dFixedRenderingModeEnabled(savedFixedRenderingMode); |
| +} |
| + |
| TEST_F(CanvasRenderingContext2DTest, IsAccelerationOptimalForCanvasContentHeuristic) |
| { |
| createContext(NonOpaque); |