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

Unified Diff: Source/core/css/RuleFeature.cpp

Issue 129633003: Add a first pass of a class descendant invalidator, and a containing RuleSetAnalyzer (Closed) Base URL: svn://svn.chromium.org/blink/trunk
Patch Set: Implement tree walk for descendant class invalidation. Created 6 years, 11 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
« no previous file with comments | « Source/core/css/RuleFeature.h ('k') | Source/core/css/RuleSet.cpp » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: Source/core/css/RuleFeature.cpp
diff --git a/Source/core/css/RuleFeature.cpp b/Source/core/css/RuleFeature.cpp
index 7c8f160ae43f4d7445289aeda1ee292c72301f55..9ef1f2f50c2a245db33575b9d81df539330383c7 100644
--- a/Source/core/css/RuleFeature.cpp
+++ b/Source/core/css/RuleFeature.cpp
@@ -35,13 +35,15 @@
namespace WebCore {
-void RuleFeatureSet::collectFeaturesFromSelector(const CSSSelector* selector)
+void RuleFeatureSet::collectFeaturesFromSelector(const CSSSelector* selector, HashSet<AtomicString>* classesInRulesArg)
{
if (selector->m_match == CSSSelector::Id)
idsInRules.add(selector->value());
- else if (selector->m_match == CSSSelector::Class)
+ else if (selector->m_match == CSSSelector::Class) {
classesInRules.add(selector->value());
- else if (selector->isAttributeSelector())
+ if (classesInRulesArg)
+ classesInRulesArg->add(selector->value());
+ } else if (selector->isAttributeSelector())
attrsInRules.add(selector->attribute().localName());
switch (selector->pseudoType()) {
case CSSSelector::PseudoFirstLine:
@@ -49,26 +51,29 @@ void RuleFeatureSet::collectFeaturesFromSelector(const CSSSelector* selector)
break;
break;
case CSSSelector::PseudoHost:
- collectFeaturesFromSelectorList(selector->selectorList());
+ collectFeaturesFromSelectorList(selector->selectorList(), classesInRulesArg);
break;
default:
break;
}
}
-void RuleFeatureSet::collectFeaturesFromSelectorList(const CSSSelectorList* selectorList)
+void RuleFeatureSet::collectFeaturesFromSelectorList(const CSSSelectorList* selectorList, HashSet<AtomicString>* classesInRulesArg)
{
if (!selectorList)
return;
for (const CSSSelector* selector = selectorList->first(); selector; selector = CSSSelectorList::next(selector)) {
for (const CSSSelector* subSelector = selector; subSelector; subSelector = subSelector->tagHistory())
- collectFeaturesFromSelector(subSelector);
+ collectFeaturesFromSelector(subSelector, classesInRulesArg);
}
}
void RuleFeatureSet::add(const RuleFeatureSet& other)
{
+ if (RuleSetAnalyzer* otherAnalyzer = other.getRuleSetAnalyzer())
+ ensureRuleSetAnalyzer()->combine(*otherAnalyzer);
+
HashSet<AtomicString>::const_iterator end = other.idsInRules.end();
for (HashSet<AtomicString>::const_iterator it = other.idsInRules.begin(); it != end; ++it)
idsInRules.add(*it);
@@ -95,4 +100,16 @@ void RuleFeatureSet::clear()
m_maxDirectAdjacentSelectors = 0;
}
+RuleSetAnalyzer* RuleFeatureSet::getRuleSetAnalyzer() const
+{
+ return ruleSetAnalyzer.get();
+}
+
+RuleSetAnalyzer* RuleFeatureSet::ensureRuleSetAnalyzer()
+{
+ if (!ruleSetAnalyzer)
+ ruleSetAnalyzer = RuleSetAnalyzer::create();
+ return ruleSetAnalyzer.get();
+}
+
} // namespace WebCore
« no previous file with comments | « Source/core/css/RuleFeature.h ('k') | Source/core/css/RuleSet.cpp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698