Index: Source/core/layout/compositing/CompositingReasonFinder.cpp |
diff --git a/Source/core/layout/compositing/CompositingReasonFinder.cpp b/Source/core/layout/compositing/CompositingReasonFinder.cpp |
index 872073d7418ac37fd9f1e91434c25268fd0d3432..a9eea942165e36647f31a79e93a217999b22aac1 100644 |
--- a/Source/core/layout/compositing/CompositingReasonFinder.cpp |
+++ b/Source/core/layout/compositing/CompositingReasonFinder.cpp |
@@ -176,11 +176,18 @@ bool CompositingReasonFinder::requiresCompositingForAnimation(const ComputedStyl |
bool CompositingReasonFinder::requiresCompositingForPositionFixed(const DeprecatedPaintLayer* layer) const |
{ |
- if (!(m_compositingTriggers & ViewportConstrainedPositionedTrigger)) |
- return false; |
// Don't promote fixed position elements that are descendants of a non-view container, e.g. transformed elements. |
// They will stay fixed wrt the container rather than the enclosing frame. |
- return layer->scrollsWithViewport() && m_layoutView.frameView()->isScrollable(); |
+ if (!layer->scrollsWithViewport() || !m_layoutView.frameView()->isScrollable()) |
+ return false; |
+ |
+ if (!(m_compositingTriggers & ViewportConstrainedPositionedTrigger)) { |
trchen
2015/08/14 21:02:17
Please swap the branches. Avoid negative predicate
|
+ // If the layer is opaque we can still promote it since we will not lose LCD text |
+ LayoutRect bounds = layer->layoutBox()->contentBoxRect(); |
trchen
2015/08/14 21:02:17
This doesn't look right because texts can overflow
|
+ return layer->backgroundIsKnownToBeOpaqueInRect(bounds); |
+ } |
+ |
+ return true; |
} |
} |