Bug 1449641 - Always use mDrawTarget when merging the buffered region into the window DrawTarget. r=sotaro
authorMarkus Stange <mstange@themasta.com>
Wed, 28 Mar 2018 13:23:35 -0400
changeset 779688 67fabb2e4990654fbd0eede355bc09ae6f911bb9
parent 779687 ac980a443965c8ab42fbe370f2300b8f09c43c8e
child 779689 fc0d5bbaed8b260052c9e03e5e59cfe3b4356dc8
push id105836
push userbmo:ato@sny.no
push dateTue, 10 Apr 2018 12:07:22 +0000
reviewerssotaro
bugs1449641
milestone61.0a1
Bug 1449641 - Always use mDrawTarget when merging the buffered region into the window DrawTarget. r=sotaro If we have a non-null mTarget, we already set mDrawTarget to mTarget. So "mTarget ? mTarget : mDrawTarget" will always evaluate to mDrawTarget. MozReview-Commit-ID: BlGYEdlL50Q
gfx/layers/basic/BasicCompositor.cpp
--- a/gfx/layers/basic/BasicCompositor.cpp
+++ b/gfx/layers/basic/BasicCompositor.cpp
@@ -1034,28 +1034,27 @@ BasicCompositor::TryToEndRemoteDrawing(b
     MessageLoop::current()->PostDelayedTask(runnable.forget(), retryMs);
     return;
   }
 
   if (mRenderTarget->mDrawTarget != mDrawTarget) {
     // Note: Most platforms require us to buffer drawing to the widget surface.
     // That's why we don't draw to mDrawTarget directly.
     RefPtr<SourceSurface> source = mWidget->EndBackBufferDrawing();
-    RefPtr<DrawTarget> dest(mTarget ? mTarget : mDrawTarget);
 
     nsIntPoint offset = mTarget ? mTargetBounds.TopLeft() : nsIntPoint();
 
     // The source DrawTarget is clipped to the invalidation region, so we have
     // to copy the individual rectangles in the region or else we'll draw blank
     // pixels.
     for (auto iter = mInvalidRegion.RectIter(); !iter.Done(); iter.Next()) {
       const LayoutDeviceIntRect& r = iter.Get();
-      dest->CopySurface(source,
-                        IntRect(r.X(), r.Y(), r.Width(), r.Height()) - mRenderTarget->GetOrigin(),
-                        IntPoint(r.X(), r.Y()) - offset);
+      mDrawTarget->CopySurface(source,
+                               r.ToUnknownRect() - mRenderTarget->GetOrigin(),
+                               r.TopLeft().ToUnknownPoint() - offset);
     }
   }
 
   if (aForceToEnd || !mTarget) {
     mWidget->EndRemoteDrawingInRegion(mDrawTarget, mInvalidRegion);
   }
 
   mDrawTarget = nullptr;