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

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

Issue 2290733002: Add new UseCounter metric (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Make diff prettier Created 4 years, 3 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/UseCounterTest.cpp
diff --git a/third_party/WebKit/Source/core/frame/UseCounterTest.cpp b/third_party/WebKit/Source/core/frame/UseCounterTest.cpp
index a982bf4eec6f286f965f353aef137dca11511f4e..041d24b5f59eaf7e99e3c227b9e8fe21554ebdf5 100644
--- a/third_party/WebKit/Source/core/frame/UseCounterTest.cpp
+++ b/third_party/WebKit/Source/core/frame/UseCounterTest.cpp
@@ -6,81 +6,172 @@
#include "core/frame/FrameHost.h"
#include "core/frame/UseCounter.h"
#include "core/testing/DummyPageHolder.h"
+#include "platform/testing/HistogramTester.h"
#include "testing/gtest/include/gtest/gtest.h"
-namespace blink {
-
-class UseCounterTest : public ::testing::Test {
-protected:
- bool hasRecordedMeasurement(const UseCounter& useCounter, UseCounter::Feature feature)
- {
- return useCounter.hasRecordedMeasurement(feature);
- }
+namespace {
+// Note that the new histogram names will change once the semantics stabilize;
+const char* const kFeaturesHistogramName = "WebCore.UseCounter_TEST.Features";
+const char* const kCSSHistogramName = "WebCore.UseCounter_TEST.CSSProperties";
+const char* const kLegacyFeaturesHistogramName = "WebCore.FeatureObserver";
+const char* const kLegacyCSSHistogramName = "WebCore.FeatureObserver.CSSProperties";
+}
- void recordMeasurement(UseCounter& useCounter, UseCounter::Feature feature)
- {
- useCounter.recordMeasurement(feature);
- }
-};
+namespace blink {
-TEST_F(UseCounterTest, RecordingMeasurements)
+TEST(UseCounterTest, RecordingFeatures)
{
UseCounter useCounter;
- for (unsigned feature = 0; feature < UseCounter::NumberOfFeatures; feature++) {
- if (feature != UseCounter::Feature::PageDestruction) {
- EXPECT_FALSE(hasRecordedMeasurement(useCounter, static_cast<UseCounter::Feature>(feature)));
- recordMeasurement(useCounter, static_cast<UseCounter::Feature>(feature));
- EXPECT_TRUE(hasRecordedMeasurement(useCounter, static_cast<UseCounter::Feature>(feature)));
- }
- }
+ HistogramTester histogramTester;
+
+ // Test recording a single (arbitrary) counter
+ EXPECT_FALSE(useCounter.hasRecordedMeasurement(UseCounter::Fetch));
+ useCounter.recordMeasurement(UseCounter::Fetch);
+ EXPECT_TRUE(useCounter.hasRecordedMeasurement(UseCounter::Fetch));
+ histogramTester.expectUniqueSample(kFeaturesHistogramName, UseCounter::Fetch, 1);
+ histogramTester.expectTotalCount(kLegacyFeaturesHistogramName, 0);
+
+ // Test that repeated measurements have no effect
+ useCounter.recordMeasurement(UseCounter::Fetch);
+ histogramTester.expectUniqueSample(kFeaturesHistogramName, UseCounter::Fetch, 1);
+ histogramTester.expectTotalCount(kLegacyFeaturesHistogramName, 0);
+
+ // Test recording a different sample
+ EXPECT_FALSE(useCounter.hasRecordedMeasurement(UseCounter::FetchBodyStream));
+ useCounter.recordMeasurement(UseCounter::FetchBodyStream);
+ EXPECT_TRUE(useCounter.hasRecordedMeasurement(UseCounter::FetchBodyStream));
+ histogramTester.expectBucketCount(kFeaturesHistogramName, UseCounter::Fetch, 1);
+ histogramTester.expectBucketCount(kFeaturesHistogramName, UseCounter::FetchBodyStream, 1);
+ histogramTester.expectTotalCount(kFeaturesHistogramName, 2);
+ histogramTester.expectTotalCount(kLegacyFeaturesHistogramName, 0);
+
+ // Test the impact of page load on the new histogram
+ useCounter.didCommitLoad();
+ histogramTester.expectBucketCount(kFeaturesHistogramName, UseCounter::Fetch, 1);
+ histogramTester.expectBucketCount(kFeaturesHistogramName, UseCounter::FetchBodyStream, 1);
+ histogramTester.expectBucketCount(kFeaturesHistogramName, UseCounter::PageVisits, 1);
+ histogramTester.expectTotalCount(kFeaturesHistogramName, 3);
+
+ // And verify the legacy histogram now looks the same
+ histogramTester.expectBucketCount(kLegacyFeaturesHistogramName, UseCounter::Fetch, 1);
+ histogramTester.expectBucketCount(kLegacyFeaturesHistogramName, UseCounter::FetchBodyStream, 1);
+ histogramTester.expectBucketCount(kLegacyFeaturesHistogramName, UseCounter::PageVisits, 1);
+ histogramTester.expectTotalCount(kLegacyFeaturesHistogramName, 3);
+
+ // Now a repeat measurement should get recorded again, exactly once
+ EXPECT_FALSE(useCounter.hasRecordedMeasurement(UseCounter::Fetch));
+ useCounter.recordMeasurement(UseCounter::Fetch);
+ useCounter.recordMeasurement(UseCounter::Fetch);
+ EXPECT_TRUE(useCounter.hasRecordedMeasurement(UseCounter::Fetch));
+ histogramTester.expectBucketCount(kFeaturesHistogramName, UseCounter::Fetch, 2);
+ histogramTester.expectTotalCount(kFeaturesHistogramName, 4);
+
+ // And on the next page load, the legacy histogram will again be updated
+ useCounter.didCommitLoad();
+ histogramTester.expectBucketCount(kLegacyFeaturesHistogramName, UseCounter::Fetch, 2);
+ histogramTester.expectBucketCount(kLegacyFeaturesHistogramName, UseCounter::FetchBodyStream, 1);
+ histogramTester.expectBucketCount(kLegacyFeaturesHistogramName, UseCounter::PageVisits, 2);
+ histogramTester.expectTotalCount(kLegacyFeaturesHistogramName, 5);
}
-TEST_F(UseCounterTest, MultipleMeasurements)
+TEST(UseCounterTest, RecordingCSSProperties)
{
UseCounter useCounter;
- for (unsigned feature = 0; feature < UseCounter::NumberOfFeatures; feature++) {
- if (feature != UseCounter::Feature::PageDestruction) {
- recordMeasurement(useCounter, static_cast<UseCounter::Feature>(feature));
- recordMeasurement(useCounter, static_cast<UseCounter::Feature>(feature));
- EXPECT_TRUE(hasRecordedMeasurement(useCounter, static_cast<UseCounter::Feature>(feature)));
- }
- }
+ HistogramTester histogramTester;
+
+ // Test recording a single (arbitrary) property
+ EXPECT_FALSE(useCounter.isCounted(CSSPropertyFont));
+ useCounter.count(HTMLStandardMode, CSSPropertyFont);
+ EXPECT_TRUE(useCounter.isCounted(CSSPropertyFont));
+ histogramTester.expectUniqueSample(kCSSHistogramName, UseCounter::mapCSSPropertyIdToCSSSampleIdForHistogram(CSSPropertyFont), 1);
+ histogramTester.expectTotalCount(kLegacyCSSHistogramName, 0);
+
+ // Test that repeated measurements have no effect
+ useCounter.count(HTMLStandardMode, CSSPropertyFont);
+ histogramTester.expectUniqueSample(kCSSHistogramName, UseCounter::mapCSSPropertyIdToCSSSampleIdForHistogram(CSSPropertyFont), 1);
+ histogramTester.expectTotalCount(kLegacyCSSHistogramName, 0);
+
+ // Test recording a different sample
+ EXPECT_FALSE(useCounter.isCounted(CSSPropertyZoom));
+ useCounter.count(HTMLStandardMode, CSSPropertyZoom);
+ EXPECT_TRUE(useCounter.isCounted(CSSPropertyZoom));
+ histogramTester.expectBucketCount(kCSSHistogramName, UseCounter::mapCSSPropertyIdToCSSSampleIdForHistogram(CSSPropertyFont), 1);
+ histogramTester.expectBucketCount(kCSSHistogramName, UseCounter::mapCSSPropertyIdToCSSSampleIdForHistogram(CSSPropertyZoom), 1);
+ histogramTester.expectTotalCount(kCSSHistogramName, 2);
+ histogramTester.expectTotalCount(kLegacyCSSHistogramName, 0);
+
+ // Test the impact of page load on the new histogram
+ useCounter.didCommitLoad();
+ histogramTester.expectBucketCount(kCSSHistogramName, UseCounter::mapCSSPropertyIdToCSSSampleIdForHistogram(CSSPropertyFont), 1);
+ histogramTester.expectBucketCount(kCSSHistogramName, UseCounter::mapCSSPropertyIdToCSSSampleIdForHistogram(CSSPropertyZoom), 1);
+ histogramTester.expectBucketCount(kCSSHistogramName, 1, 1);
+ histogramTester.expectTotalCount(kCSSHistogramName, 3);
+
+ // And verify the legacy histogram now looks the same
+ histogramTester.expectBucketCount(kLegacyCSSHistogramName, UseCounter::mapCSSPropertyIdToCSSSampleIdForHistogram(CSSPropertyFont), 1);
+ histogramTester.expectBucketCount(kLegacyCSSHistogramName, UseCounter::mapCSSPropertyIdToCSSSampleIdForHistogram(CSSPropertyZoom), 1);
+ histogramTester.expectBucketCount(kLegacyCSSHistogramName, 1, 1);
+ histogramTester.expectTotalCount(kLegacyCSSHistogramName, 3);
+
+ // Now a repeat measurement should get recorded again, exactly once
+ EXPECT_FALSE(useCounter.isCounted(CSSPropertyFont));
+ useCounter.count(HTMLStandardMode, CSSPropertyFont);
+ useCounter.count(HTMLStandardMode, CSSPropertyFont);
+ EXPECT_TRUE(useCounter.isCounted(CSSPropertyFont));
+ histogramTester.expectBucketCount(kCSSHistogramName, UseCounter::mapCSSPropertyIdToCSSSampleIdForHistogram(CSSPropertyFont), 2);
+ histogramTester.expectTotalCount(kCSSHistogramName, 4);
+
+ // And on the next page load, the legacy histogram will again be updated
+ useCounter.didCommitLoad();
+ histogramTester.expectBucketCount(kLegacyCSSHistogramName, UseCounter::mapCSSPropertyIdToCSSSampleIdForHistogram(CSSPropertyFont), 2);
+ histogramTester.expectBucketCount(kLegacyCSSHistogramName, UseCounter::mapCSSPropertyIdToCSSSampleIdForHistogram(CSSPropertyZoom), 1);
+ histogramTester.expectBucketCount(kLegacyCSSHistogramName, 1, 2);
+ histogramTester.expectTotalCount(kLegacyCSSHistogramName, 5);
}
-TEST_F(UseCounterTest, InspectorDisablesMeasurement)
+TEST(UseCounterTest, InspectorDisablesMeasurement)
{
UseCounter useCounter;
+ HistogramTester histogramTester;
// The specific feature we use here isn't important.
UseCounter::Feature feature = UseCounter::Feature::SVGSMILElementInDocument;
CSSPropertyID property = CSSPropertyFontWeight;
CSSParserMode parserMode = HTMLStandardMode;
- EXPECT_FALSE(hasRecordedMeasurement(useCounter, feature));
+ EXPECT_FALSE(useCounter.hasRecordedMeasurement(feature));
useCounter.muteForInspector();
- recordMeasurement(useCounter, feature);
- EXPECT_FALSE(hasRecordedMeasurement(useCounter, feature));
+ useCounter.recordMeasurement(feature);
+ EXPECT_FALSE(useCounter.hasRecordedMeasurement(feature));
useCounter.count(parserMode, property);
EXPECT_FALSE(useCounter.isCounted(property));
+ histogramTester.expectTotalCount(kFeaturesHistogramName, 0);
+ histogramTester.expectTotalCount(kCSSHistogramName, 0);
useCounter.muteForInspector();
- recordMeasurement(useCounter, feature);
- EXPECT_FALSE(hasRecordedMeasurement(useCounter, feature));
+ useCounter.recordMeasurement(feature);
+ EXPECT_FALSE(useCounter.hasRecordedMeasurement(feature));
useCounter.count(parserMode, property);
EXPECT_FALSE(useCounter.isCounted(property));
+ histogramTester.expectTotalCount(kFeaturesHistogramName, 0);
+ histogramTester.expectTotalCount(kCSSHistogramName, 0);
useCounter.unmuteForInspector();
- recordMeasurement(useCounter, feature);
- EXPECT_FALSE(hasRecordedMeasurement(useCounter, feature));
+ useCounter.recordMeasurement(feature);
+ EXPECT_FALSE(useCounter.hasRecordedMeasurement(feature));
useCounter.count(parserMode, property);
EXPECT_FALSE(useCounter.isCounted(property));
+ histogramTester.expectTotalCount(kFeaturesHistogramName, 0);
+ histogramTester.expectTotalCount(kCSSHistogramName, 0);
useCounter.unmuteForInspector();
- recordMeasurement(useCounter, feature);
- EXPECT_TRUE(hasRecordedMeasurement(useCounter, feature));
+ useCounter.recordMeasurement(feature);
+ EXPECT_TRUE(useCounter.hasRecordedMeasurement(feature));
useCounter.count(parserMode, property);
EXPECT_TRUE(useCounter.isCounted(property));
+ histogramTester.expectUniqueSample(kFeaturesHistogramName, feature, 1);
+ histogramTester.expectUniqueSample(kCSSHistogramName, UseCounter::mapCSSPropertyIdToCSSSampleIdForHistogram(property), 1);
}
class DeprecationTest : public ::testing::Test {

Powered by Google App Engine
This is Rietveld 408576698