Index: Source/platform/graphics/gpu/DrawingBuffer.cpp |
diff --git a/Source/platform/graphics/gpu/DrawingBuffer.cpp b/Source/platform/graphics/gpu/DrawingBuffer.cpp |
index bcf1a10ae65da690d43f1828cf206946252c421a..3e70a4319fdb995d717a73289dea85a188cd3286 100644 |
--- a/Source/platform/graphics/gpu/DrawingBuffer.cpp |
+++ b/Source/platform/graphics/gpu/DrawingBuffer.cpp |
@@ -148,6 +148,7 @@ DrawingBuffer::DrawingBuffer(PassOwnPtr<blink::WebGraphicsContext3D> context, |
, m_sampleCount(0) |
, m_packAlignment(4) |
, m_destructionInProgress(false) |
+ , m_isHidden(false) |
, m_contextEvictionManager(contextEvictionManager) |
{ |
// Used by browser tests to detect the use of a DrawingBuffer. |
@@ -185,6 +186,26 @@ void DrawingBuffer::markLayerComposited() |
m_layerComposited = true; |
} |
+ |
+void DrawingBuffer::setIsHidden(bool hidden) |
+{ |
+ ASSERT(!m_destructionInProgress); |
Ken Russell (switch to Gerrit)
2014/07/09 20:57:57
This assert seems a little aggressive, but I do ag
|
+ if (m_isHidden == hidden) |
+ return; |
+ m_isHidden = hidden; |
dshwang
2014/07/09 17:40:54
I changes m_isHidden meaning. It doesn't include m
|
+ if (m_isHidden) |
+ freeRecycledMailboxes(); |
+} |
+ |
+void DrawingBuffer::freeRecycledMailboxes() |
+{ |
+ if (m_recycledMailboxQueue.isEmpty()) |
+ return; |
+ m_context->makeContextCurrent(); |
+ while (!m_recycledMailboxQueue.isEmpty()) |
+ deleteMailbox(m_recycledMailboxQueue.takeLast()); |
+} |
+ |
blink::WebGraphicsContext3D* DrawingBuffer::context() |
{ |
return m_context.get(); |
@@ -192,6 +213,7 @@ blink::WebGraphicsContext3D* DrawingBuffer::context() |
bool DrawingBuffer::prepareMailbox(blink::WebExternalTextureMailbox* outMailbox, blink::WebExternalBitmap* bitmap) |
{ |
+ ASSERT(!m_isHidden); |
dshwang
2014/07/09 17:40:54
As danakj@ mentioned, 'm_isHidden == true' never h
|
if (!m_contentsChanged) |
return false; |
@@ -278,8 +300,8 @@ bool DrawingBuffer::prepareMailbox(blink::WebExternalTextureMailbox* outMailbox, |
void DrawingBuffer::mailboxReleased(const blink::WebExternalTextureMailbox& mailbox) |
{ |
- if (m_destructionInProgress) { |
- mailboxReleasedWhileDestructionInProgress(mailbox); |
+ if (m_destructionInProgress || m_isHidden) { |
+ mailboxReleasedWithoutRecycling(mailbox); |
return; |
} |
@@ -296,7 +318,7 @@ void DrawingBuffer::mailboxReleased(const blink::WebExternalTextureMailbox& mail |
ASSERT_NOT_REACHED(); |
} |
-void DrawingBuffer::mailboxReleasedWhileDestructionInProgress(const blink::WebExternalTextureMailbox& mailbox) |
+void DrawingBuffer::mailboxReleasedWithoutRecycling(const blink::WebExternalTextureMailbox& mailbox) |
{ |
ASSERT(m_textureMailboxes.size()); |
m_context->makeContextCurrent(); |