Chromium Code Reviews| 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; |