Index: Source/core/css/parser/BisonCSSParser-in.cpp |
diff --git a/Source/core/css/parser/BisonCSSParser-in.cpp b/Source/core/css/parser/BisonCSSParser-in.cpp |
index d1b1f92b29efc92d2ada5787aeeea6288682e3ef..37b8a723d1b0bca4f4af125b78eb1cb72bc9dade 100644 |
--- a/Source/core/css/parser/BisonCSSParser-in.cpp |
+++ b/Source/core/css/parser/BisonCSSParser-in.cpp |
@@ -1757,6 +1757,45 @@ StyleRuleKeyframes* BisonCSSParser::createKeyframesRule(const String& name, Pass |
return rulePtr; |
} |
+static void recordSelectorStats(const CSSParserContext& context, const CSSSelectorList& selectorList) |
+{ |
+ if (!context.useCounter()) |
+ return; |
+ |
+ for (const CSSSelector* selector = selectorList.first(); selector; selector = CSSSelectorList::next(*selector)) { |
+ for ( ; ; selector = selector->tagHistory()) { |
+ UseCounter::Feature feature = UseCounter::NumberOfFeatures; |
+ switch (selector->pseudoType()) { |
+ case CSSSelector::PseudoUnresolved: |
+ feature = UseCounter::CSSSelectorPseudoUnresolved; |
+ break; |
+ case CSSSelector::PseudoShadow: |
+ feature = UseCounter::CSSSelectorPseudoShadow; |
+ break; |
+ case CSSSelector::PseudoContent: |
+ feature = UseCounter::CSSSelectorPseudoContent; |
+ break; |
+ case CSSSelector::PseudoHost: |
+ feature = UseCounter::CSSSelectorPseudoHost; |
+ break; |
+ case CSSSelector::PseudoHostContext: |
+ feature = UseCounter::CSSSelectorPseudoHostContext; |
+ break; |
+ default: |
+ break; |
+ } |
+ if (feature != UseCounter::NumberOfFeatures) |
+ context.useCounter()->count(feature); |
+ if (selector->relation() == CSSSelector::ShadowDeep) |
kochi
2014/06/18 09:03:31
I noticed that some pseudo element can be combined
|
+ context.useCounter()->count(UseCounter::CSSDeepCombinator); |
+ if (selector->selectorList()) |
+ recordSelectorStats(context, *selector->selectorList()); |
+ if (selector->isLastInTagHistory()) |
esprehn
2014/06/18 11:13:25
I don't think you should need this check and break
kochi
2014/06/18 16:30:23
This was unintentionally tricky...
The |selector|
|
+ break; |
+ } |
+ } |
+} |
+ |
StyleRuleBase* BisonCSSParser::createStyleRule(Vector<OwnPtr<CSSParserSelector> >* selectors) |
{ |
StyleRule* result = 0; |
@@ -1767,6 +1806,7 @@ StyleRuleBase* BisonCSSParser::createStyleRule(Vector<OwnPtr<CSSParserSelector> |
rule->setProperties(createStylePropertySet()); |
result = rule.get(); |
m_parsedRules.append(rule.release()); |
+ recordSelectorStats(m_context, result->selectorList()); |
} |
clearProperties(); |
return result; |