Title: [108079] trunk/Source/WebCore
- Revision
- 108079
- Author
- [email protected]
- Date
- 2012-02-17 08:40:42 -0800 (Fri, 17 Feb 2012)
Log Message
Avoid using a transparency layer for rgba() border drawing when possible
https://bugs.webkit.org/show_bug.cgi?id=63176
Reviewed by Dan Bernstein.
The non-radiused border drawing code would use a transparency layer
when drawing any one or more borders with alpha colors. However,
we only need to use a transparency layer when there is a corner
join between the borders being rendered with any one color,
so add a utility function includesAdjacentEdges() that can tell us
that, and use it to avoid making extraneous transparency layers.
Optimization only, no new tests.
* rendering/RenderBoxModelObject.cpp:
(WebCore::includesAdjacentEdges):
(WebCore):
(WebCore::RenderBoxModelObject::paintTranslucentBorderSides):
Modified Paths
Diff
Modified: trunk/Source/WebCore/ChangeLog (108078 => 108079)
--- trunk/Source/WebCore/ChangeLog 2012-02-17 16:39:08 UTC (rev 108078)
+++ trunk/Source/WebCore/ChangeLog 2012-02-17 16:40:42 UTC (rev 108079)
@@ -1,3 +1,24 @@
+2012-02-17 Simon Fraser <[email protected]>
+
+ Avoid using a transparency layer for rgba() border drawing when possible
+ https://bugs.webkit.org/show_bug.cgi?id=63176
+
+ Reviewed by Dan Bernstein.
+
+ The non-radiused border drawing code would use a transparency layer
+ when drawing any one or more borders with alpha colors. However,
+ we only need to use a transparency layer when there is a corner
+ join between the borders being rendered with any one color,
+ so add a utility function includesAdjacentEdges() that can tell us
+ that, and use it to avoid making extraneous transparency layers.
+
+ Optimization only, no new tests.
+
+ * rendering/RenderBoxModelObject.cpp:
+ (WebCore::includesAdjacentEdges):
+ (WebCore):
+ (WebCore::RenderBoxModelObject::paintTranslucentBorderSides):
+
2012-02-17 Pavel Feldman <[email protected]>
Not reviewed: Qt minimal build fix.
Modified: trunk/Source/WebCore/rendering/RenderBoxModelObject.cpp (108078 => 108079)
--- trunk/Source/WebCore/rendering/RenderBoxModelObject.cpp 2012-02-17 16:39:08 UTC (rev 108078)
+++ trunk/Source/WebCore/rendering/RenderBoxModelObject.cpp 2012-02-17 16:40:42 UTC (rev 108079)
@@ -1429,6 +1429,14 @@
return flags & edgeFlagForSide(side);
}
+static inline bool includesAdjacentEdges(BorderEdgeFlags flags)
+{
+ return (flags & (TopBorderEdge | RightBorderEdge)) == (TopBorderEdge | RightBorderEdge)
+ || (flags & (RightBorderEdge | BottomBorderEdge)) == (RightBorderEdge | BottomBorderEdge)
+ || (flags & (BottomBorderEdge | LeftBorderEdge)) == (BottomBorderEdge | LeftBorderEdge)
+ || (flags & (LeftBorderEdge | TopBorderEdge)) == (LeftBorderEdge | TopBorderEdge);
+}
+
inline bool edgesShareColor(const BorderEdge& firstEdge, const BorderEdge& secondEdge)
{
return firstEdge.color == secondEdge.color;
@@ -1682,7 +1690,7 @@
commonColorEdgeSet |= edgeFlagForSide(currSide);
}
- bool useTransparencyLayer = commonColor.hasAlpha();
+ bool useTransparencyLayer = includesAdjacentEdges(commonColorEdgeSet) && commonColor.hasAlpha();
if (useTransparencyLayer) {
graphicsContext->beginTransparencyLayer(static_cast<float>(commonColor.alpha()) / 255);
commonColor = Color(commonColor.red(), commonColor.green(), commonColor.blue());
_______________________________________________
webkit-changes mailing list
[email protected]
http://lists.webkit.org/mailman/listinfo.cgi/webkit-changes