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

Side by Side Diff: third_party/WebKit/Source/core/paint/ObjectPaintProperties.h

Issue 2539693002: Early-out from the prepaint tree walk (Closed)
Patch Set: Address chrishtrs comments Created 4 years 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 2015 The Chromium Authors. All rights reserved. 1 // Copyright 2015 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 ObjectPaintProperties_h 5 #ifndef ObjectPaintProperties_h
6 #define ObjectPaintProperties_h 6 #define ObjectPaintProperties_h
7 7
8 #include "core/CoreExport.h" 8 #include "core/CoreExport.h"
9 #include "platform/geometry/LayoutPoint.h" 9 #include "platform/geometry/LayoutPoint.h"
10 #include "platform/graphics/paint/ClipPaintPropertyNode.h" 10 #include "platform/graphics/paint/ClipPaintPropertyNode.h"
(...skipping 124 matching lines...) Expand 10 before | Expand all | Expand 10 after
135 m_localBorderBoxProperties->propertyTreeState.setTransform(transform); 135 m_localBorderBoxProperties->propertyTreeState.setTransform(transform);
136 m_localBorderBoxProperties->propertyTreeState.setClip(clip); 136 m_localBorderBoxProperties->propertyTreeState.setClip(clip);
137 m_localBorderBoxProperties->propertyTreeState.setEffect(effect); 137 m_localBorderBoxProperties->propertyTreeState.setEffect(effect);
138 m_localBorderBoxProperties->propertyTreeState.setScroll(scroll); 138 m_localBorderBoxProperties->propertyTreeState.setScroll(scroll);
139 } else { 139 } else {
140 m_localBorderBoxProperties = 140 m_localBorderBoxProperties =
141 wrapUnique(new ObjectPaintProperties::PropertyTreeStateWithOffset( 141 wrapUnique(new ObjectPaintProperties::PropertyTreeStateWithOffset(
142 paintOffset, PropertyTreeState(transform, clip, effect, scroll))); 142 paintOffset, PropertyTreeState(transform, clip, effect, scroll)));
143 } 143 }
144 } 144 }
145 void clearLocalBorderBoxProperties() { m_localBorderBoxProperties = nullptr; }
145 146
146 // This is the complete set of property nodes and paint offset that can be 147 // This is the complete set of property nodes and paint offset that can be
147 // used to paint the contents of this object. It is similar to 148 // used to paint the contents of this object. It is similar to
148 // localBorderBoxProperties but includes properties (e.g., overflow clip, 149 // localBorderBoxProperties but includes properties (e.g., overflow clip,
149 // scroll translation) that apply to contents. This is suitable for paint 150 // scroll translation) that apply to contents. This is suitable for paint
150 // invalidation. 151 // invalidation.
151 ObjectPaintProperties::PropertyTreeStateWithOffset contentsProperties() const; 152 ObjectPaintProperties::PropertyTreeStateWithOffset contentsProperties() const;
152 153
153 void clearPaintOffsetTranslation() { m_paintOffsetTranslation = nullptr; } 154 // True if an existing property was deleted, false otherwise.
154 void clearTransform() { m_transform = nullptr; } 155 bool clearPaintOffsetTranslation() { return clear(m_paintOffsetTranslation); }
155 void clearEffect() { m_effect = nullptr; } 156 // True if an existing property was deleted, false otherwise.
156 void clearCssClip() { m_cssClip = nullptr; } 157 bool clearTransform() { return clear(m_transform); }
157 void clearCssClipFixedPosition() { m_cssClipFixedPosition = nullptr; } 158 // True if an existing property was deleted, false otherwise.
158 void clearInnerBorderRadiusClip() { m_innerBorderRadiusClip = nullptr; } 159 bool clearEffect() { return clear(m_effect); }
159 void clearOverflowClip() { m_overflowClip = nullptr; } 160 // True if an existing property was deleted, false otherwise.
160 void clearLocalBorderBoxProperties() { m_localBorderBoxProperties = nullptr; } 161 bool clearCssClip() { return clear(m_cssClip); }
161 void clearPerspective() { m_perspective = nullptr; } 162 // True if an existing property was deleted, false otherwise.
162 void clearSvgLocalToBorderBoxTransform() { 163 bool clearCssClipFixedPosition() { return clear(m_cssClipFixedPosition); }
163 m_svgLocalToBorderBoxTransform = nullptr; 164 // True if an existing property was deleted, false otherwise.
165 bool clearInnerBorderRadiusClip() { return clear(m_innerBorderRadiusClip); }
166 // True if an existing property was deleted, false otherwise.
167 bool clearOverflowClip() { return clear(m_overflowClip); }
168 // True if an existing property was deleted, false otherwise.
169 bool clearPerspective() { return clear(m_perspective); }
170 // True if an existing property was deleted, false otherwise.
171 bool clearSvgLocalToBorderBoxTransform() {
172 return clear(m_svgLocalToBorderBoxTransform);
164 } 173 }
165 void clearScrollTranslation() { m_scrollTranslation = nullptr; } 174 // True if an existing property was deleted, false otherwise.
166 void clearScrollbarPaintOffset() { m_scrollbarPaintOffset = nullptr; } 175 bool clearScrollTranslation() { return clear(m_scrollTranslation); }
167 void clearScroll() { m_scroll = nullptr; } 176 // True if an existing property was deleted, false otherwise.
177 bool clearScrollbarPaintOffset() { return clear(m_scrollbarPaintOffset); }
178 // True if an existing property was deleted, false otherwise.
179 bool clearScroll() { return clear(m_scroll); }
168 180
181 // True if a new property was created, false if an existing one was updated.
169 template <typename... Args> 182 template <typename... Args>
170 void updatePaintOffsetTranslation(Args&&... args) { 183 bool updatePaintOffsetTranslation(Args&&... args) {
171 updateProperty(m_paintOffsetTranslation, std::forward<Args>(args)...); 184 return update(m_paintOffsetTranslation, std::forward<Args>(args)...);
172 } 185 }
186 // True if a new property was created, false if an existing one was updated.
173 template <typename... Args> 187 template <typename... Args>
174 void updateTransform(Args&&... args) { 188 bool updateTransform(Args&&... args) {
175 updateProperty(m_transform, std::forward<Args>(args)...); 189 return update(m_transform, std::forward<Args>(args)...);
176 } 190 }
191 // True if a new property was created, false if an existing one was updated.
177 template <typename... Args> 192 template <typename... Args>
178 void updatePerspective(Args&&... args) { 193 bool updatePerspective(Args&&... args) {
179 updateProperty(m_perspective, std::forward<Args>(args)...); 194 return update(m_perspective, std::forward<Args>(args)...);
180 } 195 }
196 // True if a new property was created, false if an existing one was updated.
181 template <typename... Args> 197 template <typename... Args>
182 void updateSvgLocalToBorderBoxTransform(Args&&... args) { 198 bool updateSvgLocalToBorderBoxTransform(Args&&... args) {
183 DCHECK(!scrollTranslation()) << "SVG elements cannot scroll so there " 199 DCHECK(!scrollTranslation()) << "SVG elements cannot scroll so there "
184 "should never be both a scroll translation " 200 "should never be both a scroll translation "
185 "and an SVG local to border box transform."; 201 "and an SVG local to border box transform.";
186 updateProperty(m_svgLocalToBorderBoxTransform, std::forward<Args>(args)...); 202 return update(m_svgLocalToBorderBoxTransform, std::forward<Args>(args)...);
187 } 203 }
204 // True if a new property was created, false if an existing one was updated.
188 template <typename... Args> 205 template <typename... Args>
189 void updateScrollTranslation(Args&&... args) { 206 bool updateScrollTranslation(Args&&... args) {
190 DCHECK(!svgLocalToBorderBoxTransform()) 207 DCHECK(!svgLocalToBorderBoxTransform())
191 << "SVG elements cannot scroll so there should never be both a scroll " 208 << "SVG elements cannot scroll so there should never be both a scroll "
192 "translation and an SVG local to border box transform."; 209 "translation and an SVG local to border box transform.";
193 updateProperty(m_scrollTranslation, std::forward<Args>(args)...); 210 return update(m_scrollTranslation, std::forward<Args>(args)...);
194 } 211 }
212 // True if a new property was created, false if an existing one was updated.
195 template <typename... Args> 213 template <typename... Args>
196 void updateScrollbarPaintOffset(Args&&... args) { 214 bool updateScrollbarPaintOffset(Args&&... args) {
197 updateProperty(m_scrollbarPaintOffset, std::forward<Args>(args)...); 215 return update(m_scrollbarPaintOffset, std::forward<Args>(args)...);
198 } 216 }
217 // True if a new property was created, false if an existing one was updated.
199 template <typename... Args> 218 template <typename... Args>
200 void updateScroll(Args&&... args) { 219 bool updateScroll(Args&&... args) {
201 updateProperty(m_scroll, std::forward<Args>(args)...); 220 return update(m_scroll, std::forward<Args>(args)...);
202 } 221 }
222 // True if a new property was created, false if an existing one was updated.
203 template <typename... Args> 223 template <typename... Args>
204 void updateEffect(Args&&... args) { 224 bool updateEffect(Args&&... args) {
205 updateProperty(m_effect, std::forward<Args>(args)...); 225 return update(m_effect, std::forward<Args>(args)...);
206 } 226 }
227 // True if a new property was created, false if an existing one was updated.
207 template <typename... Args> 228 template <typename... Args>
208 void updateCssClip(Args&&... args) { 229 bool updateCssClip(Args&&... args) {
209 updateProperty(m_cssClip, std::forward<Args>(args)...); 230 return update(m_cssClip, std::forward<Args>(args)...);
210 } 231 }
232 // True if a new property was created, false if an existing one was updated.
211 template <typename... Args> 233 template <typename... Args>
212 void updateCssClipFixedPosition(Args&&... args) { 234 bool updateCssClipFixedPosition(Args&&... args) {
213 updateProperty(m_cssClipFixedPosition, std::forward<Args>(args)...); 235 return update(m_cssClipFixedPosition, std::forward<Args>(args)...);
214 } 236 }
237 // True if a new property was created, false if an existing one was updated.
215 template <typename... Args> 238 template <typename... Args>
216 void updateInnerBorderRadiusClip(Args&&... args) { 239 bool updateInnerBorderRadiusClip(Args&&... args) {
217 updateProperty(m_innerBorderRadiusClip, std::forward<Args>(args)...); 240 return update(m_innerBorderRadiusClip, std::forward<Args>(args)...);
218 } 241 }
242 // True if a new property was created, false if an existing one was updated.
219 template <typename... Args> 243 template <typename... Args>
220 void updateOverflowClip(Args&&... args) { 244 bool updateOverflowClip(Args&&... args) {
221 updateProperty(m_overflowClip, std::forward<Args>(args)...); 245 return update(m_overflowClip, std::forward<Args>(args)...);
222 } 246 }
223 247
224 #if DCHECK_IS_ON() 248 #if DCHECK_IS_ON()
225 // Used by FindPropertiesNeedingUpdate.h for recording the current properties. 249 // Used by FindPropertiesNeedingUpdate.h for recording the current properties.
226 std::unique_ptr<ObjectPaintProperties> clone() const { 250 std::unique_ptr<ObjectPaintProperties> clone() const {
227 std::unique_ptr<ObjectPaintProperties> cloned = create(); 251 std::unique_ptr<ObjectPaintProperties> cloned = create();
228 if (m_paintOffsetTranslation) 252 if (m_paintOffsetTranslation)
229 cloned->m_paintOffsetTranslation = m_paintOffsetTranslation->clone(); 253 cloned->m_paintOffsetTranslation = m_paintOffsetTranslation->clone();
230 if (m_transform) 254 if (m_transform)
231 cloned->m_transform = m_transform->clone(); 255 cloned->m_transform = m_transform->clone();
(...skipping 27 matching lines...) Expand all
259 PropertyTreeState(state.transform(), state.clip(), state.effect(), 283 PropertyTreeState(state.transform(), state.clip(), state.effect(),
260 state.scroll()))); 284 state.scroll())));
261 } 285 }
262 return cloned; 286 return cloned;
263 } 287 }
264 #endif 288 #endif
265 289
266 private: 290 private:
267 ObjectPaintProperties() {} 291 ObjectPaintProperties() {}
268 292
293 // True if an existing property was deleted, false otherwise.
294 template <typename PaintPropertyNode>
295 bool clear(RefPtr<PaintPropertyNode>& field) {
296 if (field) {
297 field = nullptr;
298 return true;
299 }
300 return false;
301 }
302
303 // True if a new property was created, false if an existing one was updated.
269 template <typename PaintPropertyNode, typename... Args> 304 template <typename PaintPropertyNode, typename... Args>
270 void updateProperty(RefPtr<PaintPropertyNode>& field, Args&&... args) { 305 bool update(RefPtr<PaintPropertyNode>& field, Args&&... args) {
271 if (field) 306 if (field) {
272 field->update(std::forward<Args>(args)...); 307 field->update(std::forward<Args>(args)...);
273 else 308 return false;
274 field = PaintPropertyNode::create(std::forward<Args>(args)...); 309 }
310 field = PaintPropertyNode::create(std::forward<Args>(args)...);
311 return true;
275 } 312 }
276 313
277 RefPtr<TransformPaintPropertyNode> m_paintOffsetTranslation; 314 RefPtr<TransformPaintPropertyNode> m_paintOffsetTranslation;
278 RefPtr<TransformPaintPropertyNode> m_transform; 315 RefPtr<TransformPaintPropertyNode> m_transform;
279 RefPtr<EffectPaintPropertyNode> m_effect; 316 RefPtr<EffectPaintPropertyNode> m_effect;
280 RefPtr<ClipPaintPropertyNode> m_cssClip; 317 RefPtr<ClipPaintPropertyNode> m_cssClip;
281 RefPtr<ClipPaintPropertyNode> m_cssClipFixedPosition; 318 RefPtr<ClipPaintPropertyNode> m_cssClipFixedPosition;
282 RefPtr<ClipPaintPropertyNode> m_innerBorderRadiusClip; 319 RefPtr<ClipPaintPropertyNode> m_innerBorderRadiusClip;
283 RefPtr<ClipPaintPropertyNode> m_overflowClip; 320 RefPtr<ClipPaintPropertyNode> m_overflowClip;
284 RefPtr<TransformPaintPropertyNode> m_perspective; 321 RefPtr<TransformPaintPropertyNode> m_perspective;
285 // TODO(pdr): Only LayoutSVGRoot needs this and it should be moved there. 322 // TODO(pdr): Only LayoutSVGRoot needs this and it should be moved there.
286 RefPtr<TransformPaintPropertyNode> m_svgLocalToBorderBoxTransform; 323 RefPtr<TransformPaintPropertyNode> m_svgLocalToBorderBoxTransform;
287 RefPtr<TransformPaintPropertyNode> m_scrollTranslation; 324 RefPtr<TransformPaintPropertyNode> m_scrollTranslation;
288 RefPtr<TransformPaintPropertyNode> m_scrollbarPaintOffset; 325 RefPtr<TransformPaintPropertyNode> m_scrollbarPaintOffset;
289 RefPtr<ScrollPaintPropertyNode> m_scroll; 326 RefPtr<ScrollPaintPropertyNode> m_scroll;
290 327
291 std::unique_ptr<PropertyTreeStateWithOffset> m_localBorderBoxProperties; 328 std::unique_ptr<PropertyTreeStateWithOffset> m_localBorderBoxProperties;
292 }; 329 };
293 330
294 } // namespace blink 331 } // namespace blink
295 332
296 #endif // ObjectPaintProperties_h 333 #endif // ObjectPaintProperties_h
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698