Bug 747718 - Disable ColorLayer optimizations when we have rounded-rect clipping. r=roc
authorMatt Woodrow <mwoodrow@mozilla.com>
Fri, 27 Apr 2012 12:24:53 +1200
changeset 92562 3ca6df58d05d3ceab3fcca20643695aac5a97d7e
parent 92561 1751cbffa7084e4ea4c0a149dfd44e3ea93c7ee9
child 92563 35dfe0d44d83ba99c977e43ebc4d10f8fae45513
push id8753
push usermwoodrow@mozilla.com
push dateFri, 27 Apr 2012 00:25:03 +0000
treeherdermozilla-inbound@e8bf76219f36 [default view] [failures only]
perfherder[talos] [build metrics] [platform microbench] (compared to previous push)
reviewersroc
bugs747718
milestone15.0a1
first release with
nightly linux32
nightly linux64
nightly mac
nightly win32
nightly win64
last release without
nightly linux32
nightly linux64
nightly mac
nightly win32
nightly win64
Bug 747718 - Disable ColorLayer optimizations when we have rounded-rect clipping. r=roc
layout/base/FrameLayerBuilder.cpp
layout/reftests/border-radius/color-layer-1-ref.html
layout/reftests/border-radius/color-layer-1a.html
layout/reftests/border-radius/reftest.list
--- a/layout/base/FrameLayerBuilder.cpp
+++ b/layout/base/FrameLayerBuilder.cpp
@@ -1211,17 +1211,17 @@ ContainerState::ThebesLayerData::Accumul
     // pixel-aligned (thus the item will not be truly uniform).
     if (isUniform) {
       bool snap;
       nsRect bounds = aItem->GetBounds(aState->mBuilder, &snap);
       if (!aState->ScaleToInsidePixels(bounds, snap).Contains(aVisibleRect)) {
         isUniform = false;
       }
     }
-    if (isUniform) {
+    if (isUniform && aClip.mRoundedClipRects.IsEmpty()) {
       if (mVisibleRegion.IsEmpty()) {
         // This color is all we have
         mSolidColor = uniformColor;
         mIsSolidColorInVisibleRegion = true;
       } else if (mIsSolidColorInVisibleRegion &&
                  mVisibleRegion.IsEqual(nsIntRegion(aVisibleRect))) {
         // we can just blend the colors together
         mSolidColor = NS_ComposeColors(mSolidColor, uniformColor);
new file mode 100644
--- /dev/null
+++ b/layout/reftests/border-radius/color-layer-1-ref.html
@@ -0,0 +1,10 @@
+<!DOCTYPE HTML>
+<html>
+<body style="overflow:hidden">
+<div style="border-radius:100px; width:800px; height:1000px; position:absolute; left:0px; top:0px; overflow:hidden">
+  <div style="background:blue; width:100%; height:100%;"></div>
+  <div style="position:absolute; top:100px; left:100px; width:100px; height:100px; border:5px solid white"></div>
+  <div style="position:absolute; top:100px; left:100px; width:100px; height:100px; border:5px solid blue"></div>
+</div>
+</body>
+</html>
new file mode 100644
--- /dev/null
+++ b/layout/reftests/border-radius/color-layer-1a.html
@@ -0,0 +1,8 @@
+<!DOCTYPE HTML>
+<html>
+<body style="overflow:hidden">
+<div style="border-radius:100px; width:800px; height:1000px; position:absolute; left:0px; top:0px; overflow:hidden">
+  <div style="background:blue; width:100%; height:100%;"></div>
+</div>
+</body>
+</html>
\ No newline at end of file
--- a/layout/reftests/border-radius/reftest.list
+++ b/layout/reftests/border-radius/reftest.list
@@ -77,8 +77,10 @@ random-if(winWidget) HTTP(..) == corner-
 == scroll-1.html scroll-1-ref.html # see bug 602892
 
 == zero-radius-clip-1.html zero-radius-clip-ref.html
 
 == iframe-1.html iframe-1-ref.html
 
 # Test for antialiasing gaps between background and border
 fails-if(winWidget) == curved-border-background-nogap.html curved-border-background-nogap-ref.html
+
+== color-layer-1a.html color-layer-1-ref.html