| Index: Source/core/css/invalidation/InvalidationSet.cpp
|
| diff --git a/Source/core/css/invalidation/DescendantInvalidationSet.cpp b/Source/core/css/invalidation/InvalidationSet.cpp
|
| similarity index 82%
|
| rename from Source/core/css/invalidation/DescendantInvalidationSet.cpp
|
| rename to Source/core/css/invalidation/InvalidationSet.cpp
|
| index 6b4a355730a5dd2e354e25ec86e423c602ad7d7d..e25afcacc468edcf13f44cd61c3071c16af7f467 100644
|
| --- a/Source/core/css/invalidation/DescendantInvalidationSet.cpp
|
| +++ b/Source/core/css/invalidation/InvalidationSet.cpp
|
| @@ -29,7 +29,7 @@
|
| */
|
|
|
| #include "config.h"
|
| -#include "core/css/invalidation/DescendantInvalidationSet.h"
|
| +#include "core/css/invalidation/InvalidationSet.h"
|
|
|
| #include "core/css/resolver/StyleResolver.h"
|
| #include "core/dom/Element.h"
|
| @@ -46,20 +46,22 @@ static const unsigned char* s_tracingEnabled = nullptr;
|
| if (UNLIKELY(*s_tracingEnabled)) \
|
| TRACE_STYLE_INVALIDATOR_INVALIDATION_SELECTORPART(element, reason, invalidationSet, singleSelectorPart);
|
|
|
| -void DescendantInvalidationSet::cacheTracingFlag()
|
| +void InvalidationSet::cacheTracingFlag()
|
| {
|
| s_tracingEnabled = TRACE_EVENT_API_GET_CATEGORY_ENABLED(TRACE_DISABLED_BY_DEFAULT("devtools.timeline.invalidationTracking"));
|
| }
|
|
|
| -DescendantInvalidationSet::DescendantInvalidationSet()
|
| - : m_allDescendantsMightBeInvalid(false)
|
| +InvalidationSet::InvalidationSet()
|
| + : m_maxDirectAdjacentSelectors(1)
|
| + , m_appliesDirectly(false)
|
| + , m_allDescendantsMightBeInvalid(false)
|
| , m_customPseudoInvalid(false)
|
| , m_treeBoundaryCrossing(false)
|
| , m_insertionPointCrossing(false)
|
| {
|
| }
|
|
|
| -bool DescendantInvalidationSet::invalidatesElement(Element& element) const
|
| +bool InvalidationSet::invalidatesElement(Element& element) const
|
| {
|
| if (m_allDescendantsMightBeInvalid)
|
| return true;
|
| @@ -96,8 +98,16 @@ bool DescendantInvalidationSet::invalidatesElement(Element& element) const
|
| return false;
|
| }
|
|
|
| -void DescendantInvalidationSet::combine(const DescendantInvalidationSet& other)
|
| +void InvalidationSet::combine(const InvalidationSet& other)
|
| {
|
| + m_maxDirectAdjacentSelectors = std::max(m_maxDirectAdjacentSelectors, other.m_maxDirectAdjacentSelectors);
|
| +
|
| + if (other.descendants())
|
| + ensureInvalidationSet().combine(*other.descendants());
|
| +
|
| + if (other.appliesDirectly())
|
| + setAppliesDirectly();
|
| +
|
| // No longer bother combining data structures, since the whole subtree is deemed invalid.
|
| if (wholeSubtreeInvalid())
|
| return;
|
| @@ -137,63 +147,71 @@ void DescendantInvalidationSet::combine(const DescendantInvalidationSet& other)
|
| }
|
| }
|
|
|
| -WillBeHeapHashSet<AtomicString>& DescendantInvalidationSet::ensureClassSet()
|
| +WillBeHeapHashSet<AtomicString>& InvalidationSet::ensureClassSet()
|
| {
|
| if (!m_classes)
|
| m_classes = adoptPtrWillBeNoop(new WillBeHeapHashSet<AtomicString>);
|
| return *m_classes;
|
| }
|
|
|
| -WillBeHeapHashSet<AtomicString>& DescendantInvalidationSet::ensureIdSet()
|
| +WillBeHeapHashSet<AtomicString>& InvalidationSet::ensureIdSet()
|
| {
|
| if (!m_ids)
|
| m_ids = adoptPtrWillBeNoop(new WillBeHeapHashSet<AtomicString>);
|
| return *m_ids;
|
| }
|
|
|
| -WillBeHeapHashSet<AtomicString>& DescendantInvalidationSet::ensureTagNameSet()
|
| +WillBeHeapHashSet<AtomicString>& InvalidationSet::ensureTagNameSet()
|
| {
|
| if (!m_tagNames)
|
| m_tagNames = adoptPtrWillBeNoop(new WillBeHeapHashSet<AtomicString>);
|
| return *m_tagNames;
|
| }
|
|
|
| -WillBeHeapHashSet<AtomicString>& DescendantInvalidationSet::ensureAttributeSet()
|
| +WillBeHeapHashSet<AtomicString>& InvalidationSet::ensureAttributeSet()
|
| {
|
| if (!m_attributes)
|
| m_attributes = adoptPtrWillBeNoop(new WillBeHeapHashSet<AtomicString>);
|
| return *m_attributes;
|
| }
|
|
|
| -void DescendantInvalidationSet::addClass(const AtomicString& className)
|
| +InvalidationSet& InvalidationSet::ensureInvalidationSet()
|
| +{
|
| + if (!m_descendantInvalidationSet)
|
| + m_descendantInvalidationSet = InvalidationSet::create();
|
| +
|
| + return *m_descendantInvalidationSet;
|
| +}
|
| +
|
| +void InvalidationSet::addClass(const AtomicString& className)
|
| {
|
| if (wholeSubtreeInvalid())
|
| return;
|
| ensureClassSet().add(className);
|
| }
|
|
|
| -void DescendantInvalidationSet::addId(const AtomicString& id)
|
| +void InvalidationSet::addId(const AtomicString& id)
|
| {
|
| if (wholeSubtreeInvalid())
|
| return;
|
| ensureIdSet().add(id);
|
| }
|
|
|
| -void DescendantInvalidationSet::addTagName(const AtomicString& tagName)
|
| +void InvalidationSet::addTagName(const AtomicString& tagName)
|
| {
|
| if (wholeSubtreeInvalid())
|
| return;
|
| ensureTagNameSet().add(tagName);
|
| }
|
|
|
| -void DescendantInvalidationSet::addAttribute(const AtomicString& attribute)
|
| +void InvalidationSet::addAttribute(const AtomicString& attribute)
|
| {
|
| if (wholeSubtreeInvalid())
|
| return;
|
| ensureAttributeSet().add(attribute);
|
| }
|
|
|
| -void DescendantInvalidationSet::setWholeSubtreeInvalid()
|
| +void InvalidationSet::setWholeSubtreeInvalid()
|
| {
|
| if (m_allDescendantsMightBeInvalid)
|
| return;
|
| @@ -208,17 +226,18 @@ void DescendantInvalidationSet::setWholeSubtreeInvalid()
|
| m_attributes = nullptr;
|
| }
|
|
|
| -DEFINE_TRACE(DescendantInvalidationSet)
|
| +DEFINE_TRACE(InvalidationSet)
|
| {
|
| #if ENABLE(OILPAN)
|
| visitor->trace(m_classes);
|
| visitor->trace(m_ids);
|
| visitor->trace(m_tagNames);
|
| visitor->trace(m_attributes);
|
| + visitor->trace(m_descendantInvalidationSet);
|
| #endif
|
| }
|
|
|
| -void DescendantInvalidationSet::toTracedValue(TracedValue* value) const
|
| +void InvalidationSet::toTracedValue(TracedValue* value) const
|
| {
|
| value->beginDictionary();
|
|
|
| @@ -265,10 +284,10 @@ void DescendantInvalidationSet::toTracedValue(TracedValue* value) const
|
| }
|
|
|
| #ifndef NDEBUG
|
| -void DescendantInvalidationSet::show() const
|
| +void InvalidationSet::show() const
|
| {
|
| RefPtr<TracedValue> value = TracedValue::create();
|
| - value->beginArray("DescendantInvalidationSet");
|
| + value->beginArray("InvalidationSet");
|
| toTracedValue(value.get());
|
| value->endArray();
|
| fprintf(stderr, "%s\n", value->asTraceFormat().ascii().data());
|
|
|