Chromium Code Reviews| Index: third_party/WebKit/Source/core/layout/LayoutObject.cpp |
| diff --git a/third_party/WebKit/Source/core/layout/LayoutObject.cpp b/third_party/WebKit/Source/core/layout/LayoutObject.cpp |
| index a53c64682040896e7433533b73de6f314ee71f60..816d88cb044294ae24d0cea6294c5024e91ff7c3 100644 |
| --- a/third_party/WebKit/Source/core/layout/LayoutObject.cpp |
| +++ b/third_party/WebKit/Source/core/layout/LayoutObject.cpp |
| @@ -1281,6 +1281,8 @@ void LayoutObject::invalidatePaintRectangle(const LayoutRect& rect) const |
| const LayoutBoxModelObject* paintInvalidationContainer = invalidatePaintRectangleInternal(rect); |
| if (paintInvalidationContainer) |
| invalidateDisplayItemClients(*paintInvalidationContainer, PaintInvalidationRectangle); |
| + if (PaintLayer* enclosingLayer = this->enclosingLayer()) |
| + enclosingLayer->setNeedsRepaint(); |
| } |
| void LayoutObject::invalidatePaintRectangleNotInvalidatingDisplayItemClients(const LayoutRect& r) const |
| @@ -1430,13 +1432,16 @@ PaintInvalidationReason LayoutObject::invalidatePaintIfNeeded(PaintInvalidationS |
| // mutation, but incurs no pixel difference (i.e. bounds stay the same) so no rect-based |
| // invalidation is issued. See crbug.com/508383 and crbug.com/515977. |
| // This is a workaround to force display items to update paint offset. |
| - if (!RuntimeEnabledFeatures::slimmingPaintOffsetCachingEnabled() && paintInvalidationState.forcedSubtreeInvalidationWithinContainer()) |
| + if (!RuntimeEnabledFeatures::slimmingPaintOffsetCachingEnabled() && paintInvalidationState.forcedSubtreeInvalidationWithinContainer()) { |
| invalidateDisplayItemClients(paintInvalidationContainer, invalidationReason); |
| + paintInvalidationState.enclosingLayer().setNeedsRepaint(); |
| + } |
| return invalidationReason; |
| } |
| invalidateDisplayItemClients(paintInvalidationContainer, invalidationReason); |
| + paintInvalidationState.enclosingLayer().setNeedsRepaint(); |
| if (invalidationReason == PaintInvalidationIncremental) { |
| incrementallyInvalidatePaint(paintInvalidationContainer, oldBounds, newBounds, newLocation); |
| @@ -3405,11 +3410,20 @@ void LayoutObject::invalidateDisplayItemClientsIncludingNonCompositingDescendant |
| traverseNonCompositingDescendants(const_cast<LayoutObject&>(*this), [&paintInvalidationContainer, paintInvalidationReason](LayoutObject& object) { |
| object.invalidateDisplayItemClients(*paintInvalidationContainer, paintInvalidationReason); |
| + if (object.hasLayer()) |
| + toLayoutBoxModelObject(object).layer()->setNeedsRepaint(); |
| }); |
| } |
| void LayoutObject::invalidatePaintOfPreviousPaintInvalidationRect(const LayoutBoxModelObject& paintInvalidationContainer, PaintInvalidationReason reason) |
| { |
| + invalidatePaintOfPreviousPaintInvalidationRectNotSettingLayerNeedsRepaint(paintInvalidationContainer, reason); |
| + if (PaintLayer* enclosingLayer = this->enclosingLayer()) |
| + enclosingLayer->setNeedsRepaint(); |
| +} |
| + |
| +void LayoutObject::invalidatePaintOfPreviousPaintInvalidationRectNotSettingLayerNeedsRepaint(const LayoutBoxModelObject& paintInvalidationContainer, PaintInvalidationReason reason) |
| +{ |
|
chrishtr
2016/01/14 18:51:13
This looks like a copy of the old code. I expected
Xianzhu
2016/01/14 19:19:08
Now invalidateDisplayItemClients() doesn't set lay
chrishtr
2016/01/15 00:02:21
I understand the goal, but can't find where you ar
|
| // These disablers are valid because we want to use the current compositing/invalidation status. |
| DisablePaintInvalidationStateAsserts invalidationDisabler; |
| DisableCompositingQueryAsserts compositingDisabler; |
| @@ -3431,7 +3445,9 @@ void LayoutObject::invalidatePaintIncludingNonCompositingDescendants() |
| // Since we're only painting non-composited layers, we know that they all share the same paintInvalidationContainer. |
| const LayoutBoxModelObject& paintInvalidationContainer = containerForPaintInvalidation(); |
| traverseNonCompositingDescendants(*this, [&paintInvalidationContainer](LayoutObject& object) { |
| - object.invalidatePaintOfPreviousPaintInvalidationRect(paintInvalidationContainer, PaintInvalidationLayer); |
| + object.invalidatePaintOfPreviousPaintInvalidationRectNotSettingLayerNeedsRepaint(paintInvalidationContainer, PaintInvalidationLayer); |
| + if (object.hasLayer()) |
| + toLayoutBoxModelObject(object).layer()->setNeedsRepaint(); |
| }); |
| } |