Bug 1444447 - When not buffering in BasicCompositor, create the render target with the full window size. r?jrmuizel draft
authorMarkus Stange <mstange@themasta.com>
Wed, 28 Mar 2018 14:42:57 -0400
changeset 781371 e73efde4ea170ff059e254b1432cb29ff06dd446
parent 781370 15d6d9810343d6d856151a7d2661c46976aa9b46
child 781372 de143eb84a04884ef0303dc77edfa684467c9134
push id106284
push userbmo:mstange@themasta.com
push dateThu, 12 Apr 2018 21:31:17 +0000
reviewersjrmuizel
bugs1444447
milestone61.0a1
Bug 1444447 - When not buffering in BasicCompositor, create the render target with the full window size. r?jrmuizel MozReview-Commit-ID: 36ntFogSvq1
gfx/layers/basic/BasicCompositor.cpp
gfx/layers/basic/BasicCompositor.h
--- a/gfx/layers/basic/BasicCompositor.cpp
+++ b/gfx/layers/basic/BasicCompositor.cpp
@@ -281,42 +281,40 @@ BasicCompositor::CreateRenderTargetFromS
                                               const CompositingRenderTarget *aSource,
                                               const IntPoint &aSourcePoint)
 {
   MOZ_CRASH("GFX: Shouldn't be called!");
   return nullptr;
 }
 
 already_AddRefed<CompositingRenderTarget>
-BasicCompositor::CreateRenderTargetForWindow(const LayoutDeviceIntRect& aRect, const LayoutDeviceIntRect& aClearRect, BufferMode aBufferMode)
+BasicCompositor::CreateRenderTargetForWindow(const LayoutDeviceIntRect& aInvalidRect,
+                                             const LayoutDeviceIntRect& aClearRect,
+                                             const IntRect& aWindowRect,
+                                             BufferMode aBufferMode)
 {
   MOZ_ASSERT(mDrawTarget);
-  MOZ_ASSERT(!aRect.IsZeroArea(), "Trying to create a render target of invalid size");
+  MOZ_ASSERT(!aInvalidRect.IsZeroArea(), "Trying to create a render target of invalid size");
 
-  if (aRect.IsZeroArea()) {
+  if (aInvalidRect.IsZeroArea()) {
     return nullptr;
   }
 
   RefPtr<BasicCompositingRenderTarget> rt;
-  IntRect rect = aRect.ToUnknownRect();
+  IntRect rect = aInvalidRect.ToUnknownRect();
 
   if (aBufferMode != BufferMode::BUFFER_NONE) {
-    RefPtr<DrawTarget> target = mWidget->GetBackBufferDrawTarget(mDrawTarget, aRect, aClearRect);
+    RefPtr<DrawTarget> target = mWidget->GetBackBufferDrawTarget(mDrawTarget, aInvalidRect, aClearRect);
     if (!target) {
       return nullptr;
     }
     MOZ_ASSERT(target != mDrawTarget);
     rt = new BasicCompositingRenderTarget(target, rect);
   } else {
-    IntRect windowRect = rect;
-    // Adjust bounds rect to account for new origin at (0, 0).
-    if (windowRect.Size() != mDrawTarget->GetSize()) {
-      windowRect.ExpandToEnclose(IntPoint(0, 0));
-    }
-    rt = new BasicCompositingRenderTarget(mDrawTarget, windowRect);
+    rt = new BasicCompositingRenderTarget(mDrawTarget, aWindowRect);
     if (!aClearRect.IsEmpty()) {
       IntRect clearRect = aClearRect.ToUnknownRect();
       mDrawTarget->ClearRect(Rect(clearRect - rt->GetOrigin()));
     }
   }
 
   return rt.forget();
 }
@@ -951,19 +949,17 @@ BasicCompositor::BeginFrame(const nsIntR
 
   // Prevent CreateRenderTargetForWindow from clearing unwanted area.
   gfxUtils::ClipToRegion(mDrawTarget,
                          mInvalidRegion.ToUnknownRegion());
 
   // 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 =
-    CreateRenderTargetForWindow(mInvalidRect,
-                                clearRect,
-                                bufferMode);
+    CreateRenderTargetForWindow(mInvalidRect, clearRect, rect, bufferMode);
 
   mDrawTarget->PopClip();
 
   if (!target) {
     if (!mTarget) {
       mWidget->EndRemoteDrawingInRegion(mDrawTarget, mInvalidRegion);
     }
     return;
--- a/gfx/layers/basic/BasicCompositor.h
+++ b/gfx/layers/basic/BasicCompositor.h
@@ -65,16 +65,17 @@ public:
   virtual already_AddRefed<CompositingRenderTarget>
   CreateRenderTargetFromSource(const gfx::IntRect &aRect,
                                const CompositingRenderTarget *aSource,
                                const gfx::IntPoint &aSourcePoint) override;
 
   virtual already_AddRefed<CompositingRenderTarget>
   CreateRenderTargetForWindow(const LayoutDeviceIntRect& aRect,
                               const LayoutDeviceIntRect& aClearRect,
+                              const gfx::IntRect& aWindowRect,
                               BufferMode aBufferMode);
 
   virtual already_AddRefed<DataTextureSource>
   CreateDataTextureSource(TextureFlags aFlags = TextureFlags::NO_FLAGS) override;
 
   virtual already_AddRefed<DataTextureSource>
   CreateDataTextureSourceAround(gfx::DataSourceSurface* aSurface) override;