Bug 1355791 - Instead of pushing a scroll layer, put the clip mask into the existing item clip. r?mchang draft
authorKartikaya Gupta <kgupta@mozilla.com>
Wed, 12 Apr 2017 08:33:49 -0400
changeset 561289 d67ad182118795c03b1cbd3701a84bc26b7aeb27
parent 561288 199dd7c4179f444782894c0efcb061c89b986779
child 623933 c477f8f61504ebd740e1ae9c1cb812cd49b8edc6
push id53686
push userkgupta@mozilla.com
push dateWed, 12 Apr 2017 12:34:04 +0000
reviewersmchang
bugs1355791
milestone55.0a1
Bug 1355791 - Instead of pushing a scroll layer, put the clip mask into the existing item clip. r?mchang MozReview-Commit-ID: jdKEkamSs4
gfx/layers/wr/WebRenderCanvasLayer.cpp
gfx/layers/wr/WebRenderColorLayer.cpp
gfx/layers/wr/WebRenderImageLayer.cpp
gfx/layers/wr/WebRenderPaintedLayer.cpp
--- a/gfx/layers/wr/WebRenderCanvasLayer.cpp
+++ b/gfx/layers/wr/WebRenderCanvasLayer.cpp
@@ -58,23 +58,21 @@ WebRenderCanvasLayer::RenderLayer(wr::Di
 
   gfx::Matrix4x4 transform = GetTransform();
   const bool needsYFlip = (mOriginPos == gl::OriginPos::BottomLeft);
   if (needsYFlip) {
     transform.PreTranslate(0, mBounds.height, 0).PreScale(1, -1, 1);
   }
 
   gfx::Rect relBounds = GetWrRelBounds();
-  gfx::Rect overflow(0, 0, relBounds.width, relBounds.height);
+  gfx::Rect rect = RelativeToVisible(gfx::Rect(0, 0, mBounds.width, mBounds.height));
 
-  gfx::Rect rect = RelativeToVisible(gfx::Rect(0, 0, mBounds.width, mBounds.height));
   gfx::Rect clipRect = GetWrClipRect(rect);
-
   Maybe<WrImageMask> mask = BuildWrMaskLayer();
-  WrClipRegion clip = aBuilder.BuildClipRegion(wr::ToWrRect(clipRect));
+  WrClipRegion clip = aBuilder.BuildClipRegion(wr::ToWrRect(clipRect), mask.ptrOr(nullptr));
 
   wr::ImageRendering filter = wr::ToImageRendering(mSamplingFilter);
   wr::MixBlendMode mixBlendMode = wr::ToWrMixBlendMode(GetMixBlendMode());
 
   DumpLayerInfo("CanvasLayer", rect);
   if (gfxPrefs::LayersDump()) {
     printf_stderr("CanvasLayer %p texture-filter=%s\n",
                   this->GetLayer(),
@@ -86,21 +84,17 @@ WebRenderCanvasLayer::RenderLayer(wr::Di
   key.mHandle = WrBridge()->GetNextResourceId();
   WrBridge()->AddWebRenderParentCommand(OpAddExternalImage(mExternalImageId, key));
 
   aBuilder.PushStackingContext(wr::ToWrRect(relBounds),
                                1.0f,
                                //GetAnimations(),
                                transform,
                                mixBlendMode);
-  aBuilder.PushScrollLayer(wr::ToWrRect(overflow),
-                           wr::ToWrRect(overflow),
-                           mask.ptrOr(nullptr));
   aBuilder.PushImage(wr::ToWrRect(rect), clip, filter, key);
-  aBuilder.PopScrollLayer();
   aBuilder.PopStackingContext();
 }
 
 void
 WebRenderCanvasLayer::AttachCompositable()
 {
   mCanvasClient->Connect();
 }
--- a/gfx/layers/wr/WebRenderColorLayer.cpp
+++ b/gfx/layers/wr/WebRenderColorLayer.cpp
@@ -16,35 +16,29 @@ namespace layers {
 
 using namespace mozilla::gfx;
 
 void
 WebRenderColorLayer::RenderLayer(wr::DisplayListBuilder& aBuilder)
 {
   gfx::Matrix4x4 transform = GetTransform();
   gfx::Rect relBounds = GetWrRelBounds();
-  gfx::Rect overflow(0, 0, relBounds.width, relBounds.height);
+  gfx::Rect rect = GetWrBoundsRect();
 
-  gfx::Rect rect = GetWrBoundsRect();
   gfx::Rect clipRect = GetWrClipRect(rect);
-
   Maybe<WrImageMask> mask = BuildWrMaskLayer();
-  WrClipRegion clip = aBuilder.BuildClipRegion(wr::ToWrRect(clipRect));
+  WrClipRegion clip = aBuilder.BuildClipRegion(wr::ToWrRect(clipRect), mask.ptrOr(nullptr));
 
   wr::MixBlendMode mixBlendMode = wr::ToWrMixBlendMode(GetMixBlendMode());
 
   DumpLayerInfo("ColorLayer", rect);
 
   aBuilder.PushStackingContext(wr::ToWrRect(relBounds),
                               1.0f,
                               //GetAnimations(),
                               transform,
                               mixBlendMode);
-  aBuilder.PushScrollLayer(wr::ToWrRect(overflow),
-                           wr::ToWrRect(overflow),
-                           mask.ptrOr(nullptr));
   aBuilder.PushRect(wr::ToWrRect(rect), clip, wr::ToWrColor(mColor));
-  aBuilder.PopScrollLayer();
   aBuilder.PopStackingContext();
 }
 
 } // namespace layers
 } // namespace mozilla
--- a/gfx/layers/wr/WebRenderImageLayer.cpp
+++ b/gfx/layers/wr/WebRenderImageLayer.cpp
@@ -124,29 +124,28 @@ WebRenderImageLayer::RenderLayer(wr::Dis
   gfx::IntSize size = image->GetSize();
 
   if (mImageClient && !mImageClient->UpdateImage(mContainer, /* unused */0)) {
     return;
   }
 
   gfx::Matrix4x4 transform = GetTransform();
   gfx::Rect relBounds = GetWrRelBounds();
-  gfx::Rect overflow(0, 0, relBounds.width, relBounds.height);
 
   gfx::Rect rect = gfx::Rect(0, 0, size.width, size.height);
   if (mScaleMode != ScaleMode::SCALE_NONE) {
     NS_ASSERTION(mScaleMode == ScaleMode::STRETCH,
                  "No other scalemodes than stretch and none supported yet.");
     rect = gfx::Rect(0, 0, mScaleToSize.width, mScaleToSize.height);
   }
   rect = RelativeToVisible(rect);
+
   gfx::Rect clipRect = GetWrClipRect(rect);
-
   Maybe<WrImageMask> mask = BuildWrMaskLayer();
-  WrClipRegion clip = aBuilder.BuildClipRegion(wr::ToWrRect(clipRect));
+  WrClipRegion clip = aBuilder.BuildClipRegion(wr::ToWrRect(clipRect), mask.ptrOr(nullptr));
 
   wr::ImageRendering filter = wr::ToImageRendering(mSamplingFilter);
   wr::MixBlendMode mixBlendMode = wr::ToWrMixBlendMode(GetMixBlendMode());
 
   DumpLayerInfo("Image Layer", rect);
   if (gfxPrefs::LayersDump()) {
     printf_stderr("ImageLayer %p texture-filter=%s \n",
                   GetLayer(),
@@ -158,21 +157,17 @@ WebRenderImageLayer::RenderLayer(wr::Dis
   key.mHandle = WrBridge()->GetNextResourceId();
   WrBridge()->AddWebRenderParentCommand(OpAddExternalImage(mExternalImageId, key));
 
   aBuilder.PushStackingContext(wr::ToWrRect(relBounds),
                             1.0f,
                             //GetAnimations(),
                             transform,
                             mixBlendMode);
-  aBuilder.PushScrollLayer(wr::ToWrRect(overflow),
-                           wr::ToWrRect(overflow),
-                           mask.ptrOr(nullptr));
   aBuilder.PushImage(wr::ToWrRect(rect), clip, filter, key);
-  aBuilder.PopScrollLayer();
   aBuilder.PopStackingContext();
 
   //mContainer->SetImageFactory(originalIF);
 }
 
 Maybe<WrImageMask>
 WebRenderImageLayer::RenderMaskLayer(const gfx::Matrix4x4& aTransform)
 {
--- a/gfx/layers/wr/WebRenderPaintedLayer.cpp
+++ b/gfx/layers/wr/WebRenderPaintedLayer.cpp
@@ -181,40 +181,34 @@ WebRenderPaintedLayer::RenderLayer(wr::D
   RefPtr<TextureWrapperImage> image = new TextureWrapperImage(texture, IntRect(IntPoint(0, 0), imageSize));
   mImageContainer->SetCurrentImageInTransaction(image);
   if (!mImageClient->UpdateImage(mImageContainer, /* unused */0)) {
     return;
   }
 
   gfx::Matrix4x4 transform = GetTransform();
   gfx::Rect relBounds = GetWrRelBounds();
-  gfx::Rect overflow(0, 0, relBounds.width, relBounds.height);
+  gfx::Rect rect(0, 0, size.width, size.height);
 
-  gfx::Rect rect(0, 0, size.width, size.height);
   gfx::Rect clipRect = GetWrClipRect(rect);
-
   Maybe<WrImageMask> mask = BuildWrMaskLayer();
-  WrClipRegion clip = aBuilder.BuildClipRegion(wr::ToWrRect(clipRect));
+  WrClipRegion clip = aBuilder.BuildClipRegion(wr::ToWrRect(clipRect), mask.ptrOr(nullptr));
 
   wr::MixBlendMode mixBlendMode = wr::ToWrMixBlendMode(GetMixBlendMode());
 
   DumpLayerInfo("PaintedLayer", rect);
 
   WrImageKey key;
   key.mNamespace = WrBridge()->GetNamespace();
   key.mHandle = WrBridge()->GetNextResourceId();
   WrBridge()->AddWebRenderParentCommand(OpAddExternalImage(mExternalImageId, key));
 
   aBuilder.PushStackingContext(wr::ToWrRect(relBounds),
                               1.0f,
                               //GetAnimations(),
                               transform,
                               mixBlendMode);
-  aBuilder.PushScrollLayer(wr::ToWrRect(overflow),
-                           wr::ToWrRect(overflow),
-                           mask.ptrOr(nullptr));
   aBuilder.PushImage(wr::ToWrRect(rect), clip, wr::ImageRendering::Auto, key);
-  aBuilder.PopScrollLayer();
   aBuilder.PopStackingContext();
 }
 
 } // namespace layers
 } // namespace mozilla