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

Unified Diff: third_party/WebKit/Source/core/css/parser/CSSLazyParsingState.cpp

Issue 2533093002: [LazyParseCSS] Add histogram for rule usage % (Closed)
Patch Set: rebase Created 4 years 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: third_party/WebKit/Source/core/css/parser/CSSLazyParsingState.cpp
diff --git a/third_party/WebKit/Source/core/css/parser/CSSLazyParsingState.cpp b/third_party/WebKit/Source/core/css/parser/CSSLazyParsingState.cpp
index 8370f0a0dbd447696b93fc7dd2c55b6cb6698e6b..1a231c6dc85ded6e06f0492cf21242bf60b8b075 100644
--- a/third_party/WebKit/Source/core/css/parser/CSSLazyParsingState.cpp
+++ b/third_party/WebKit/Source/core/css/parser/CSSLazyParsingState.cpp
@@ -3,8 +3,10 @@
// found in the LICENSE file.
#include "core/css/parser/CSSLazyParsingState.h"
+#include "core/css/parser/CSSLazyPropertyParserImpl.h"
#include "core/css/parser/CSSParserTokenRange.h"
#include "core/frame/UseCounter.h"
+#include "platform/Histogram.h"
namespace blink {
@@ -15,7 +17,19 @@ CSSLazyParsingState::CSSLazyParsingState(const CSSParserContext& context,
: m_context(context),
m_escapedStrings(std::move(escapedStrings)),
m_sheetText(sheetText),
- m_owningContents(contents) {}
+ m_owningContents(contents),
+ m_parsedStyleRules(0),
+ m_totalStyleRules(0),
+ m_styleRulesNeededForNextMilestone(0),
+ m_usage(UsageGe0) {
+ recordUsageMetrics();
+}
+
+CSSLazyPropertyParserImpl* CSSLazyParsingState::createLazyParser(
+ const CSSParserTokenRange& block) {
+ ++m_totalStyleRules;
+ return new CSSLazyPropertyParserImpl(std::move(block), this);
+}
const CSSParserContext& CSSLazyParsingState::context() {
DCHECK(m_owningContents);
@@ -25,9 +39,18 @@ const CSSParserContext& CSSLazyParsingState::context() {
return m_context;
}
+void CSSLazyParsingState::countRuleParsed() {
+ ++m_parsedStyleRules;
+ while (m_parsedStyleRules > m_styleRulesNeededForNextMilestone) {
+ DCHECK_NE(UsageAll, m_usage);
+ ++m_usage;
+ recordUsageMetrics();
+ }
+}
+
bool CSSLazyParsingState::shouldLazilyParseProperties(
const CSSSelectorList& selectors,
- const CSSParserTokenRange& block) {
+ const CSSParserTokenRange& block) const {
// Simple heuristic for an empty block. Note that |block| here does not
// include {} brackets. We avoid lazy parsing empty blocks so we can avoid
// considering them when possible for matching. Lazy blocks must always be
@@ -53,4 +76,34 @@ bool CSSLazyParsingState::shouldLazilyParseProperties(
return true;
}
+void CSSLazyParsingState::recordUsageMetrics() {
+ DEFINE_STATIC_LOCAL(EnumerationHistogram, usageHistogram,
+ ("Style.LazyUsage.Percent", UsageLastValue));
+ switch (m_usage) {
+ case UsageGe0:
+ m_styleRulesNeededForNextMilestone = m_totalStyleRules * .1;
+ break;
+ case UsageGt10:
+ m_styleRulesNeededForNextMilestone = m_totalStyleRules * .25;
+ break;
+ case UsageGt25:
+ m_styleRulesNeededForNextMilestone = m_totalStyleRules * .5;
+ break;
+ case UsageGt50:
+ m_styleRulesNeededForNextMilestone = m_totalStyleRules * .75;
+ break;
+ case UsageGt75:
+ m_styleRulesNeededForNextMilestone = m_totalStyleRules * .9;
+ break;
+ case UsageGt90:
+ m_styleRulesNeededForNextMilestone = m_totalStyleRules - 1;
+ break;
+ case UsageAll:
+ m_styleRulesNeededForNextMilestone = m_totalStyleRules;
+ break;
+ }
+
+ usageHistogram.count(m_usage);
+}
+
} // namespace blink

Powered by Google App Engine
This is Rietveld 408576698