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

Side by Side Diff: third_party/WebKit/Source/platform/graphics/paint/ScrollPaintPropertyNode.h

Issue 2506353002: Incrementally build main thread scrolling reasons [spv2] (Closed)
Patch Set: Fix test mistake Created 4 years, 1 month 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 2016 The Chromium Authors. All rights reserved. 1 // Copyright 2016 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 ScrollPaintPropertyNode_h 5 #ifndef ScrollPaintPropertyNode_h
6 #define ScrollPaintPropertyNode_h 6 #define ScrollPaintPropertyNode_h
7 7
8 #include "platform/PlatformExport.h" 8 #include "platform/PlatformExport.h"
9 #include "platform/geometry/FloatSize.h" 9 #include "platform/geometry/FloatSize.h"
10 #include "platform/graphics/paint/TransformPaintPropertyNode.h" 10 #include "platform/graphics/paint/TransformPaintPropertyNode.h"
(...skipping 14 matching lines...) Expand all
25 // 25 //
26 // Main thread scrolling reasons force scroll updates to go to the main thread 26 // Main thread scrolling reasons force scroll updates to go to the main thread
27 // and can have dependencies on other nodes. For example, all parents of a 27 // and can have dependencies on other nodes. For example, all parents of a
28 // scroll node with background attachment fixed set should also have it set. 28 // scroll node with background attachment fixed set should also have it set.
29 class PLATFORM_EXPORT ScrollPaintPropertyNode 29 class PLATFORM_EXPORT ScrollPaintPropertyNode
30 : public RefCounted<ScrollPaintPropertyNode> { 30 : public RefCounted<ScrollPaintPropertyNode> {
31 public: 31 public:
32 static ScrollPaintPropertyNode* root(); 32 static ScrollPaintPropertyNode* root();
33 33
34 static PassRefPtr<ScrollPaintPropertyNode> create( 34 static PassRefPtr<ScrollPaintPropertyNode> create(
35 PassRefPtr<ScrollPaintPropertyNode> parent, 35 PassRefPtr<const ScrollPaintPropertyNode> parent,
36 PassRefPtr<const TransformPaintPropertyNode> scrollOffsetTranslation, 36 PassRefPtr<const TransformPaintPropertyNode> scrollOffsetTranslation,
37 const IntSize& clip, 37 const IntSize& clip,
38 const IntSize& bounds, 38 const IntSize& bounds,
39 bool userScrollableHorizontal, 39 bool userScrollableHorizontal,
40 bool userScrollableVertical) { 40 bool userScrollableVertical,
41 MainThreadScrollingReasons mainThreadScrollingReasons) {
41 return adoptRef(new ScrollPaintPropertyNode( 42 return adoptRef(new ScrollPaintPropertyNode(
42 std::move(parent), std::move(scrollOffsetTranslation), clip, bounds, 43 std::move(parent), std::move(scrollOffsetTranslation), clip, bounds,
43 userScrollableHorizontal, userScrollableVertical)); 44 userScrollableHorizontal, userScrollableVertical,
45 mainThreadScrollingReasons));
44 } 46 }
45 47
46 void update( 48 void update(
47 PassRefPtr<ScrollPaintPropertyNode> parent, 49 PassRefPtr<const ScrollPaintPropertyNode> parent,
48 PassRefPtr<const TransformPaintPropertyNode> scrollOffsetTranslation, 50 PassRefPtr<const TransformPaintPropertyNode> scrollOffsetTranslation,
49 const IntSize& clip, 51 const IntSize& clip,
50 const IntSize& bounds, 52 const IntSize& bounds,
51 bool userScrollableHorizontal, 53 bool userScrollableHorizontal,
52 bool userScrollableVertical) { 54 bool userScrollableVertical,
55 MainThreadScrollingReasons mainThreadScrollingReasons) {
53 DCHECK(!isRoot()); 56 DCHECK(!isRoot());
54 DCHECK(parent != this); 57 DCHECK(parent != this);
55 m_parent = parent; 58 m_parent = parent;
56 DCHECK(scrollOffsetTranslation->matrix().isIdentityOr2DTranslation()); 59 DCHECK(scrollOffsetTranslation->matrix().isIdentityOr2DTranslation());
57 m_scrollOffsetTranslation = scrollOffsetTranslation; 60 m_scrollOffsetTranslation = scrollOffsetTranslation;
58 m_clip = clip; 61 m_clip = clip;
59 m_bounds = bounds; 62 m_bounds = bounds;
60 m_userScrollableHorizontal = userScrollableHorizontal; 63 m_userScrollableHorizontal = userScrollableHorizontal;
61 m_userScrollableVertical = userScrollableVertical; 64 m_userScrollableVertical = userScrollableVertical;
62 m_mainThreadScrollingReasons = 0; 65 m_mainThreadScrollingReasons = mainThreadScrollingReasons;
63 } 66 }
64 67
65 ScrollPaintPropertyNode* parent() const { return m_parent.get(); } 68 const ScrollPaintPropertyNode* parent() const { return m_parent.get(); }
66 bool isRoot() const { return !m_parent; } 69 bool isRoot() const { return !m_parent; }
67 70
68 // Transform that the scroll is relative to. 71 // Transform that the scroll is relative to.
69 const TransformPaintPropertyNode* scrollOffsetTranslation() const { 72 const TransformPaintPropertyNode* scrollOffsetTranslation() const {
70 return m_scrollOffsetTranslation.get(); 73 return m_scrollOffsetTranslation.get();
71 } 74 }
72 75
73 // The clipped area that contains the scrolled content. 76 // The clipped area that contains the scrolled content.
74 const IntSize& clip() const { return m_clip; } 77 const IntSize& clip() const { return m_clip; }
75 78
76 // The bounds of the content that is scrolled within |clip|. 79 // The bounds of the content that is scrolled within |clip|.
77 const IntSize& bounds() const { return m_bounds; } 80 const IntSize& bounds() const { return m_bounds; }
78 81
79 bool userScrollableHorizontal() const { return m_userScrollableHorizontal; } 82 bool userScrollableHorizontal() const { return m_userScrollableHorizontal; }
80 bool userScrollableVertical() const { return m_userScrollableVertical; } 83 bool userScrollableVertical() const { return m_userScrollableVertical; }
81 84
82 // Return reason bitfield with values from cc::MainThreadScrollingReason. 85 // Return reason bitfield with values from cc::MainThreadScrollingReason.
83 MainThreadScrollingReasons mainThreadScrollingReasons() const { 86 MainThreadScrollingReasons mainThreadScrollingReasons() const {
84 return m_mainThreadScrollingReasons; 87 return m_mainThreadScrollingReasons;
85 } 88 }
86 bool hasMainThreadScrollingReasons(MainThreadScrollingReasons reasons) const { 89
87 return m_mainThreadScrollingReasons & reasons; 90 // Main thread scrolling reason for the threaded scrolling disabled setting.
91 bool threadedScrollingDisabled() const {
92 return m_mainThreadScrollingReasons &
93 MainThreadScrollingReason::kThreadedScrollingDisabled;
88 } 94 }
89 void addMainThreadScrollingReasons(MainThreadScrollingReasons reasons) { 95
90 m_mainThreadScrollingReasons |= reasons; 96 // Main thread scrolling reason for background attachment fixed descendants.
97 bool hasBackgroundAttachmentFixedDescendants() const {
98 return m_mainThreadScrollingReasons &
99 MainThreadScrollingReason::kHasBackgroundAttachmentFixedObjects;
91 } 100 }
92 void clearMainThreadScrollingReasons() { m_mainThreadScrollingReasons = 0; }
93 101
94 #if DCHECK_IS_ON() 102 #if DCHECK_IS_ON()
95 // The clone function is used by FindPropertiesNeedingUpdate.h for recording 103 // The clone function is used by FindPropertiesNeedingUpdate.h for recording
96 // a scroll node before it has been updated, to later detect changes. 104 // a scroll node before it has been updated, to later detect changes.
97 PassRefPtr<ScrollPaintPropertyNode> clone() const { 105 PassRefPtr<ScrollPaintPropertyNode> clone() const {
98 RefPtr<ScrollPaintPropertyNode> cloned = 106 RefPtr<ScrollPaintPropertyNode> cloned =
99 adoptRef(new ScrollPaintPropertyNode( 107 adoptRef(new ScrollPaintPropertyNode(
100 m_parent, m_scrollOffsetTranslation, m_clip, m_bounds, 108 m_parent, m_scrollOffsetTranslation, m_clip, m_bounds,
101 m_userScrollableHorizontal, m_userScrollableVertical)); 109 m_userScrollableHorizontal, m_userScrollableVertical,
102 cloned->addMainThreadScrollingReasons(m_mainThreadScrollingReasons); 110 m_mainThreadScrollingReasons));
103 return cloned; 111 return cloned;
104 } 112 }
105 113
106 // The equality operator is used by FindPropertiesNeedingUpdate.h for checking 114 // The equality operator is used by FindPropertiesNeedingUpdate.h for checking
107 // if a scroll node has changed. 115 // if a scroll node has changed.
108 bool operator==(const ScrollPaintPropertyNode& o) const { 116 bool operator==(const ScrollPaintPropertyNode& o) const {
109 // TODO(pdr): Check main thread scrolling reason equality as well. We do
110 // not yet mark nodes as needing a paint property update on main thread
111 // scrolling reason changes. See: See: https://crbug.com/664672.
112 return m_parent == o.m_parent && 117 return m_parent == o.m_parent &&
113 m_scrollOffsetTranslation == o.m_scrollOffsetTranslation && 118 m_scrollOffsetTranslation == o.m_scrollOffsetTranslation &&
114 m_clip == o.m_clip && m_bounds == o.m_bounds && 119 m_clip == o.m_clip && m_bounds == o.m_bounds &&
115 m_userScrollableHorizontal == o.m_userScrollableHorizontal && 120 m_userScrollableHorizontal == o.m_userScrollableHorizontal &&
116 m_userScrollableVertical == o.m_userScrollableVertical; 121 m_userScrollableVertical == o.m_userScrollableVertical &&
122 m_mainThreadScrollingReasons == o.m_mainThreadScrollingReasons;
117 } 123 }
118 #endif 124 #endif
119 125
120 private: 126 private:
121 ScrollPaintPropertyNode( 127 ScrollPaintPropertyNode(
122 PassRefPtr<ScrollPaintPropertyNode> parent, 128 PassRefPtr<const ScrollPaintPropertyNode> parent,
123 PassRefPtr<const TransformPaintPropertyNode> scrollOffsetTranslation, 129 PassRefPtr<const TransformPaintPropertyNode> scrollOffsetTranslation,
124 IntSize clip, 130 IntSize clip,
125 IntSize bounds, 131 IntSize bounds,
126 bool userScrollableHorizontal, 132 bool userScrollableHorizontal,
127 bool userScrollableVertical) 133 bool userScrollableVertical,
134 MainThreadScrollingReasons mainThreadScrollingReasons)
128 : m_parent(parent), 135 : m_parent(parent),
129 m_scrollOffsetTranslation(scrollOffsetTranslation), 136 m_scrollOffsetTranslation(scrollOffsetTranslation),
130 m_clip(clip), 137 m_clip(clip),
131 m_bounds(bounds), 138 m_bounds(bounds),
132 m_userScrollableHorizontal(userScrollableHorizontal), 139 m_userScrollableHorizontal(userScrollableHorizontal),
133 m_userScrollableVertical(userScrollableVertical), 140 m_userScrollableVertical(userScrollableVertical),
134 m_mainThreadScrollingReasons(0) { 141 m_mainThreadScrollingReasons(mainThreadScrollingReasons) {
135 DCHECK(m_scrollOffsetTranslation->matrix().isIdentityOr2DTranslation()); 142 DCHECK(m_scrollOffsetTranslation->matrix().isIdentityOr2DTranslation());
136 } 143 }
137 144
138 RefPtr<ScrollPaintPropertyNode> m_parent; 145 RefPtr<const ScrollPaintPropertyNode> m_parent;
139 RefPtr<const TransformPaintPropertyNode> m_scrollOffsetTranslation; 146 RefPtr<const TransformPaintPropertyNode> m_scrollOffsetTranslation;
140 IntSize m_clip; 147 IntSize m_clip;
141 IntSize m_bounds; 148 IntSize m_bounds;
142 bool m_userScrollableHorizontal; 149 bool m_userScrollableHorizontal : 1;
143 bool m_userScrollableVertical; 150 bool m_userScrollableVertical : 1;
144 MainThreadScrollingReasons m_mainThreadScrollingReasons; 151 MainThreadScrollingReasons m_mainThreadScrollingReasons;
145 // TODO(pdr): Add an offset for the clip and bounds to the transform.
146 // TODO(pdr): Add 2 bits for whether this is a viewport scroll node.
147 // TODO(pdr): Add a bit for whether this is affected by page scale.
148 }; 152 };
149 153
150 // Redeclared here to avoid ODR issues. 154 // Redeclared here to avoid ODR issues.
151 // See platform/testing/PaintPrinters.h. 155 // See platform/testing/PaintPrinters.h.
152 void PrintTo(const ScrollPaintPropertyNode&, std::ostream*); 156 void PrintTo(const ScrollPaintPropertyNode&, std::ostream*);
153 157
154 } // namespace blink 158 } // namespace blink
155 159
156 #endif // ScrollPaintPropertyNode_h 160 #endif // ScrollPaintPropertyNode_h
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698