From 2da8d70e8b49afb77c0064a6751771520c54d3a3 Mon Sep 17 00:00:00 2001 From: Chris Jones Date: Thu, 20 Sep 2012 22:59:19 -0700 Subject: [PATCH] Bug 792663: Don't SyncFrontBufferToBackBuffer() while a buffer tracker isn't around to revoke our buffer provider. r=nrc --- gfx/layers/ThebesLayerBuffer.h | 4 ++++ gfx/layers/basic/BasicThebesLayer.cpp | 11 +++++------ 2 files changed, 9 insertions(+), 6 deletions(-) diff --git a/gfx/layers/ThebesLayerBuffer.h b/gfx/layers/ThebesLayerBuffer.h index db0fbafe60a..243b66f752a 100644 --- a/gfx/layers/ThebesLayerBuffer.h +++ b/gfx/layers/ThebesLayerBuffer.h @@ -190,6 +190,10 @@ protected: mBufferProvider = aProvider; if (!mBufferProvider) { mBuffer = nullptr; + } else { + // Only this buffer provider can give us a buffer. If we + // already have one, something has gone wrong. + MOZ_ASSERT(!mBuffer); } } diff --git a/gfx/layers/basic/BasicThebesLayer.cpp b/gfx/layers/basic/BasicThebesLayer.cpp index c8d070fc79b..52d96dad498 100644 --- a/gfx/layers/basic/BasicThebesLayer.cpp +++ b/gfx/layers/basic/BasicThebesLayer.cpp @@ -314,12 +314,6 @@ BasicShadowableThebesLayer::SetBackBufferAndAttrs(const OptionalThebesBuffer& aB mROFrontBuffer = aReadOnlyFrontBuffer; mFrontUpdatedRegion = aFrontUpdatedRegion; mFrontValidRegion = aValidRegion; - if (OptionalThebesBuffer::Tnull_t == mROFrontBuffer.type()) { - // For null readonly front, we have single buffer mode - // so we can do sync right now, because it does not create new buffer and - // don't do any graphic operations - SyncFrontBufferToBackBuffer(); - } } void @@ -329,6 +323,11 @@ BasicShadowableThebesLayer::SyncFrontBufferToBackBuffer() return; } + // We temporarily map our back buffer here in order to copy from the + // front buffer. We need a live buffer tracker in order to unmap + // that buffer when appropriate. + MOZ_ASSERT(mBufferTracker); + gfxASurface* backBuffer = mBuffer.GetBuffer(); if (!IsSurfaceDescriptorValid(mBackBuffer)) { MOZ_ASSERT(!backBuffer);