Commit ad705780 authored by kochi@chromium.org's avatar kochi@chromium.org

Add UseCounter for web components related CSS selectors

This CL adds histogram statistics for the following
web components-related CSS selectors.

- :unresolved pseudo-class (for custom element)
- ::shadow pseudo element
- ::content pseudo element
- :host pseudo class
- :host-context() pseudo class
- /deep/ combinator

BUG=383749
TEST=open http://jsbin.com/bopezaso/2/edit, reload several times and see if FeatureObserver in chrome://histograms reflects it (number 465-470)

Review URL: https://codereview.chromium.org/339563004

git-svn-id: svn://svn.chromium.org/blink/trunk@176473 bbb929c8-8fbe-4397-9dbb-9b2b20218538
parent 885faa47
......@@ -1756,6 +1756,43 @@ 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 (const CSSSelector* current = selector; current ; current = current->tagHistory()) {
UseCounter::Feature feature = UseCounter::NumberOfFeatures;
switch (current->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 (current->relation() == CSSSelector::ShadowDeep)
context.useCounter()->count(UseCounter::CSSDeepCombinator);
if (current->selectorList())
recordSelectorStats(context, *current->selectorList());
}
}
}
StyleRuleBase* BisonCSSParser::createStyleRule(Vector<OwnPtr<CSSParserSelector> >* selectors)
{
StyleRule* result = 0;
......@@ -1766,6 +1803,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;
......
......@@ -463,6 +463,12 @@ public:
HTMLImportsAsyncAttribute = 463,
FontFaceSetReady = 464,
XMLHttpRequestSynchronous = 465,
CSSSelectorPseudoUnresolved = 466,
CSSSelectorPseudoShadow = 467,
CSSSelectorPseudoContent = 468,
CSSSelectorPseudoHost = 469,
CSSSelectorPseudoHostContext = 470,
CSSDeepCombinator = 471,
// Add new features immediately above this line. Don't change assigned
// numbers of any item, and don't reuse removed slots.
// Also, run update_use_counter_feature_enum.py in chromium/src/tools/metrics/histograms/
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment