Index: third_party/WebKit/Source/core/layout/PaintInvalidationState.h |
diff --git a/third_party/WebKit/Source/core/layout/PaintInvalidationState.h b/third_party/WebKit/Source/core/layout/PaintInvalidationState.h |
index 94f9a8cc23cf76f8fd5328d305ffa24320d600d6..6bf530f71516978c1ec64fb32c3732ea4c011216 100644 |
--- a/third_party/WebKit/Source/core/layout/PaintInvalidationState.h |
+++ b/third_party/WebKit/Source/core/layout/PaintInvalidationState.h |
@@ -42,28 +42,16 @@ public: |
// the one we find during tree walk. Remove this after we fix the issue with tree walk in DOM-order. |
PaintInvalidationState(const PaintInvalidationState& parentState, const LayoutBoxModelObject&, const LayoutBoxModelObject& paintInvalidationContainer); |
- // For root LayoutView. |
- PaintInvalidationState(const LayoutView& layoutView, Vector<LayoutObject*>& pendingDelayedPaintInvalidations) |
- : PaintInvalidationState(layoutView, pendingDelayedPaintInvalidations, nullptr) { } |
- // For LayoutView in a sub-frame. |
- PaintInvalidationState(const LayoutView& layoutView, const PaintInvalidationState& ownerPaintInvalidationState) |
- : PaintInvalidationState(layoutView, ownerPaintInvalidationState.m_pendingDelayedPaintInvalidations, &ownerPaintInvalidationState) { } |
- |
- // When a PaintInvalidationState is constructed, it just updates paintInvalidationContainer and |
- // copy cached paintOffset and clip from the parent PaintInvalidationContainer. |
- // This PaintInvalidationContainer can be used to invalidate the current object. |
- // |
- // After invalidation of the current object, before invalidation of the subtrees, |
- // this method must be called to make this PaintInvalidationState suitable for |
- // paint invalidation of children. |
- void updatePaintOffsetAndClipForChildren(); |
- |
- const LayoutRect& clipRect() const { return m_clipRect; } |
- const LayoutSize& paintOffset() const { return m_paintOffset; } |
- const AffineTransform& svgTransform() const { return m_svgTransform; } |
+ // For root LayoutView, or when sub-frame LayoutView's invalidateTreeIfNeeded() is called directly from |
+ // FrameView::invalidateTreeIfNeededRecursive() instead of the owner LayoutPart. |
+ // TODO(wangxianzhu): Eliminate the latter case. |
+ PaintInvalidationState(const LayoutView&, Vector<LayoutObject*>& pendingDelayedPaintInvalidations); |
- bool cachedOffsetsEnabled() const { return m_cachedOffsetsEnabled; } |
- bool isClipped() const { return m_clipped; } |
+ // When a PaintInvalidationState is constructed, it can be used to map points/rects in the object's |
+ // local space (border box space for LayoutBoxes). After invalidation of the current object, |
+ // before invalidation of the subtrees, this method must be called to apply clip and scroll offset |
+ // etc. for creating child PaintInvalidationStates. |
+ void updateForChildren(); |
bool forcedSubtreeInvalidationWithinContainer() const { return m_forcedSubtreeInvalidationWithinContainer; } |
void setForceSubtreeInvalidationWithinContainer() { m_forcedSubtreeInvalidationWithinContainer = true; } |
@@ -73,28 +61,30 @@ public: |
const LayoutBoxModelObject& paintInvalidationContainer() const { return m_paintInvalidationContainer; } |
- bool canMapToAncestor(const LayoutBoxModelObject* ancestor) const |
- { |
- return m_cachedOffsetsEnabled && ancestor == &m_paintInvalidationContainer; |
- } |
- bool mapObjectRectToAncestor(const LayoutObject&, const LayoutBoxModelObject* ancestor, LayoutRect&, VisibleRectFlags = DefaultVisibleRectFlags) const; |
+ // Computes the position of the current object ((0,0) in the space of the object) |
+ // in the space of paint invalidation backing. |
+ LayoutPoint computePositionFromPaintInvalidationBacking() const; |
+ |
+ // Returns the rect bounds needed to invalidate paint of this object, |
+ // in the space of paint invalidation backing. |
+ LayoutRect computePaintInvalidationRectInBacking() const; |
+ |
+ void mapLocalRectToPaintInvalidationBacking(LayoutRect&) const; |
// Records |obj| as needing paint invalidation on the next frame. See the definition of PaintInvalidationDelayedFull for more details. |
void pushDelayedPaintInvalidationTarget(LayoutObject& obj) const { m_pendingDelayedPaintInvalidations.append(&obj); } |
Vector<LayoutObject*>& pendingDelayedPaintInvalidationTargets() const { return m_pendingDelayedPaintInvalidations; } |
- // Disable view clipping and scroll offset adjustment for paint invalidation of FrameView scrollbars. |
- // TODO(wangxianzhu): Remove this when root-layer-scrolls launches. |
- bool viewClippingAndScrollOffsetDisabled() const { return m_viewClippingAndScrollOffsetDisabled; } |
- void setViewClippingAndScrollOffsetDisabled(bool b) { m_viewClippingAndScrollOffsetDisabled = b; } |
- |
PaintLayer& enclosingSelfPaintingLayer(const LayoutObject&) const; |
+#if ENABLE(ASSERT) |
+ const LayoutObject& currentObject() const { return m_currentObject; } |
+#endif |
+ |
private: |
- PaintInvalidationState(const LayoutView&, Vector<LayoutObject*>& pendingDelayedPaintInvalidations, const PaintInvalidationState* ownerPaintInvalidationState); |
+ LayoutRect computePaintInvalidationRectInBackingForSVG() const; |
- void applyClipIfNeeded(); |
- void addClipRectRelativeToPaintOffset(const LayoutSize& clipSize); |
+ void addClipRectRelativeToPaintOffset(const LayoutRect& localClipRect); |
friend class ForceHorriblySlowRectMapping; |
@@ -104,7 +94,6 @@ private: |
mutable bool m_cachedOffsetsEnabled; |
bool m_forcedSubtreeInvalidationWithinContainer; |
bool m_forcedSubtreeInvalidationRectUpdateWithinContainer; |
- bool m_viewClippingAndScrollOffsetDisabled; |
LayoutRect m_clipRect; |
@@ -126,7 +115,7 @@ private: |
PaintLayer& m_enclosingSelfPaintingLayer; |
#if ENABLE(ASSERT) |
- bool m_didUpdatePaintOffsetAndClipForChildren; |
+ bool m_didUpdateForChildren; |
#endif |
}; |
@@ -140,7 +129,7 @@ class ForceHorriblySlowRectMapping { |
public: |
ForceHorriblySlowRectMapping(const PaintInvalidationState* paintInvalidationState) |
: m_paintInvalidationState(paintInvalidationState) |
- , m_didDisable(m_paintInvalidationState && m_paintInvalidationState->cachedOffsetsEnabled()) |
+ , m_didDisable(m_paintInvalidationState && m_paintInvalidationState->m_cachedOffsetsEnabled) |
{ |
if (m_paintInvalidationState) |
m_paintInvalidationState->m_cachedOffsetsEnabled = false; |