Bug 792663: Don't SyncFrontBufferToBackBuffer() while a buffer tracker isn't around to revoke our buffer provider. r=nrc

This commit is contained in:
Chris Jones 2012-09-20 22:59:19 -07:00
parent f2068b3a62
commit 2da8d70e8b
2 changed files with 9 additions and 6 deletions

View File

@ -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);
}
}

View File

@ -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);