| Index: Source/core/css/invalidation/InvalidationSet.cpp
|
| diff --git a/Source/core/css/invalidation/InvalidationSet.cpp b/Source/core/css/invalidation/InvalidationSet.cpp
|
| index 617e9b974e5a946d7dfabd2307c2c5c4e39b0b1e..12378db45620517b96cf59ac8c01f7c7d1f2a6aa 100644
|
| --- a/Source/core/css/invalidation/InvalidationSet.cpp
|
| +++ b/Source/core/css/invalidation/InvalidationSet.cpp
|
| @@ -52,7 +52,9 @@ void InvalidationSet::cacheTracingFlag()
|
| }
|
|
|
| InvalidationSet::InvalidationSet()
|
| - : m_allDescendantsMightBeInvalid(false)
|
| + : m_maxDirectAdjacentSelectors(1)
|
| + , m_appliesDirectly(false)
|
| + , m_allDescendantsMightBeInvalid(false)
|
| , m_customPseudoInvalid(false)
|
| , m_treeBoundaryCrossing(false)
|
| , m_insertionPointCrossing(false)
|
| @@ -98,6 +100,14 @@ bool InvalidationSet::invalidatesElement(Element& element) const
|
|
|
| void InvalidationSet::combine(const InvalidationSet& other)
|
| {
|
| + m_maxDirectAdjacentSelectors = std::max(m_maxDirectAdjacentSelectors, other.m_maxDirectAdjacentSelectors);
|
| +
|
| + if (other.descendants())
|
| + ensureDescendantInvalidationSet().combine(*other.descendants());
|
| +
|
| + if (other.appliesDirectly())
|
| + setAppliesDirectly();
|
| +
|
| // No longer bother combining data structures, since the whole subtree is deemed invalid.
|
| if (wholeSubtreeInvalid())
|
| return;
|
| @@ -165,6 +175,14 @@ WillBeHeapHashSet<AtomicString>& InvalidationSet::ensureAttributeSet()
|
| return *m_attributes;
|
| }
|
|
|
| +InvalidationSet& InvalidationSet::ensureDescendantInvalidationSet()
|
| +{
|
| + if (!m_descendantInvalidationSet)
|
| + m_descendantInvalidationSet = InvalidationSet::create();
|
| +
|
| + return *m_descendantInvalidationSet;
|
| +}
|
| +
|
| void InvalidationSet::addClass(const AtomicString& className)
|
| {
|
| if (wholeSubtreeInvalid())
|
| @@ -215,6 +233,7 @@ DEFINE_TRACE(InvalidationSet)
|
| visitor->trace(m_ids);
|
| visitor->trace(m_tagNames);
|
| visitor->trace(m_attributes);
|
| + visitor->trace(m_descendantInvalidationSet);
|
| #endif
|
| }
|
|
|
|
|