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

Unified 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 side-by-side diff with in-line comments
Download patch
Index: third_party/WebKit/Source/core/paint/ObjectPaintProperties.h
diff --git a/third_party/WebKit/Source/core/paint/ObjectPaintProperties.h b/third_party/WebKit/Source/core/paint/ObjectPaintProperties.h
index 20e954906b13cfcedeb04616962ffe5eff21496e..ba7540160dcd65a9785e7d4eb5b2c6af630dbf29 100644
--- a/third_party/WebKit/Source/core/paint/ObjectPaintProperties.h
+++ b/third_party/WebKit/Source/core/paint/ObjectPaintProperties.h
@@ -142,6 +142,7 @@ class CORE_EXPORT ObjectPaintProperties {
paintOffset, PropertyTreeState(transform, clip, effect, scroll)));
}
}
+ void clearLocalBorderBoxProperties() { m_localBorderBoxProperties = nullptr; }
// This is the complete set of property nodes and paint offset that can be
// used to paint the contents of this object. It is similar to
@@ -150,75 +151,98 @@ class CORE_EXPORT ObjectPaintProperties {
// invalidation.
ObjectPaintProperties::PropertyTreeStateWithOffset contentsProperties() const;
- void clearPaintOffsetTranslation() { m_paintOffsetTranslation = nullptr; }
- void clearTransform() { m_transform = nullptr; }
- void clearEffect() { m_effect = nullptr; }
- void clearCssClip() { m_cssClip = nullptr; }
- void clearCssClipFixedPosition() { m_cssClipFixedPosition = nullptr; }
- void clearInnerBorderRadiusClip() { m_innerBorderRadiusClip = nullptr; }
- void clearOverflowClip() { m_overflowClip = nullptr; }
- void clearLocalBorderBoxProperties() { m_localBorderBoxProperties = nullptr; }
- void clearPerspective() { m_perspective = nullptr; }
- void clearSvgLocalToBorderBoxTransform() {
- m_svgLocalToBorderBoxTransform = nullptr;
+ // True if an existing property was deleted, false otherwise.
+ bool clearPaintOffsetTranslation() { return clear(m_paintOffsetTranslation); }
+ // True if an existing property was deleted, false otherwise.
+ bool clearTransform() { return clear(m_transform); }
+ // True if an existing property was deleted, false otherwise.
+ bool clearEffect() { return clear(m_effect); }
+ // True if an existing property was deleted, false otherwise.
+ bool clearCssClip() { return clear(m_cssClip); }
+ // True if an existing property was deleted, false otherwise.
+ bool clearCssClipFixedPosition() { return clear(m_cssClipFixedPosition); }
+ // True if an existing property was deleted, false otherwise.
+ bool clearInnerBorderRadiusClip() { return clear(m_innerBorderRadiusClip); }
+ // True if an existing property was deleted, false otherwise.
+ bool clearOverflowClip() { return clear(m_overflowClip); }
+ // True if an existing property was deleted, false otherwise.
+ bool clearPerspective() { return clear(m_perspective); }
+ // True if an existing property was deleted, false otherwise.
+ bool clearSvgLocalToBorderBoxTransform() {
+ return clear(m_svgLocalToBorderBoxTransform);
}
- void clearScrollTranslation() { m_scrollTranslation = nullptr; }
- void clearScrollbarPaintOffset() { m_scrollbarPaintOffset = nullptr; }
- void clearScroll() { m_scroll = nullptr; }
+ // True if an existing property was deleted, false otherwise.
+ bool clearScrollTranslation() { return clear(m_scrollTranslation); }
+ // True if an existing property was deleted, false otherwise.
+ bool clearScrollbarPaintOffset() { return clear(m_scrollbarPaintOffset); }
+ // True if an existing property was deleted, false otherwise.
+ bool clearScroll() { return clear(m_scroll); }
+ // True if a new property was created, false if an existing one was updated.
template <typename... Args>
- void updatePaintOffsetTranslation(Args&&... args) {
- updateProperty(m_paintOffsetTranslation, std::forward<Args>(args)...);
+ bool updatePaintOffsetTranslation(Args&&... args) {
+ return update(m_paintOffsetTranslation, std::forward<Args>(args)...);
}
+ // True if a new property was created, false if an existing one was updated.
template <typename... Args>
- void updateTransform(Args&&... args) {
- updateProperty(m_transform, std::forward<Args>(args)...);
+ bool updateTransform(Args&&... args) {
+ return update(m_transform, std::forward<Args>(args)...);
}
+ // True if a new property was created, false if an existing one was updated.
template <typename... Args>
- void updatePerspective(Args&&... args) {
- updateProperty(m_perspective, std::forward<Args>(args)...);
+ bool updatePerspective(Args&&... args) {
+ return update(m_perspective, std::forward<Args>(args)...);
}
+ // True if a new property was created, false if an existing one was updated.
template <typename... Args>
- void updateSvgLocalToBorderBoxTransform(Args&&... args) {
+ bool updateSvgLocalToBorderBoxTransform(Args&&... args) {
DCHECK(!scrollTranslation()) << "SVG elements cannot scroll so there "
"should never be both a scroll translation "
"and an SVG local to border box transform.";
- updateProperty(m_svgLocalToBorderBoxTransform, std::forward<Args>(args)...);
+ return update(m_svgLocalToBorderBoxTransform, std::forward<Args>(args)...);
}
+ // True if a new property was created, false if an existing one was updated.
template <typename... Args>
- void updateScrollTranslation(Args&&... args) {
+ bool updateScrollTranslation(Args&&... args) {
DCHECK(!svgLocalToBorderBoxTransform())
<< "SVG elements cannot scroll so there should never be both a scroll "
"translation and an SVG local to border box transform.";
- updateProperty(m_scrollTranslation, std::forward<Args>(args)...);
+ return update(m_scrollTranslation, std::forward<Args>(args)...);
}
+ // True if a new property was created, false if an existing one was updated.
template <typename... Args>
- void updateScrollbarPaintOffset(Args&&... args) {
- updateProperty(m_scrollbarPaintOffset, std::forward<Args>(args)...);
+ bool updateScrollbarPaintOffset(Args&&... args) {
+ return update(m_scrollbarPaintOffset, std::forward<Args>(args)...);
}
+ // True if a new property was created, false if an existing one was updated.
template <typename... Args>
- void updateScroll(Args&&... args) {
- updateProperty(m_scroll, std::forward<Args>(args)...);
+ bool updateScroll(Args&&... args) {
+ return update(m_scroll, std::forward<Args>(args)...);
}
+ // True if a new property was created, false if an existing one was updated.
template <typename... Args>
- void updateEffect(Args&&... args) {
- updateProperty(m_effect, std::forward<Args>(args)...);
+ bool updateEffect(Args&&... args) {
+ return update(m_effect, std::forward<Args>(args)...);
}
+ // True if a new property was created, false if an existing one was updated.
template <typename... Args>
- void updateCssClip(Args&&... args) {
- updateProperty(m_cssClip, std::forward<Args>(args)...);
+ bool updateCssClip(Args&&... args) {
+ return update(m_cssClip, std::forward<Args>(args)...);
}
+ // True if a new property was created, false if an existing one was updated.
template <typename... Args>
- void updateCssClipFixedPosition(Args&&... args) {
- updateProperty(m_cssClipFixedPosition, std::forward<Args>(args)...);
+ bool updateCssClipFixedPosition(Args&&... args) {
+ return update(m_cssClipFixedPosition, std::forward<Args>(args)...);
}
+ // True if a new property was created, false if an existing one was updated.
template <typename... Args>
- void updateInnerBorderRadiusClip(Args&&... args) {
- updateProperty(m_innerBorderRadiusClip, std::forward<Args>(args)...);
+ bool updateInnerBorderRadiusClip(Args&&... args) {
+ return update(m_innerBorderRadiusClip, std::forward<Args>(args)...);
}
+ // True if a new property was created, false if an existing one was updated.
template <typename... Args>
- void updateOverflowClip(Args&&... args) {
- updateProperty(m_overflowClip, std::forward<Args>(args)...);
+ bool updateOverflowClip(Args&&... args) {
+ return update(m_overflowClip, std::forward<Args>(args)...);
}
#if DCHECK_IS_ON()
@@ -266,12 +290,25 @@ class CORE_EXPORT ObjectPaintProperties {
private:
ObjectPaintProperties() {}
+ // True if an existing property was deleted, false otherwise.
+ template <typename PaintPropertyNode>
+ bool clear(RefPtr<PaintPropertyNode>& field) {
+ if (field) {
+ field = nullptr;
+ return true;
+ }
+ return false;
+ }
+
+ // True if a new property was created, false if an existing one was updated.
template <typename PaintPropertyNode, typename... Args>
- void updateProperty(RefPtr<PaintPropertyNode>& field, Args&&... args) {
- if (field)
+ bool update(RefPtr<PaintPropertyNode>& field, Args&&... args) {
+ if (field) {
field->update(std::forward<Args>(args)...);
- else
- field = PaintPropertyNode::create(std::forward<Args>(args)...);
+ return false;
+ }
+ field = PaintPropertyNode::create(std::forward<Args>(args)...);
+ return true;
}
RefPtr<TransformPaintPropertyNode> m_paintOffsetTranslation;

Powered by Google App Engine
This is Rietveld 408576698