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

Unified Diff: third_party/WebKit/Source/core/style/ComputedStyle.cpp

Issue 2117143003: Add a fast-path for independent inherited properties (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@computedstyle_cleanup_rename_final_member_fields
Patch Set: Review feedback Created 4 years, 5 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 side-by-side diff with in-line comments
Download patch
Index: third_party/WebKit/Source/core/style/ComputedStyle.cpp
diff --git a/third_party/WebKit/Source/core/style/ComputedStyle.cpp b/third_party/WebKit/Source/core/style/ComputedStyle.cpp
index 984ff42be192101a07c21c53955cd3c42a23b460..308fd1a45dd9154198195118f6e225e6dd825a83 100644
--- a/third_party/WebKit/Source/core/style/ComputedStyle.cpp
+++ b/third_party/WebKit/Source/core/style/ComputedStyle.cpp
@@ -64,6 +64,8 @@ struct SameSizeAsBorderValue {
static_assert(sizeof(BorderValue) == sizeof(SameSizeAsBorderValue), "BorderValue should stay small");
+// Since different compilers/architectures pack ComputedStyle differently,
+// re-create the same structure for an accurate size comparison.
struct SameSizeAsComputedStyle : public RefCounted<SameSizeAsComputedStyle> {
void* dataRefs[7];
void* ownPtrs[1];
@@ -197,8 +199,15 @@ StyleRecalcChange ComputedStyle::stylePropagationDiff(const ComputedStyle* oldSt
|| oldStyle->justifyItems() != newStyle->justifyItems()) // TODO (lajava): We must avoid this Reattach.
return Reattach;
- if (!oldStyle->inheritedEqual(*newStyle)
- || !oldStyle->loadingCustomFontsEqual(*newStyle))
+ bool independentEqual = oldStyle->independentInheritedEqual(*newStyle);
+ bool nonIndependentEqual = oldStyle->nonIndependentInheritedEqual(*newStyle);
+ if (!independentEqual || !nonIndependentEqual) {
+ if (nonIndependentEqual && !oldStyle->hasExplicitlyInheritedProperties())
+ return IndependentInherit;
+ return Inherit;
+ }
+
+ if (!oldStyle->loadingCustomFontsEqual(*newStyle))
return Inherit;
if (*oldStyle == *newStyle)
@@ -210,6 +219,15 @@ StyleRecalcChange ComputedStyle::stylePropagationDiff(const ComputedStyle* oldSt
return NoInherit;
}
+// TODO(sashab): Generate this function.
+void ComputedStyle::propagateIndependentInheritedProperties(const ComputedStyle& parentStyle)
+{
+ if (m_nonInheritedData.m_isPointerEventsInherited)
+ setPointerEvents(parentStyle.pointerEvents());
+ if (m_nonInheritedData.m_isVisibilityInherited)
+ setVisibility(parentStyle.visibility());
+}
+
ItemPosition ComputedStyle::resolveAlignment(const ComputedStyle& parentStyle, const ComputedStyle& childStyle, ItemPosition resolvedAutoPositionForLayoutObject)
{
// The auto keyword computes to the parent's align-items computed value, or to "stretch", if not set or "auto".
@@ -342,6 +360,11 @@ void ComputedStyle::copyNonInheritedFromCached(const ComputedStyle& other)
// m_nonInheritedData.m_affectedByDrag
// m_nonInheritedData.m_isLink
+ // Any properties that are inherited on a style are also inherited on elements
+ // that share this style.
+ m_nonInheritedData.m_isPointerEventsInherited = other.m_nonInheritedData.m_isPointerEventsInherited;
+ m_nonInheritedData.m_isVisibilityInherited = other.m_nonInheritedData.m_isVisibilityInherited;
+
if (m_svgStyle != other.m_svgStyle)
m_svgStyle.access()->copyNonInheritedFromCached(other.m_svgStyle.get());
DCHECK_EQ(zoom(), initialZoom());
@@ -421,7 +444,18 @@ void ComputedStyle::removeCachedPseudoStyle(PseudoId pid)
bool ComputedStyle::inheritedEqual(const ComputedStyle& other) const
{
- return m_inheritedData == other.m_inheritedData
+ return independentInheritedEqual(other)
+ && nonIndependentInheritedEqual(other);
+}
+
+bool ComputedStyle::independentInheritedEqual(const ComputedStyle& other) const
+{
+ return m_inheritedData.compareEqualIndependent(other.m_inheritedData);
+}
+
+bool ComputedStyle::nonIndependentInheritedEqual(const ComputedStyle& other) const
+{
+ return m_inheritedData.compareEqualNonIndependent(other.m_inheritedData)
&& m_styleInheritedData == other.m_styleInheritedData
&& m_svgStyle->inheritedEqual(*other.m_svgStyle)
&& m_rareInheritedData == other.m_rareInheritedData;
« no previous file with comments | « third_party/WebKit/Source/core/style/ComputedStyle.h ('k') | third_party/WebKit/Source/core/style/ComputedStyleConstants.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698