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 11c981c40518a2852efc971c4d3a0360c4afb0c2..c6ea8a4cd69cdf1197e229f03a15c230da73a419 100644 |
| --- a/third_party/WebKit/Source/modules/canvas2d/CanvasRenderingContext2DTest.cpp |
| +++ b/third_party/WebKit/Source/modules/canvas2d/CanvasRenderingContext2DTest.cpp |
| @@ -79,6 +79,8 @@ protected: |
| HTMLDocument& document() const { return *m_document; } |
| HTMLCanvasElement& canvasElement() const { return *m_canvasElement; } |
| CanvasRenderingContext2D* context2d() const { return static_cast<CanvasRenderingContext2D*>(canvasElement().renderingContext()); } |
| + intptr_t getTotalGPUMemoryUsage() const { return ImageBuffer::getTotalGPUMemoryUsage(); } |
| + intptr_t getCurrGPUMemoryUsage() const { return canvasElement().buffer()->getGPUMemoryUsage(); } |
|
Justin Novosad
2015/12/08 22:15:27
Curr -> Current
|
| void createContext(OpacityMode); |
| void TearDown(); |
| @@ -174,6 +176,17 @@ void CanvasRenderingContext2DTest::TearDown() |
| //============================================================================ |
| +class FakeAcceleratedImageBufferSurfaceForOverwriteTesting : public UnacceleratedImageBufferSurface { |
|
Justin Novosad
2015/12/08 22:15:27
Bad name, this is not for overwrite testing
|
| +public: |
| + FakeAcceleratedImageBufferSurfaceForOverwriteTesting(const IntSize& size, OpacityMode mode) : UnacceleratedImageBufferSurface(size, mode) { } |
| + ~FakeAcceleratedImageBufferSurfaceForOverwriteTesting() override { } |
| + bool isAccelerated() const override { return true; } |
|
Justin Novosad
2015/12/08 22:15:27
you need a "setIsAccelerated" to go with this in o
|
| + |
| + MOCK_METHOD0(willOverwriteCanvas, void()); |
|
Justin Novosad
2015/12/08 22:15:27
this is not needed.
|
| +}; |
| + |
| +//============================================================================ |
| + |
| class MockImageBufferSurfaceForOverwriteTesting : public UnacceleratedImageBufferSurface { |
| public: |
| MockImageBufferSurfaceForOverwriteTesting(const IntSize& size, OpacityMode mode) : UnacceleratedImageBufferSurface(size, mode) { } |
| @@ -629,4 +642,33 @@ TEST_F(CanvasRenderingContext2DTest, ImageResourceLifetime) |
| context->drawImage(imageSource, 0, 0, exceptionState); |
| } |
| +TEST_F(CanvasRenderingContext2DTest, GPUMemoryUpdateForAcceleratedCanvas) |
| +{ |
| + createContext(NonOpaque); |
| + |
| + OwnPtr<FakeAcceleratedImageBufferSurfaceForOverwriteTesting> fakeAccelerateSurface = adoptPtr(new FakeAcceleratedImageBufferSurfaceForOverwriteTesting(IntSize(10, 10), NonOpaque)); |
| + FakeAcceleratedImageBufferSurfaceForOverwriteTesting* fakeAccelerateSurfacePtr = fakeAccelerateSurface.get(); |
| + canvasElement().createImageBufferUsingSurfaceForTesting(fakeAccelerateSurface.release()); |
| + |
| + // 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, getCurrGPUMemoryUsage()); |
| + EXPECT_EQ(800, getTotalGPUMemoryUsage()); |
| + |
| + OwnPtr<FakeAcceleratedImageBufferSurfaceForOverwriteTesting> fakeAccelerateSurface2 = adoptPtr(new FakeAcceleratedImageBufferSurfaceForOverwriteTesting(IntSize(10, 5), NonOpaque)); |
| + OwnPtr<ImageBuffer> imageBuffer = ImageBuffer::create(fakeAccelerateSurface2.release()); |
| + |
| + EXPECT_EQ(800, getCurrGPUMemoryUsage()); |
| + EXPECT_EQ(1200, getTotalGPUMemoryUsage()); |
| + |
| + canvasElement().setSize(IntSize(20, 20)); |
| + Mock::VerifyAndClearExpectations(fakeAccelerateSurfacePtr); |
| + |
| + EXPECT_EQ(400, getTotalGPUMemoryUsage()); |
| + |
| + imageBuffer.clear(); |
| + |
| + EXPECT_EQ(0, getTotalGPUMemoryUsage()); |
| +} |
| + |
| } // namespace blink |