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 |