Bug 1238753 - Make BasicCompositor respect changes to mInvalidRegion through StartRemoteDrawingWithRegion properly. r?mattwoodrow
--- a/gfx/layers/basic/BasicCompositor.cpp
+++ b/gfx/layers/basic/BasicCompositor.cpp
@@ -518,34 +518,34 @@ BasicCompositor::BeginFrame(const nsIntR
// whole widget.
invalidRegionSafe = intRect;
mDidExternalComposition = false;
} else {
// Sometimes the invalid region is larger than we want to draw.
invalidRegionSafe.And(aInvalidRegion, intRect);
}
- IntRect invalidRect = invalidRegionSafe.GetBounds();
- mInvalidRect = IntRect(invalidRect.x, invalidRect.y, invalidRect.width, invalidRect.height);
mInvalidRegion = invalidRegionSafe;
+ mInvalidRect = mInvalidRegion.GetBounds();
if (aRenderBoundsOut) {
*aRenderBoundsOut = Rect();
}
if (mInvalidRect.width <= 0 || mInvalidRect.height <= 0) {
return;
}
if (mTarget) {
// If we have a copy target, then we don't have a widget-provided mDrawTarget (currently). Use a dummy
// placeholder so that CreateRenderTarget() works.
mDrawTarget = gfxPlatform::GetPlatform()->ScreenReferenceDrawTarget();
} else {
mDrawTarget = mWidget->StartRemoteDrawingInRegion(mInvalidRegion);
+ mInvalidRect = mInvalidRegion.GetBounds();
}
if (!mDrawTarget) {
return;
}
// Setup an intermediate render target to buffer all compositing. We will
// copy this into mDrawTarget (the widget), and/or mTarget in EndFrame()
RefPtr<CompositingRenderTarget> target = CreateRenderTarget(mInvalidRect, INIT_MODE_CLEAR);
@@ -554,20 +554,20 @@ BasicCompositor::BeginFrame(const nsIntR
mWidget->EndRemoteDrawingInRegion(mDrawTarget, mInvalidRegion);
}
return;
}
SetRenderTarget(target);
// We only allocate a surface sized to the invalidated region, so we need to
// translate future coordinates.
- mRenderTarget->mDrawTarget->SetTransform(Matrix::Translation(-invalidRect.x,
- -invalidRect.y));
+ mRenderTarget->mDrawTarget->SetTransform(Matrix::Translation(-mInvalidRect.x,
+ -mInvalidRect.y));
- gfxUtils::ClipToRegion(mRenderTarget->mDrawTarget, invalidRegionSafe);
+ gfxUtils::ClipToRegion(mRenderTarget->mDrawTarget, mInvalidRegion);
if (aRenderBoundsOut) {
*aRenderBoundsOut = rect;
}
if (aClipRectIn) {
mRenderTarget->mDrawTarget->PushClipRect(*aClipRectIn);
} else {