Index: Source/platform/graphics/gpu/DrawingBufferTest.cpp |
diff --git a/Source/platform/graphics/gpu/DrawingBufferTest.cpp b/Source/platform/graphics/gpu/DrawingBufferTest.cpp |
index 437629396ecd825fda31b093c327420a9d2ea2c6..bb57c9482b1d4ece545f9b5d4d66eecff8fdbb03 100644 |
--- a/Source/platform/graphics/gpu/DrawingBufferTest.cpp |
+++ b/Source/platform/graphics/gpu/DrawingBufferTest.cpp |
@@ -315,6 +315,41 @@ TEST_F(DrawingBufferTest, verifyDestructionCompleteAfterAllMailboxesReleased) |
EXPECT_EQ(live, false); |
} |
+TEST_F(DrawingBufferTest, verifyDrawingBufferStaysAliveIfResourcesAreLost) |
+{ |
+ bool live = true; |
+ m_drawingBuffer->m_live = &live; |
+ blink::WebExternalTextureMailbox mailbox1; |
+ blink::WebExternalTextureMailbox mailbox2; |
+ blink::WebExternalTextureMailbox mailbox3; |
+ |
+ m_drawingBuffer->markContentsChanged(); |
+ EXPECT_TRUE(m_drawingBuffer->prepareMailbox(&mailbox1, 0)); |
+ m_drawingBuffer->markContentsChanged(); |
+ EXPECT_TRUE(m_drawingBuffer->prepareMailbox(&mailbox2, 0)); |
+ m_drawingBuffer->markContentsChanged(); |
+ EXPECT_TRUE(m_drawingBuffer->prepareMailbox(&mailbox3, 0)); |
+ |
+ m_drawingBuffer->markContentsChanged(); |
+ m_drawingBuffer->mailboxReleased(mailbox1, true); |
+ EXPECT_EQ(live, true); |
+ |
+ m_drawingBuffer->beginDestruction(); |
+ EXPECT_EQ(live, true); |
+ |
+ m_drawingBuffer->markContentsChanged(); |
+ m_drawingBuffer->mailboxReleased(mailbox2, false); |
+ EXPECT_EQ(live, true); |
+ |
+ DrawingBufferForTests* weakPtr = m_drawingBuffer.get(); |
+ m_drawingBuffer.clear(); |
+ EXPECT_EQ(live, true); |
+ |
+ weakPtr->markContentsChanged(); |
+ weakPtr->mailboxReleased(mailbox3, true); |
+ EXPECT_EQ(live, false); |
+} |
+ |
class TextureMailboxWrapper { |
public: |
explicit TextureMailboxWrapper(const blink::WebExternalTextureMailbox& mailbox) |