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

Unified Diff: Source/core/css/RuleSet.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: Removed extra line. 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
Index: Source/core/css/RuleSet.cpp
diff --git a/Source/core/css/RuleSet.cpp b/Source/core/css/RuleSet.cpp
index f7a0325f543146ce808b33b35e6a049e58a84012..deac311c0b86ecbfcb6b9d0d60f10e3c40bb6cf5 100644
--- a/Source/core/css/RuleSet.cpp
+++ b/Source/core/css/RuleSet.cpp
@@ -39,6 +39,7 @@
#include "core/css/SelectorFilter.h"
#include "core/css/StyleRuleImport.h"
#include "core/css/StyleSheetContents.h"
+#include "core/css/analyzer/RuleSetAnalyzer.h"
#include "core/html/track/TextTrackCue.h"
#include "platform/weborigin/SecurityOrigin.h"
@@ -207,36 +208,6 @@ RuleData::RuleData(StyleRule* rule, unsigned selectorIndex, unsigned position, A
SelectorFilter::collectIdentifierHashes(selector(), m_descendantSelectorIdentifierHashes, maximumIdentifierCount);
}
-static void collectFeaturesFromRuleData(RuleFeatureSet& features, const RuleData& ruleData)
-{
- bool foundSiblingSelector = false;
- unsigned maxDirectAdjacentSelectors = 0;
- for (const CSSSelector* selector = ruleData.selector(); selector; selector = selector->tagHistory()) {
- features.collectFeaturesFromSelector(selector);
-
- if (const CSSSelectorList* selectorList = selector->selectorList()) {
- for (const CSSSelector* subSelector = selectorList->first(); subSelector; subSelector = CSSSelectorList::next(subSelector)) {
- // FIXME: Shouldn't this be checking subSelector->isSiblingSelector()?
- if (!foundSiblingSelector && selector->isSiblingSelector())
- foundSiblingSelector = true;
- if (subSelector->isDirectAdjacentSelector())
- maxDirectAdjacentSelectors++;
- features.collectFeaturesFromSelector(subSelector);
- }
- } else {
- if (!foundSiblingSelector && selector->isSiblingSelector())
- foundSiblingSelector = true;
- if (selector->isDirectAdjacentSelector())
- maxDirectAdjacentSelectors++;
- }
- }
- features.setMaxDirectAdjacentSelectors(maxDirectAdjacentSelectors);
- if (foundSiblingSelector)
- features.siblingRules.append(RuleFeature(ruleData.rule(), ruleData.selectorIndex(), ruleData.hasDocumentSecurityOrigin()));
- if (ruleData.containsUncommonAttributeSelector())
- features.uncommonAttributeRules.append(RuleFeature(ruleData.rule(), ruleData.selectorIndex(), ruleData.hasDocumentSecurityOrigin()));
-}
-
void RuleSet::addToRuleSet(StringImpl* key, PendingRuleMap& map, const RuleData& ruleData)
{
if (!key)
@@ -299,7 +270,7 @@ bool RuleSet::findBestRuleSetAndAdd(const CSSSelector* component, RuleData& rule
void RuleSet::addRule(StyleRule* rule, unsigned selectorIndex, AddRuleFlags addRuleFlags)
{
RuleData ruleData(rule, selectorIndex, m_ruleCount++, addRuleFlags);
- collectFeaturesFromRuleData(m_features, ruleData);
+ m_features.ensureRuleSetAnalyzer()->collectFeaturesFromRuleData(m_features, ruleData);
if (!findBestRuleSetAndAdd(ruleData.selector(), ruleData)) {
// If we didn't find a specialized map to stick it in, file under universal rules.

Powered by Google App Engine
This is Rietveld 408576698