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 1a0c7ffd02a3d55f39f215c56c366c01a2c96cbf..1829695ee8d2daf414c840ea4a61b9911c8389e5 100644 |
| --- a/third_party/WebKit/Source/modules/canvas2d/CanvasRenderingContext2DTest.cpp |
| +++ b/third_party/WebKit/Source/modules/canvas2d/CanvasRenderingContext2DTest.cpp |
| @@ -791,4 +791,56 @@ TEST_F(CanvasRenderingContext2DTest, GetImageDataDisablesAcceleration) |
| RuntimeEnabledFeatures::setCanvas2dFixedRenderingModeEnabled(savedFixedRenderingMode); |
| } |
| +TEST_F(CanvasRenderingContext2DTest, ShouldAccelerateHeuristic) |
| +{ |
| + createContext(NonOpaque); |
| + |
| + std::unique_ptr<FakeAcceleratedImageBufferSurfaceForTesting> fakeAccelerateSurface = wrapUnique(new FakeAcceleratedImageBufferSurfaceForTesting(IntSize(10, 10), NonOpaque)); |
| + canvasElement().createImageBufferUsingSurfaceForTesting(std::move(fakeAccelerateSurface)); |
| + |
| + NonThrowableExceptionState exceptionState; |
| + |
| + CanvasRenderingContext2D* context = context2d(); |
| + EXPECT_EQ(true, context->shouldAccelerate()); |
| + |
| + context->fillRect(10, 10, 100, 100); |
| + EXPECT_EQ(false, context->shouldAccelerate()); |
| + |
| + context->drawImage(canvasElement().getExecutionContext(), &m_opaqueBitmap, 0, 0, 1, 1, 0, 0, 10, 10, exceptionState); |
| + EXPECT_EQ(true, context->shouldAccelerate()); |
| + |
| + int numReps = 100; |
| + for (int i = 0; i < numReps; i++) { |
| + context->fillRect(10, 10, 100, 100); |
| + } |
| + EXPECT_EQ(false, context->shouldAccelerate()); |
| +} |
| + |
| +TEST_F(CanvasRenderingContext2DTest, DisableAcceleration) |
| +{ |
| + createContext(NonOpaque); |
| + |
| + std::unique_ptr<FakeAcceleratedImageBufferSurfaceForTesting> fakeAccelerateSurface = wrapUnique(new FakeAcceleratedImageBufferSurfaceForTesting(IntSize(10, 10), NonOpaque)); |
| + canvasElement().createImageBufferUsingSurfaceForTesting(std::move(fakeAccelerateSurface)); |
| + CanvasRenderingContext2D* context = context2d(); |
| + |
| + // 800 = 10 * 10 * 4 * 2 where 10*10 is canvas size, 4 is num of bytes per pixel per buffer, |
| + // and 2 is an estimate of num of gpu buffers required |
| + EXPECT_EQ(800, getCurrentGPUMemoryUsage()); |
| + EXPECT_EQ(800, getGlobalGPUMemoryUsage()); |
| + EXPECT_EQ(1u, getGlobalAcceleratedImageBufferCount()); |
| + |
| + context->fillRect(10, 10, 100, 100); |
| + EXPECT_EQ(true, canvasElement().buffer()->isAccelerated()); |
|
Justin Novosad
2016/07/12 19:31:24
use EXPECT_TRUE
sebastienlc
2016/07/13 19:51:02
Done.
|
| + |
| + canvasElement().buffer()->disableAcceleration(); |
| + EXPECT_EQ(false, canvasElement().buffer()->isAccelerated()); |
|
Justin Novosad
2016/07/12 19:31:24
use EXPECT_FALSE
sebastienlc
2016/07/13 19:51:02
Done.
|
| + |
| + context->fillRect(10, 10, 100, 100); |
| + |
| + EXPECT_EQ(0, getCurrentGPUMemoryUsage()); |
| + EXPECT_EQ(0, getGlobalGPUMemoryUsage()); |
| + EXPECT_EQ(0u, getGlobalAcceleratedImageBufferCount()); |
| +} |
| + |
| } // namespace blink |