Index: third_party/WebKit/Source/core/layout/LayoutObject.h |
diff --git a/third_party/WebKit/Source/core/layout/LayoutObject.h b/third_party/WebKit/Source/core/layout/LayoutObject.h |
index c517ffbc69e9fe865d3422091ac8878d6f941ad0..2516bc515dd5141a028599b760e8d9100375c438 100644 |
--- a/third_party/WebKit/Source/core/layout/LayoutObject.h |
+++ b/third_party/WebKit/Source/core/layout/LayoutObject.h |
@@ -68,6 +68,7 @@ class PseudoStyleRequest; |
class TransformState; |
struct PaintInfo; |
+struct PaintInvalidatorContext; |
enum CursorDirective { |
SetCursorBasedOnStyle, |
@@ -1307,16 +1308,8 @@ public: |
void adjustPreviousPaintInvalidationForScrollIfNeeded(const DoubleSize& scrollDelta); |
// The previous position of the top-left corner of the object in its previous paint backing. |
- const LayoutPoint& previousPositionFromPaintInvalidationBacking() const |
- { |
- ASSERT(!RuntimeEnabledFeatures::slimmingPaintInvalidationEnabled()); |
- return m_previousPositionFromPaintInvalidationBacking; |
- } |
- void setPreviousPositionFromPaintInvalidationBacking(const LayoutPoint& positionFromPaintInvalidationBacking) |
- { |
- ASSERT(!RuntimeEnabledFeatures::slimmingPaintInvalidationEnabled()); |
- m_previousPositionFromPaintInvalidationBacking = positionFromPaintInvalidationBacking; |
- } |
+ const LayoutPoint& previousPositionFromPaintInvalidationBacking() const { return m_previousPositionFromPaintInvalidationBacking; } |
+ void setPreviousPositionFromPaintInvalidationBacking(const LayoutPoint& positionFromPaintInvalidationBacking) { m_previousPositionFromPaintInvalidationBacking = positionFromPaintInvalidationBacking; } |
bool paintOffsetChanged(const LayoutPoint& newPaintOffset) const |
{ |
@@ -1334,7 +1327,7 @@ public: |
void setShouldDoFullPaintInvalidation(PaintInvalidationReason = PaintInvalidationFull); |
void clearShouldDoFullPaintInvalidation() { m_bitfields.setFullPaintInvalidationReason(PaintInvalidationNone); } |
- virtual void clearPaintInvalidationFlags(const PaintInvalidationState&); |
+ virtual void clearPaintInvalidationFlags(); |
bool mayNeedPaintInvalidation() const { return m_bitfields.mayNeedPaintInvalidation(); } |
void setMayNeedPaintInvalidation(); |
@@ -1381,6 +1374,20 @@ public: |
void invalidateDisplayItemClientsIncludingNonCompositingDescendants(PaintInvalidationReason) const; |
+ // New version to replace the above old version. |
+ virtual PaintInvalidationReason invalidatePaintIfNeeded(const PaintInvalidatorContext&) const; |
+ |
+ // When this object is invalidated for paint, this method is called to invalidate any DisplayItemClients |
+ // owned by this object, including the object itself, LayoutText/LayoutInline line boxes, etc., |
+ // not including children which will be invalidated normally during invalidateTreeIfNeeded() and |
+ // parts which are invalidated separately (e.g. scrollbars). |
+ // The caller should ensure the painting layer has been setNeedsRepaint before calling this function. |
+ virtual void invalidateDisplayItemClients(PaintInvalidationReason) const; |
+ |
+ const LayoutRect& previousPaintInvalidationRect() const { return m_previousPaintInvalidationRect; } |
+ |
+ virtual bool hasNonCompositedScrollbars() const { return false; } |
+ |
// Called before anonymousChild.setStyle(). Override to set custom styles for the child. |
virtual void updateAnonymousChildStyle(const LayoutObject& anonymousChild, ComputedStyle& style) const { } |
@@ -1388,11 +1395,15 @@ public: |
class MutableForPainting { |
public: |
void setPreviousPaintOffset(const LayoutPoint& paintOffset) { m_layoutObject.setPreviousPaintOffset(paintOffset); } |
- PaintInvalidationReason invalidatePaintIfNeeded(const PaintInvalidationState& paintInvalidationState) { return m_layoutObject.invalidatePaintIfNeeded(paintInvalidationState); } |
- void clearPaintInvalidationFlags(const PaintInvalidationState& paintInvalidationState) { m_layoutObject.clearPaintInvalidationFlags(paintInvalidationState); } |
- void setShouldDoDelayedFullPaintInvalidation() { m_layoutObject.setShouldDoFullPaintInvalidation(PaintInvalidationDelayedFull); } |
+ void clearPaintInvalidationFlags() { m_layoutObject.clearPaintInvalidationFlags(); } |
+ void setShouldDoFullPaintInvalidation(PaintInvalidationReason reason) { m_layoutObject.setShouldDoFullPaintInvalidation(reason); } |
+ void ensureIsReadyForPaintInvalidation() { m_layoutObject.ensureIsReadyForPaintInvalidation(); } |
- private: |
+ void setPreviousPaintInvalidationRect(const LayoutRect& r) { m_layoutObject.setPreviousPaintInvalidationRect(r); } |
+ void setPreviousPositionFromPaintInvalidationBacking(const LayoutPoint& p) { m_layoutObject.setPreviousPositionFromPaintInvalidationBacking(p); } |
+ void setPreviousBackgroundObscured(bool b) { m_layoutObject.setPreviousBackgroundObscured(b); } |
+ |
+ protected: |
friend class PaintPropertyTreeBuilder; |
// The following two functions can be called from PaintPropertyTreeBuilder only. |
ObjectPaintProperties& ensureObjectPaintProperties() { return m_layoutObject.ensureObjectPaintProperties(); } |
@@ -1414,6 +1425,9 @@ public: |
bool compositedScrollsWithRespectTo(const LayoutBoxModelObject& paintInvalidationContainer) const; |
IntSize scrollAdjustmentForPaintInvalidation(const LayoutBoxModelObject& paintInvalidationContainer) const; |
+ bool previousBackgroundObscured() const { return m_bitfields.previousBackgroundObscured(); } |
+ void setPreviousBackgroundObscured(bool b) { m_bitfields.setPreviousBackgroundObscured(b); } |
+ |
protected: |
enum LayoutObjectType { |
LayoutObjectBr, |
@@ -1535,25 +1549,6 @@ protected: |
void setPreviousPaintInvalidationRect(const LayoutRect& rect) { m_previousPaintInvalidationRect = rect; } |
- virtual PaintInvalidationReason getPaintInvalidationReason(const PaintInvalidationState&, |
- const LayoutRect& oldPaintInvalidationRect, const LayoutPoint& oldPositionFromPaintInvalidationBacking, |
- const LayoutRect& newPaintInvalidationRect, const LayoutPoint& newPositionFromPaintInvalidationBacking) const; |
- |
- // This function tries to minimize the amount of invalidation |
- // generated by invalidating the "difference" between |oldBounds| |
- // and |newBounds|. This means invalidating the union of the |
- // previous rectangles but not their intersection. |
- // |
- // The use case is when an element only requires a paint |
- // invalidation (which means that its content didn't change) |
- // and its bounds changed but its location didn't. |
- // |
- // If we don't meet the criteria for an incremental paint, the |
- // alternative is a full paint invalidation. |
- virtual void incrementallyInvalidatePaint(const LayoutBoxModelObject& paintInvalidationContainer, const LayoutRect& oldBounds, const LayoutRect& newBounds, const LayoutPoint& positionFromPaintInvalidationBacking); |
- |
- virtual bool hasNonCompositedScrollbars() const { return false; } |
- |
#if ENABLE(ASSERT) |
virtual bool paintInvalidationStateIsDirty() const |
{ |
@@ -1561,6 +1556,12 @@ protected: |
} |
#endif |
+ // Called before paint invalidation. |
+ virtual void ensureIsReadyForPaintInvalidation() |
+ { |
+ DCHECK(!needsLayout()); |
+ } |
+ |
// This function walks the descendants of |this|, following a |
// layout ordering. |
// |
@@ -1577,17 +1578,6 @@ protected: |
// by invalidatePaintOfSubtreesIfNeeded. |
virtual PaintInvalidationReason invalidatePaintIfNeeded(const PaintInvalidationState&); |
- // When this object is invalidated for paint, this method is called to invalidate any DisplayItemClients |
- // owned by this object, including the object itself, LayoutText/LayoutInline line boxes, etc., |
- // not including children which will be invalidated normally during invalidateTreeIfNeeded() and |
- // parts which are invalidated separately (e.g. scrollbars). |
- // The caller should ensure the painting layer has been setNeedsRepaint before calling this function. |
- virtual void invalidateDisplayItemClients(PaintInvalidationReason) const; |
- |
- // Sets painting layer needsRepaint, then calls invalidateDisplayItemClients(). |
- // Should use this version when PaintInvalidationState is available. |
- void invalidateDisplayItemClientsWithPaintInvalidationState(const PaintInvalidationState&, PaintInvalidationReason) const; |
- |
void setIsBackgroundAttachmentFixedObject(bool); |
void clearSelfNeedsOverflowRecalcAfterStyleChange() { m_bitfields.setSelfNeedsOverflowRecalcAfterStyleChange(false); } |
@@ -1599,16 +1589,7 @@ protected: |
bool containsInlineWithOutlineAndContinuation() const { return m_bitfields.containsInlineWithOutlineAndContinuation(); } |
void setContainsInlineWithOutlineAndContinuation(bool b) { m_bitfields.setContainsInlineWithOutlineAndContinuation(b); } |
- const LayoutRect& previousPaintInvalidationRect() const { return m_previousPaintInvalidationRect; } |
- |
private: |
- // This function generates a full invalidation, which |
- // means invalidating both |oldBounds| and |newBounds|. |
- // |
- // This is the default choice when generating an invalidation, |
- // as it is always correct, albeit it may force some extra painting. |
- void fullyInvalidatePaint(const LayoutBoxModelObject& paintInvalidationContainer, PaintInvalidationReason, const LayoutRect& oldBounds, const LayoutRect& newBounds); |
- |
// Adjusts a paint invalidation rect in the space of |m_previousPaintInvalidationRect| and |m_previousPositionFromPaintInvalidationBacking| |
// to be in the space of the |paintInvalidationContainer|, |
// if needed. They can be different only if |paintInvalidationContainer| is a composited scroller. |
@@ -1634,8 +1615,6 @@ private: |
inline void markAncestorsForPaintInvalidation(); |
- inline void invalidateSelectionIfNeeded(const LayoutBoxModelObject& paintInvalidationContainer, const PaintInvalidationState&, PaintInvalidationReason); |
- |
inline void invalidateContainerPreferredLogicalWidths(); |
void invalidatePaintIncludingNonSelfPaintingLayerDescendantsInternal(const LayoutBoxModelObject& paintInvalidationContainer); |
@@ -1643,9 +1622,6 @@ private: |
// The caller should ensure the painting layer has been setNeedsRepaint before calling this function. |
void invalidatePaintOfPreviousPaintInvalidationRect(const LayoutBoxModelObject& paintInvalidationContainer, PaintInvalidationReason); |
- LayoutRect previousSelectionRectForPaintInvalidation() const; |
- void setPreviousSelectionRectForPaintInvalidation(const LayoutRect&); |
- |
LayoutObject* containerForAbsolutePosition(const LayoutBoxModelObject* ancestor = nullptr, bool* ancestorSkipped = nullptr, bool* filterOrReflectionSkipped = nullptr) const; |
const LayoutBoxModelObject* enclosingCompositedContainer() const; |