Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(44)

Side by Side Diff: third_party/WebKit/Source/core/layout/PaintInvalidationState.h

Issue 2033183002: [SPv2] Paint invalidation in PreWalkTreeWalk, plumbed on PaintInvalidationState (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@RootFrame
Patch Set: Created 4 years, 6 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 // Copyright 2014 The Chromium Authors. All rights reserved. 1 // Copyright 2014 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #ifndef PaintInvalidationState_h 5 #ifndef PaintInvalidationState_h
6 #define PaintInvalidationState_h 6 #define PaintInvalidationState_h
7 7
8 #include "core/CoreExport.h" 8 #include "core/CoreExport.h"
9 #include "platform/geometry/LayoutRect.h" 9 #include "platform/geometry/LayoutRect.h"
10 #include "platform/graphics/PaintInvalidationReason.h" 10 #include "platform/graphics/PaintInvalidationReason.h"
(...skipping 17 matching lines...) Expand all
28 // PaintInvalidationState is an optimization used during the paint 28 // PaintInvalidationState is an optimization used during the paint
29 // invalidation phase. 29 // invalidation phase.
30 // 30 //
31 // This class is extremely close to LayoutState so see the documentation 31 // This class is extremely close to LayoutState so see the documentation
32 // of LayoutState for the class existence and performance benefits. 32 // of LayoutState for the class existence and performance benefits.
33 // 33 //
34 // The main difference with LayoutState is that it was customized for the 34 // The main difference with LayoutState is that it was customized for the
35 // needs of the paint invalidation systems (keeping visual rectangles 35 // needs of the paint invalidation systems (keeping visual rectangles
36 // instead of layout specific information). 36 // instead of layout specific information).
37 // 37 //
38 // See Source/core/paint/README.md ### PaintInvalidationState for more details. 38 // See Source/core/paint/README.md#Paint-invalidation for more details.
39 39
40 class CORE_EXPORT PaintInvalidationState { 40 class CORE_EXPORT PaintInvalidationState {
41 DISALLOW_NEW_EXCEPT_PLACEMENT_NEW(); 41 DISALLOW_NEW_EXCEPT_PLACEMENT_NEW();
42 WTF_MAKE_NONCOPYABLE(PaintInvalidationState); 42 WTF_MAKE_NONCOPYABLE(PaintInvalidationState);
43 public: 43 public:
44 PaintInvalidationState(const PaintInvalidationState& parentState, const Layo utObject&); 44 PaintInvalidationState(const PaintInvalidationState& parentState, const Layo utObject&);
45 45
46 // For root LayoutView, or when sub-frame LayoutView's invalidateTreeIfNeede d() is called directly from 46 // For root LayoutView, or when sub-frame LayoutView's invalidateTreeIfNeede d() is called directly from
47 // FrameView::invalidateTreeIfNeededRecursive() instead of the owner LayoutP art. 47 // FrameView::invalidateTreeIfNeededRecursive() instead of the owner LayoutP art.
48 // TODO(wangxianzhu): Eliminate the latter case. 48 // TODO(wangxianzhu): Eliminate the latter case.
49 PaintInvalidationState(const LayoutView&, Vector<LayoutObject*>& pendingDela yedPaintInvalidations); 49 PaintInvalidationState(const LayoutView&, Vector<const LayoutObject*>& pendi ngDelayedPaintInvalidations);
50 50
51 // When a PaintInvalidationState is constructed, it can be used to map point s/rects in the object's 51 // When a PaintInvalidationState is constructed, it can be used to map point s/rects in the object's
52 // local space (border box space for LayoutBoxes). After invalidation of the current object, 52 // local space (border box space for LayoutBoxes). After invalidation of the current object,
53 // before invalidation of the subtrees, this method must be called to apply clip and scroll offset 53 // before invalidation of the subtrees, this method must be called to apply clip and scroll offset
54 // etc. for creating child PaintInvalidationStates. 54 // etc. for creating child PaintInvalidationStates.
55 void updateForChildren(PaintInvalidationReason); 55 void updateForChildren(PaintInvalidationReason);
56 56
57 bool hasForcedSubtreeInvalidationFlags() const { return m_forcedSubtreeInval idationFlags; } 57 bool hasForcedSubtreeInvalidationFlags() const { return m_forcedSubtreeInval idationFlags; }
58 58
59 bool forcedSubtreeInvalidationCheckingWithinContainer() const { return m_for cedSubtreeInvalidationFlags & InvalidationChecking; } 59 bool forcedSubtreeInvalidationCheckingWithinContainer() const { return m_for cedSubtreeInvalidationFlags & InvalidationChecking; }
60 void setForceSubtreeInvalidationCheckingWithinContainer() { m_forcedSubtreeI nvalidationFlags |= InvalidationChecking; } 60 void setForceSubtreeInvalidationCheckingWithinContainer() { m_forcedSubtreeI nvalidationFlags |= InvalidationChecking; }
61 61
62 bool forcedSubtreeFullInvalidationWithinContainer() const { return m_forcedS ubtreeInvalidationFlags & FullInvalidation; } 62 bool forcedSubtreeFullInvalidationWithinContainer() const { return m_forcedS ubtreeInvalidationFlags & FullInvalidation; }
63 63
64 bool forcedSubtreeInvalidationRectUpdateWithinContainerOnly() const { return m_forcedSubtreeInvalidationFlags == InvalidationRectUpdate; } 64 bool forcedSubtreeInvalidationRectUpdateWithinContainerOnly() const { return m_forcedSubtreeInvalidationFlags == InvalidationRectUpdate; }
65 void setForceSubtreeInvalidationRectUpdateWithinContainer() { m_forcedSubtre eInvalidationFlags |= InvalidationRectUpdate; } 65 void setForceSubtreeInvalidationRectUpdateWithinContainer() { m_forcedSubtre eInvalidationFlags |= InvalidationRectUpdate; }
66 66
67 const LayoutBoxModelObject& paintInvalidationContainer() const { return *m_p aintInvalidationContainer; } 67 const LayoutBoxModelObject& paintInvalidationContainer() const { return *m_p aintInvalidationContainer; }
68 68
69 // Computes the position of the current object ((0,0) in the space of the ob ject) 69 // Computes the position of the current object ((0,0) in the space of the ob ject)
70 // in the space of paint invalidation backing. 70 // in the space of paint invalidation backing.
71 LayoutPoint computePositionFromPaintInvalidationBacking() const; 71 LayoutPoint computePositionFromPaintInvalidationBacking() const;
72 72
73 // Returns the rect bounds needed to invalidate paint of this object, 73 // Returns the rect bounds needed to invalidate paint of this object,
74 // in the space of paint invalidation backing. 74 // in the space of paint invalidation backing.
75 LayoutRect computePaintInvalidationRectInBacking() const; 75 LayoutRect computePaintInvalidationRectInBacking() const;
76 76
77 void mapLocalRectToPaintInvalidationBacking(LayoutRect&) const; 77 void mapLocalRectToPaintInvalidationBacking(LayoutRect&) const;
78 78
79 // Records |obj| as needing paint invalidation on the next frame. See the de finition of PaintInvalidationDelayedFull for more details.
80 void pushDelayedPaintInvalidationTarget(LayoutObject& obj) const { m_pending DelayedPaintInvalidations.append(&obj); }
81 Vector<LayoutObject*>& pendingDelayedPaintInvalidationTargets() const { retu rn m_pendingDelayedPaintInvalidations; }
82
83 PaintLayer& paintingLayer() const; 79 PaintLayer& paintingLayer() const;
84 80
85 #if ENABLE(ASSERT) 81 #if ENABLE(ASSERT)
86 const LayoutObject& currentObject() const { return m_currentObject; } 82 const LayoutObject& currentObject() const { return m_currentObject; }
87 #endif 83 #endif
88 84
89 private: 85 private:
90 friend class VisualRectMappingTest; 86 friend class VisualRectMappingTest;
91 87
92 void mapLocalRectToPaintInvalidationContainer(LayoutRect&) const; 88 void mapLocalRectToPaintInvalidationContainer(LayoutRect&) const;
(...skipping 45 matching lines...) Expand 10 before | Expand all | Expand 10 after
138 // paint invalidation containers differ. 134 // paint invalidation containers differ.
139 const LayoutBoxModelObject* m_paintInvalidationContainerForStackedContents; 135 const LayoutBoxModelObject* m_paintInvalidationContainerForStackedContents;
140 136
141 const LayoutObject& m_containerForAbsolutePosition; 137 const LayoutObject& m_containerForAbsolutePosition;
142 138
143 // Transform from the initial viewport coordinate system of an outermost 139 // Transform from the initial viewport coordinate system of an outermost
144 // SVG root to the userspace _before_ the relevant element. Combining this 140 // SVG root to the userspace _before_ the relevant element. Combining this
145 // with |m_paintOffset| yields the "final" offset. 141 // with |m_paintOffset| yields the "final" offset.
146 AffineTransform m_svgTransform; 142 AffineTransform m_svgTransform;
147 143
148 Vector<LayoutObject*>& m_pendingDelayedPaintInvalidations; 144 // Records objects needing paint invalidation on the next frame. See the def inition of PaintInvalidationDelayedFull for more details.
145 Vector<const LayoutObject*>& m_pendingDelayedPaintInvalidations;
149 146
150 PaintLayer& m_paintingLayer; 147 PaintLayer& m_paintingLayer;
151 148
152 #if ENABLE(ASSERT) 149 #if ENABLE(ASSERT)
153 bool m_didUpdateForChildren; 150 bool m_didUpdateForChildren;
154 #endif 151 #endif
155 152
156 #if ENABLE(ASSERT) && !defined(NDEBUG) 153 #if ENABLE(ASSERT) && !defined(NDEBUG)
157 // #define CHECK_FAST_PATH_SLOW_PATH_EQUALITY 154 // #define CHECK_FAST_PATH_SLOW_PATH_EQUALITY
158 #endif 155 #endif
159 156
160 #ifdef CHECK_FAST_PATH_SLOW_PATH_EQUALITY 157 #ifdef CHECK_FAST_PATH_SLOW_PATH_EQUALITY
161 void assertFastPathAndSlowPathRectsEqual(const LayoutRect& fastPathRect, con st LayoutRect& slowPathRect) const; 158 void assertFastPathAndSlowPathRectsEqual(const LayoutRect& fastPathRect, con st LayoutRect& slowPathRect) const;
162 bool m_canCheckFastPathSlowPathEquality; 159 bool m_canCheckFastPathSlowPathEquality;
163 #endif 160 #endif
164 }; 161 };
165 162
166 } // namespace blink 163 } // namespace blink
167 164
168 #endif // PaintInvalidationState_h 165 #endif // PaintInvalidationState_h
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698