Bug 1320032 - Early return if the size of mask surface will be empty. draft
authorcku <cku@mozilla.com>
Sat, 17 Dec 2016 11:06:44 +0800
changeset 452286 2f779c847ba1d0bb8b5c9cd88fe894af0d234cfb
parent 452146 c36fbe84042debef0a5d58b7fc88185b401762ce
child 540200 9331bc136091f5ae4f70460728604b8d5e8a1f72
push id39376
push userbmo:cku@mozilla.com
push dateWed, 21 Dec 2016 14:27:48 +0000
bugs1320032
milestone53.0a1
Bug 1320032 - Early return if the size of mask surface will be empty. MozReview-Commit-ID: Bd0ddkyNCMr
layout/painting/FrameLayerBuilder.cpp
--- a/layout/painting/FrameLayerBuilder.cpp
+++ b/layout/painting/FrameLayerBuilder.cpp
@@ -3892,16 +3892,17 @@ ContainerState::SetupMaskLayerForCSSMask
     return;
   }
 
   int32_t maxSize = mManager->GetMaxTextureSize();
   IntSize surfaceSize(std::min(itemRect.width, maxSize),
                       std::min(itemRect.height, maxSize));
 
   if (surfaceSize.IsEmpty()) {
+    // Return early if we know that the size of this mask surface is empty.
     return;
   }
 
   MaskImageData imageData(surfaceSize, mManager);
   RefPtr<DrawTarget> dt = imageData.CreateDrawTarget();
   if (!dt || !dt->IsValid()) {
     NS_WARNING("Could not create DrawTarget for mask layer.");
     return;
@@ -6276,16 +6277,21 @@ ContainerState::CreateMaskLayer(Layer *a
 
   // maskTransform is applied to the clip when it is painted into the mask (as a
   // component of imageTransform), and its inverse used when the mask is used for
   // masking.
   // It is the transform from the masked layer's space to mask space
   gfx::Matrix maskTransform =
     Matrix::Scaling(surfaceSize.width / boundingRect.Width(),
                     surfaceSize.height / boundingRect.Height());
+  if (surfaceSize.IsEmpty()) {
+    // Return early if we know that the size of this mask surface is empty.
+    return nullptr;
+  }
+
   gfx::Point p = boundingRect.TopLeft();
   maskTransform.PreTranslate(-p.x, -p.y);
   // imageTransform is only used when the clip is painted to the mask
   gfx::Matrix imageTransform = maskTransform;
   imageTransform.PreScale(mParameters.mXScale, mParameters.mYScale);
 
   nsAutoPtr<MaskLayerImageCache::MaskLayerImageKey> newKey(
     new MaskLayerImageCache::MaskLayerImageKey());