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

Unified Diff: third_party/WebKit/Source/core/frame/UseCounter.cpp

Issue 2023903003: [WIP] Add WebCore.UseCounter UMA to supercede FeatureObserver (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 4 years, 7 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: third_party/WebKit/Source/core/frame/UseCounter.cpp
diff --git a/third_party/WebKit/Source/core/frame/UseCounter.cpp b/third_party/WebKit/Source/core/frame/UseCounter.cpp
index f7795822618707a81251a9c02d3516ced8d92409..820dd15885b577e0aeb8d155bfb7d58a3cc21c0a 100644
--- a/third_party/WebKit/Source/core/frame/UseCounter.cpp
+++ b/third_party/WebKit/Source/core/frame/UseCounter.cpp
@@ -43,10 +43,8 @@ static int totalPagesMeasuredCSSSampleId() { return 1; }
int UseCounter::m_muteCount = 0;
-int UseCounter::mapCSSPropertyIdToCSSSampleIdForHistogram(int id)
+int UseCounter::mapCSSPropertyIdToCSSSampleIdForHistogram(CSSPropertyID cssPropertyID)
{
- CSSPropertyID cssPropertyID = static_cast<CSSPropertyID>(id);
-
switch (cssPropertyID) {
// Begin at 2, because 1 is reserved for totalPagesMeasuredCSSSampleId.
case CSSPropertyColor: return 2;
@@ -580,12 +578,17 @@ int UseCounter::mapCSSPropertyIdToCSSSampleIdForHistogram(int id)
return 0;
}
-
static int maximumCSSSampleId() { return 535; }
-static EnumerationHistogram& featureObserverHistogram()
+static EnumerationHistogram& useCounterHistogram()
{
- DEFINE_STATIC_LOCAL(EnumerationHistogram, histogram, ("WebCore.FeatureObserver", UseCounter::NumberOfFeatures));
+ DEFINE_STATIC_LOCAL(EnumerationHistogram, histogram, ("WebCore.UseCounter", UseCounter::NumberOfFeatures));
+ return histogram;
+}
+
+static EnumerationHistogram& CSSUseCounterHistogram()
+{
+ DEFINE_STATIC_LOCAL(EnumerationHistogram, histogram, ("WebCore.UseCounter.CSSProperties", maximumCSSSampleId()));
return histogram;
}
@@ -599,60 +602,6 @@ void UseCounter::unmuteForInspector()
UseCounter::m_muteCount--;
}
-UseCounter::UseCounter()
-{
- m_CSSFeatureBits.ensureSize(lastUnresolvedCSSProperty + 1);
- m_CSSFeatureBits.clearAll();
-}
-
-UseCounter::~UseCounter()
-{
- // We always log PageDestruction so that we have a scale for the rest of the features.
- featureObserverHistogram().count(PageDestruction);
-
- updateMeasurements();
-}
-
-void UseCounter::CountBits::updateMeasurements()
-{
- EnumerationHistogram& featureHistogram = featureObserverHistogram();
- for (unsigned i = 0; i < NumberOfFeatures; ++i) {
- if (m_bits.quickGet(i))
- featureHistogram.count(i);
- }
- // Clearing count bits is timing sensitive.
- m_bits.clearAll();
-}
-
-void UseCounter::updateMeasurements()
-{
- featureObserverHistogram().count(PageVisits);
- m_countBits.updateMeasurements();
-
- // FIXME: Sometimes this function is called more than once per page. The following
- // bool guards against incrementing the page count when there are no CSS
- // bits set. https://crbug.com/236262.
- DEFINE_STATIC_LOCAL(EnumerationHistogram, cssPropertiesHistogram, ("WebCore.FeatureObserver.CSSProperties", maximumCSSSampleId()));
- bool needsPagesMeasuredUpdate = false;
- for (int i = firstCSSProperty; i <= lastUnresolvedCSSProperty; ++i) {
- if (m_CSSFeatureBits.quickGet(i)) {
- int cssSampleId = mapCSSPropertyIdToCSSSampleIdForHistogram(i);
- cssPropertiesHistogram.count(cssSampleId);
- needsPagesMeasuredUpdate = true;
- }
- }
-
- if (needsPagesMeasuredUpdate)
- cssPropertiesHistogram.count(totalPagesMeasuredCSSSampleId());
-
- m_CSSFeatureBits.clearAll();
-}
-
-void UseCounter::didCommitLoad()
-{
- updateMeasurements();
-}
-
void UseCounter::count(const Frame* frame, Feature feature)
{
if (!frame)
@@ -683,9 +632,29 @@ bool UseCounter::isCounted(Document& document, Feature feature)
bool UseCounter::isCounted(CSSPropertyID unresolvedProperty)
{
- return m_CSSFeatureBits.quickGet(unresolvedProperty);
+ return m_CSSFeaturesReported.quickGet(unresolvedProperty);
}
+void UseCounter::didCommitLoad()
+{
+ m_featuresReported.clearAll();
+ useCounterHistogram().count(PageVisits);
dtapuska 2016/05/31 01:10:51 Are you explicitly counting here even though muted
+
+ m_CSSFeaturesReported.clearAll();
+ CSSUseCounterHistogram().count(totalPagesMeasuredCSSSampleId());
+}
+
+void UseCounter::recordMeasurement(Feature feature)
+{
+ if (UseCounter::m_muteCount)
+ return;
+
+ if (!m_featuresReported.quickGet(feature)) {
+ m_featuresReported.quickSet(feature);
+ useCounterHistogram().count(feature);
+ }
+ m_legacyCounter.recordMeasurement(feature);
+}
bool UseCounter::isCounted(Document& document, const String& string)
{
@@ -750,7 +719,11 @@ void UseCounter::count(CSSParserMode cssParserMode, CSSPropertyID feature)
if (!isUseCounterEnabledForMode(cssParserMode))
return;
- m_CSSFeatureBits.quickSet(feature);
+ if (!m_CSSFeaturesReported.quickGet(feature)) {
+ m_CSSFeaturesReported.quickSet(feature);
+ CSSUseCounterHistogram().count(mapCSSPropertyIdToCSSSampleIdForHistogram(feature));
+ }
+ m_legacyCounter.countCSS(feature);
}
void UseCounter::count(Feature feature)
@@ -782,4 +755,83 @@ UseCounter* UseCounter::getFrom(const StyleSheetContents* sheetContents)
return 0;
}
+/*
+ *
+ * LEGACY metrics support - WebCore.FeatureObserver is to be superceded by WebCore.UseCounter
+ *
+ */
+
+static EnumerationHistogram& featureObserverHistogram()
+{
+ DEFINE_STATIC_LOCAL(EnumerationHistogram, histogram, ("WebCore.FeatureObserver", UseCounter::NumberOfFeatures));
+ return histogram;
+}
+
+UseCounter::LegacyCounter::LegacyCounter()
+ : m_countBits(NumberOfFeatures)
+ , m_CSSFeatureBits(lastUnresolvedCSSProperty + 1)
+{
+}
+
+UseCounter::LegacyCounter::~LegacyCounter()
+{
+ // We always log PageDestruction so that we have a scale for the rest of the features.
+ featureObserverHistogram().count(PageDestruction);
+ updateMeasurements();
+}
+
+void UseCounter::LegacyCounter::recordMeasurement(Feature feature)
+{
+ DCHECK(feature != PageDestruction); // PageDestruction is reserved as a scaling factor.
+ DCHECK(feature < NumberOfFeatures);
+
+ m_countBits.quickSet(feature);
+}
+
+void UseCounter::LegacyCounter::updateMeasurements()
+{
+ EnumerationHistogram& featureHistogram = featureObserverHistogram();
+ featureHistogram.count(PageVisits);
+ for (unsigned i = 0; i < NumberOfFeatures; ++i) {
+ if (m_countBits.quickGet(i))
+ featureHistogram.count(i);
+ }
+ // Clearing count bits is timing sensitive.
+ m_countBits.clearAll();
+
+ // FIXME: Sometimes this function is called more than once per page. The following
+ // bool guards against incrementing the page count when there are no CSS
+ // bits set. https://crbug.com/236262.
+ DEFINE_STATIC_LOCAL(EnumerationHistogram, cssPropertiesHistogram, ("WebCore.FeatureObserver.CSSProperties", maximumCSSSampleId()));
+ bool needsPagesMeasuredUpdate = false;
+ for (int i = firstCSSProperty; i <= lastUnresolvedCSSProperty; ++i) {
+ if (m_CSSFeatureBits.quickGet(i)) {
+ int cssSampleId = mapCSSPropertyIdToCSSSampleIdForHistogram(static_cast<CSSPropertyID>(i));
+ cssPropertiesHistogram.count(cssSampleId);
+ needsPagesMeasuredUpdate = true;
+ }
+ }
+
+ if (needsPagesMeasuredUpdate)
+ cssPropertiesHistogram.count(totalPagesMeasuredCSSSampleId());
+
+ m_CSSFeatureBits.clearAll();
+}
+
+bool UseCounter::LegacyCounter::hasRecordedMeasurement(Feature feature) const
+{
+ if (UseCounter::m_muteCount)
+ return false;
+ DCHECK(feature != PageDestruction); // PageDestruction is reserved as a scaling factor.
+ DCHECK(feature < NumberOfFeatures);
+
+ return m_countBits.quickGet(feature);
+}
+
+void UseCounter::LegacyCounter::countCSS(CSSPropertyID feature)
+{
+ m_CSSFeatureBits.quickSet(feature);
+}
+
+
} // namespace blink

Powered by Google App Engine
This is Rietveld 408576698