Index: third_party/WebKit/Source/core/layout/LayoutBoxModelObject.cpp |
diff --git a/third_party/WebKit/Source/core/layout/LayoutBoxModelObject.cpp b/third_party/WebKit/Source/core/layout/LayoutBoxModelObject.cpp |
index 9081857db32c0caf9d08620a6d0a46f5ebc4eb72..cd3587ad63c36c9c01f3a8c43e808791cc8e3b93 100644 |
--- a/third_party/WebKit/Source/core/layout/LayoutBoxModelObject.cpp |
+++ b/third_party/WebKit/Source/core/layout/LayoutBoxModelObject.cpp |
@@ -412,6 +412,11 @@ void LayoutBoxModelObject::invalidateTreeIfNeeded(const PaintInvalidationState& |
invalidatePaintOfSubtreesIfNeeded(newPaintInvalidationState); |
} |
+static bool compositedScrollsWithRespectTo(const LayoutObject* layoutObject, const LayoutBoxModelObject& paintInvalidationContainer) |
wkorman
2016/05/31 18:34:15
If layoutObject is never null can use const &?
chrishtr
2016/05/31 18:51:54
It can be null, due to the default parameter of in
|
+{ |
+ return paintInvalidationContainer.usesCompositedScrolling() && layoutObject != &paintInvalidationContainer; |
+} |
+ |
void LayoutBoxModelObject::setBackingNeedsPaintInvalidationInRect(const LayoutRect& r, PaintInvalidationReason invalidationReason, const LayoutObject& object) const |
{ |
// TODO(wangxianzhu): Enable the following assert after paint invalidation for spv2 is ready. |
@@ -428,12 +433,15 @@ void LayoutBoxModelObject::setBackingNeedsPaintInvalidationInRect(const LayoutRe |
// Note: the subpixel accumulation of layer() does not need to be added here. It is already taken into account. |
squashingLayer->setNeedsDisplayInRect(enclosingIntRect(paintInvalidationRect), invalidationReason, object); |
} |
+ } else if (compositedScrollsWithRespectTo(&object, *this)) { |
+ layer()->compositedLayerMapping()->setScrollingContentsNeedDisplayInRect(r, invalidationReason, object); |
} else { |
+ // TODO(chrishtr): we should be able to skip scrolling content layers in this case. |
layer()->compositedLayerMapping()->setContentsNeedDisplayInRect(r, invalidationReason, object); |
} |
} |
-void LayoutBoxModelObject::invalidateDisplayItemClientOnBacking(const DisplayItemClient& displayItemClient, PaintInvalidationReason invalidationReason) const |
+void LayoutBoxModelObject::invalidateDisplayItemClientOnBacking(const DisplayItemClient& displayItemClient, PaintInvalidationReason invalidationReason, const LayoutObject* layoutObject) const |
{ |
displayItemClient.setDisplayItemsUncached(); |
@@ -448,7 +456,10 @@ void LayoutBoxModelObject::invalidateDisplayItemClientOnBacking(const DisplayIte |
if (GraphicsLayer* squashingLayer = layer()->groupedMapping()->squashingLayer()) |
squashingLayer->displayItemClientWasInvalidated(displayItemClient, invalidationReason); |
} else if (CompositedLayerMapping* compositedLayerMapping = layer()->compositedLayerMapping()) { |
- compositedLayerMapping->displayItemClientWasInvalidated(displayItemClient, invalidationReason); |
+ if (compositedScrollsWithRespectTo(layoutObject, *this)) |
+ compositedLayerMapping->scrollingDisplayItemClientWasInvalidated(displayItemClient, invalidationReason); |
+ else |
+ compositedLayerMapping->displayItemClientWasInvalidated(displayItemClient, invalidationReason); |
} |
} |