| Index: Source/web/tests/Canvas2DLayerManagerTest.cpp
|
| diff --git a/Source/web/tests/Canvas2DLayerManagerTest.cpp b/Source/web/tests/Canvas2DLayerManagerTest.cpp
|
| index ef8183ccebbb044d09e166a1f7b43fa75e663c67..300413ed260e0f06c02744be238773bfadee5759 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,41 @@ 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);
|
| + EXPECT_EQ((size_t)10, layer->bytesAllocated());
|
| + layer->setIsHidden(true);
|
| + EXPECT_EQ(1, layer->m_freeMemoryIfPossibleCount);
|
| + EXPECT_EQ((size_t)0, layer->m_freeableBytes);
|
| + EXPECT_EQ((size_t)0, layer->bytesAllocated());
|
| + 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 +213,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 +227,6 @@ protected:
|
| EXPECT_TRUE(Canvas2DLayerManager::get().m_taskObserverActive);
|
| if (skipCommands) {
|
| layer->willUse();
|
| - layer->storageAllocatedForRecordingChanged(0);
|
| layer->skippedPendingDrawCommands();
|
| }
|
| blink::Platform::current()->currentThread()->exitRunLoop();
|
| @@ -274,5 +311,15 @@ TEST_F(Canvas2DLayerManagerTest, testDeferredFrame)
|
| deferredFrameTest();
|
| }
|
|
|
| -} // namespace
|
| +TEST_F(Canvas2DLayerManagerTest, testHiddenCanvas)
|
| +{
|
| + hiddenCanvasTest();
|
| +}
|
| +
|
| +TEST_F(Canvas2DLayerManagerTest, testAddRemoveLayer)
|
| +{
|
| + addRemoveLayerTest();
|
| +}
|
| +
|
| +} // unnamed namespace
|
|
|
|
|