| Index: third_party/WebKit/Source/core/paint/PaintLayer.cpp
|
| diff --git a/third_party/WebKit/Source/core/paint/PaintLayer.cpp b/third_party/WebKit/Source/core/paint/PaintLayer.cpp
|
| index 37a94ac80e0939e43eb374798ff3684fdb5e86ef..e22e232e35e73be4787d34d29c9f7420d3c2a7fe 100644
|
| --- a/third_party/WebKit/Source/core/paint/PaintLayer.cpp
|
| +++ b/third_party/WebKit/Source/core/paint/PaintLayer.cpp
|
| @@ -2334,6 +2334,14 @@ GraphicsLayer* PaintLayer::graphicsLayerBackingForScrolling() const
|
| }
|
| }
|
|
|
| +bool PaintLayer::shouldPaintBackgroundOntoScrollingContentsLayer() const
|
| +{
|
| + return !isRootLayer()
|
| + && scrollsOverflow()
|
| + && layoutObject()->style()->hasEntirelyLocalBackground()
|
| + && !stackingNode()->hasNegativeZOrderList();
|
| +}
|
| +
|
| void PaintLayer::ensureCompositedLayerMapping()
|
| {
|
| if (m_rareData && m_rareData->compositedLayerMapping)
|
| @@ -2397,9 +2405,6 @@ bool PaintLayer::paintsWithTransform(GlobalPaintFlags globalPaintFlags) const
|
|
|
| bool PaintLayer::backgroundIsKnownToBeOpaqueInRect(const LayoutRect& localRect) const
|
| {
|
| - if (!isSelfPaintingLayer() && !hasSelfPaintingLayerDescendant())
|
| - return false;
|
| -
|
| if (paintsWithTransparency(GlobalPaintNormalPhase))
|
| return false;
|
|
|
| @@ -2421,8 +2426,6 @@ bool PaintLayer::backgroundIsKnownToBeOpaqueInRect(const LayoutRect& localRect)
|
| if (m_stackingNode->zOrderListsDirty())
|
| return false;
|
|
|
| - // FIXME: We currently only check the immediate layoutObject,
|
| - // which will miss many cases.
|
| if (layoutObject()->backgroundIsKnownToBeOpaqueInRect(localRect))
|
| return true;
|
|
|
| @@ -2431,13 +2434,17 @@ bool PaintLayer::backgroundIsKnownToBeOpaqueInRect(const LayoutRect& localRect)
|
| if (layoutObject()->hasClipRelatedProperty())
|
| return false;
|
|
|
| + // TODO(schenney): This could be improved by unioning the opaque regions of all the children.
|
| + // That would require a refactoring because currently children just check they at least
|
| + // cover the given rect, but a unioning method would require children to compute and report
|
| + // their rects.
|
| return childBackgroundIsKnownToBeOpaqueInRect(localRect);
|
| }
|
|
|
| bool PaintLayer::childBackgroundIsKnownToBeOpaqueInRect(const LayoutRect& localRect) const
|
| {
|
| - PaintLayerStackingNodeReverseIterator revertseIterator(*m_stackingNode, PositiveZOrderChildren | NormalFlowChildren | NegativeZOrderChildren);
|
| - while (PaintLayerStackingNode* child = revertseIterator.next()) {
|
| + PaintLayerStackingNodeReverseIterator reverseIterator(*m_stackingNode, PositiveZOrderChildren | NormalFlowChildren | NegativeZOrderChildren);
|
| + while (PaintLayerStackingNode* child = reverseIterator.next()) {
|
| const PaintLayer* childLayer = child->layer();
|
| // Stop at composited paint boundaries.
|
| if (childLayer->isPaintInvalidationContainer())
|
|
|