Chromium Code Reviews| Index: Source/web/tests/Canvas2DLayerManagerTest.cpp |
| diff --git a/Source/web/tests/Canvas2DLayerManagerTest.cpp b/Source/web/tests/Canvas2DLayerManagerTest.cpp |
| index ef8183ccebbb044d09e166a1f7b43fa75e663c67..d6042c64e13245ece65740e892d2169a0231e6ab 100644 |
| --- a/Source/web/tests/Canvas2DLayerManagerTest.cpp |
| +++ b/Source/web/tests/Canvas2DLayerManagerTest.cpp |
| @@ -41,6 +41,7 @@ using testing::InSequence; |
| using testing::Return; |
| using testing::Test; |
| +namespace { |
| class FakeCanvas2DLayerBridge : public Canvas2DLayerBridge { |
| public: |
| @@ -72,14 +73,14 @@ public: |
| size_t bytesFreed = size < m_freeableBytes ? size : m_freeableBytes; |
| m_freeableBytes -= bytesFreed; |
| if (bytesFreed) |
| - Canvas2DLayerManager::get().layerAllocatedStorageChanged(this, -((intptr_t)bytesFreed)); |
| - m_bytesAllocated -= bytesFreed; |
| + storageAllocatedForRecordingChanged(m_bytesAllocated - bytesFreed); |
| return bytesFreed; |
| } |
| virtual void flush() OVERRIDE |
| { |
| flushedDrawCommands(); |
| + m_freeableBytes = bytesAllocated(); |
| m_flushCount++; |
| } |
| @@ -111,6 +112,8 @@ static PassOwnPtr<SkDeferredCanvas> createCanvas(GraphicsContext3D* context) |
| return adoptPtr(SkDeferredCanvas::Create(SkSurface::NewRasterPMColor(1, 1))); |
| } |
| +} // unnamed namespace |
| + |
| class Canvas2DLayerManagerTest : public Test { |
| protected: |
| void storageAllocationTrackingTest() |
| @@ -162,6 +165,40 @@ protected: |
| EXPECT_EQ((size_t)5, layer->bytesAllocated()); |
| } |
| + void hiddenCanvasTest() |
| + { |
| + OwnPtr<blink::MockWebGraphicsContext3D> webContext = adoptPtr(new blink::MockWebGraphicsContext3D); |
| + RefPtr<GraphicsContext3D> context = GraphicsContext3D::createContextSupport(webContext.get()); |
| + Canvas2DLayerManager& manager = Canvas2DLayerManager::get(); |
| + manager.init(20, 5); |
| + OwnPtr<SkDeferredCanvas> canvas = createCanvas(context.get()); |
| + FakeCanvas2DLayerBridgePtr layer(adoptRef(new FakeCanvas2DLayerBridge(context, canvas.release()))); |
| + layer->fakeFreeableBytes(5); |
| + layer->storageAllocatedForRecordingChanged(10); |
| + EXPECT_EQ(0, layer->m_freeMemoryIfPossibleCount); |
| + EXPECT_EQ(0, layer->m_flushCount); |
| + layer->setIsHidden(true); |
| + EXPECT_EQ(1, layer->m_freeMemoryIfPossibleCount); |
| + EXPECT_EQ((size_t)0, layer->m_freeableBytes); |
| + EXPECT_EQ((size_t)0, layer->bytesAllocated()); |
|
Stephen White
2014/01/24 18:52:35
Could we expect that bytesAllocated() is non-zero
|
| + EXPECT_EQ(1, layer->m_flushCount); |
| + } |
| + |
| + void addRemoveLayerTest() |
| + { |
| + OwnPtr<blink::MockWebGraphicsContext3D> webContext = adoptPtr(new blink::MockWebGraphicsContext3D); |
| + RefPtr<GraphicsContext3D> context = GraphicsContext3D::createContextSupport(webContext.get()); |
| + Canvas2DLayerManager& manager = Canvas2DLayerManager::get(); |
| + manager.init(10, 5); |
| + OwnPtr<SkDeferredCanvas> canvas = createCanvas(context.get()); |
| + FakeCanvas2DLayerBridgePtr layer(adoptRef(new FakeCanvas2DLayerBridge(context, canvas.release()))); |
| + EXPECT_FALSE(manager.isInList(layer.get())); |
| + layer->storageAllocatedForRecordingChanged(5); |
| + EXPECT_TRUE(manager.isInList(layer.get())); |
| + layer->storageAllocatedForRecordingChanged(0); |
| + EXPECT_FALSE(manager.isInList(layer.get())); |
| + } |
| + |
| void flushEvictionTest() |
| { |
| OwnPtr<blink::MockWebGraphicsContext3D> webContext = adoptPtr(new blink::MockWebGraphicsContext3D); |
| @@ -175,10 +212,10 @@ protected: |
| EXPECT_EQ(0, layer->m_freeMemoryIfPossibleCount); |
| layer->storageAllocatedForRecordingChanged(12); // over the max |
| EXPECT_EQ(2, layer->m_freeMemoryIfPossibleCount); // Two tries, one before flush, one after flush |
| - EXPECT_EQ((size_t)0, layer->m_freeableBytes); |
| + EXPECT_EQ((size_t)5, layer->m_freeableBytes); |
| EXPECT_EQ(1, layer->m_flushCount); // flush was attempted |
| - EXPECT_EQ((size_t)11, layer->bytesAllocated()); // flush drops the layer from manager's tracking list |
| - EXPECT_FALSE(manager.isInList(layer.get())); |
| + EXPECT_EQ((size_t)5, layer->bytesAllocated()); |
| + EXPECT_TRUE(manager.isInList(layer.get())); |
| } |
| void doDeferredFrameTestTask(FakeCanvas2DLayerBridge* layer, bool skipCommands) |
| @@ -189,7 +226,6 @@ protected: |
| EXPECT_TRUE(Canvas2DLayerManager::get().m_taskObserverActive); |
| if (skipCommands) { |
| layer->willUse(); |
| - layer->storageAllocatedForRecordingChanged(0); |
| layer->skippedPendingDrawCommands(); |
| } |
| blink::Platform::current()->currentThread()->exitRunLoop(); |
| @@ -274,5 +310,15 @@ TEST_F(Canvas2DLayerManagerTest, testDeferredFrame) |
| deferredFrameTest(); |
| } |
| -} // namespace |
| +TEST_F(Canvas2DLayerManagerTest, testHiddenCanvas) |
| +{ |
| + hiddenCanvasTest(); |
| +} |
| + |
| +TEST_F(Canvas2DLayerManagerTest, testAddRemoveLayer) |
| +{ |
| + addRemoveLayerTest(); |
| +} |
| + |
| +} // unnamed namespace |