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

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: Overhaul tests 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..e3423ce6349b0696fd4c5a4850d5c38c1e25a3df 100644
--- a/third_party/WebKit/Source/core/frame/UseCounterTest.cpp
+++ b/third_party/WebKit/Source/core/frame/UseCounterTest.cpp
@@ -6,81 +6,164 @@
#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);
- }
-
- void recordMeasurement(UseCounter& useCounter, UseCounter::Feature feature)
- {
- useCounter.recordMeasurement(feature);
- }
-};
-
-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("WebCore.UseCounter.Features", UseCounter::Fetch, 1);
+ histogramTester.expectTotalCount("WebCore.FeatureObserver", 0);
+
+ // Test that repeated measurements have no effect
+ useCounter.recordMeasurement(UseCounter::Fetch);
+ histogramTester.expectUniqueSample("WebCore.UseCounter.Features", UseCounter::Fetch, 1);
+ histogramTester.expectTotalCount("WebCore.FeatureObserver", 0);
+
+ // Test recording a different sample
+ EXPECT_FALSE(useCounter.hasRecordedMeasurement(UseCounter::FetchBodyStream));
+ useCounter.recordMeasurement(UseCounter::FetchBodyStream);
+ EXPECT_TRUE(useCounter.hasRecordedMeasurement(UseCounter::FetchBodyStream));
+ histogramTester.expectBucketCount("WebCore.UseCounter.Features", UseCounter::Fetch, 1);
+ histogramTester.expectBucketCount("WebCore.UseCounter.Features", UseCounter::FetchBodyStream, 1);
+ histogramTester.expectTotalCount("WebCore.UseCounter.Features", 2);
+ histogramTester.expectTotalCount("WebCore.FeatureObserver", 0);
+
+ // Test the impact of page load on the new histogram
+ useCounter.didCommitLoad();
+ histogramTester.expectBucketCount("WebCore.UseCounter.Features", UseCounter::Fetch, 1);
+ histogramTester.expectBucketCount("WebCore.UseCounter.Features", UseCounter::FetchBodyStream, 1);
+ histogramTester.expectBucketCount("WebCore.UseCounter.Features", UseCounter::PageVisits, 1);
+ histogramTester.expectTotalCount("WebCore.UseCounter.Features", 3);
+
+ // And verify the legacy histogram now looks the same
+ histogramTester.expectBucketCount("WebCore.FeatureObserver", UseCounter::Fetch, 1);
+ histogramTester.expectBucketCount("WebCore.FeatureObserver", UseCounter::FetchBodyStream, 1);
+ histogramTester.expectBucketCount("WebCore.FeatureObserver", UseCounter::PageVisits, 1);
+ histogramTester.expectTotalCount("WebCore.FeatureObserver", 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("WebCore.UseCounter.Features", UseCounter::Fetch, 2);
+ histogramTester.expectTotalCount("WebCore.UseCounter.Features", 4);
+
+ // And on the next page load, the legacy histogram will again be updated
+ useCounter.didCommitLoad();
+ histogramTester.expectBucketCount("WebCore.FeatureObserver", UseCounter::Fetch, 2);
+ histogramTester.expectBucketCount("WebCore.FeatureObserver", UseCounter::FetchBodyStream, 1);
+ histogramTester.expectBucketCount("WebCore.FeatureObserver", UseCounter::PageVisits, 2);
+ histogramTester.expectTotalCount("WebCore.FeatureObserver", 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("WebCore.UseCounter.CSSProperties", UseCounter::mapCSSPropertyIdToCSSSampleIdForHistogram(CSSPropertyFont), 1);
+ histogramTester.expectTotalCount("WebCore.FeatureObserver.CSSProperties", 0);
+
+ // Test that repeated measurements have no effect
+ useCounter.count(HTMLStandardMode, CSSPropertyFont);
+ histogramTester.expectUniqueSample("WebCore.UseCounter.CSSProperties", UseCounter::mapCSSPropertyIdToCSSSampleIdForHistogram(CSSPropertyFont), 1);
+ histogramTester.expectTotalCount("WebCore.FeatureObserver.CSSProperties", 0);
+
+ // Test recording a different sample
+ EXPECT_FALSE(useCounter.isCounted(CSSPropertyZoom));
+ useCounter.count(HTMLStandardMode, CSSPropertyZoom);
+ EXPECT_TRUE(useCounter.isCounted(CSSPropertyZoom));
+ histogramTester.expectBucketCount("WebCore.UseCounter.CSSProperties", UseCounter::mapCSSPropertyIdToCSSSampleIdForHistogram(CSSPropertyFont), 1);
+ histogramTester.expectBucketCount("WebCore.UseCounter.CSSProperties", UseCounter::mapCSSPropertyIdToCSSSampleIdForHistogram(CSSPropertyZoom), 1);
+ histogramTester.expectTotalCount("WebCore.UseCounter.CSSProperties", 2);
+ histogramTester.expectTotalCount("WebCore.FeatureObserver.CSSProperties", 0);
+
+ // Test the impact of page load on the new histogram
+ useCounter.didCommitLoad();
+ histogramTester.expectBucketCount("WebCore.UseCounter.CSSProperties", UseCounter::mapCSSPropertyIdToCSSSampleIdForHistogram(CSSPropertyFont), 1);
+ histogramTester.expectBucketCount("WebCore.UseCounter.CSSProperties", UseCounter::mapCSSPropertyIdToCSSSampleIdForHistogram(CSSPropertyZoom), 1);
+ histogramTester.expectBucketCount("WebCore.UseCounter.CSSProperties", 1, 1);
+ histogramTester.expectTotalCount("WebCore.UseCounter.CSSProperties", 3);
+
+ // And verify the legacy histogram now looks the same
+ histogramTester.expectBucketCount("WebCore.FeatureObserver.CSSProperties", UseCounter::mapCSSPropertyIdToCSSSampleIdForHistogram(CSSPropertyFont), 1);
+ histogramTester.expectBucketCount("WebCore.FeatureObserver.CSSProperties", UseCounter::mapCSSPropertyIdToCSSSampleIdForHistogram(CSSPropertyZoom), 1);
+ histogramTester.expectBucketCount("WebCore.FeatureObserver.CSSProperties", 1, 1);
+ histogramTester.expectTotalCount("WebCore.FeatureObserver.CSSProperties", 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("WebCore.UseCounter.CSSProperties", UseCounter::mapCSSPropertyIdToCSSSampleIdForHistogram(CSSPropertyFont), 2);
+ histogramTester.expectTotalCount("WebCore.UseCounter.CSSProperties", 4);
+
+ // And on the next page load, the legacy histogram will again be updated
+ useCounter.didCommitLoad();
+ histogramTester.expectBucketCount("WebCore.FeatureObserver.CSSProperties", UseCounter::mapCSSPropertyIdToCSSSampleIdForHistogram(CSSPropertyFont), 2);
+ histogramTester.expectBucketCount("WebCore.FeatureObserver.CSSProperties", UseCounter::mapCSSPropertyIdToCSSSampleIdForHistogram(CSSPropertyZoom), 1);
+ histogramTester.expectBucketCount("WebCore.FeatureObserver.CSSProperties", 1, 2);
+ histogramTester.expectTotalCount("WebCore.FeatureObserver.CSSProperties", 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("WebCore.UseCounter.Features", 0);
dtapuska 2016/09/09 18:30:19 Can we not repeat the names all over this file? Ca
Rick Byers 2016/09/09 19:31:37 Done.
+ histogramTester.expectTotalCount("WebCore.UseCounter.CSSProperties", 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("WebCore.UseCounter.Features", 0);
+ histogramTester.expectTotalCount("WebCore.UseCounter.CSSProperties", 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("WebCore.UseCounter.Features", 0);
+ histogramTester.expectTotalCount("WebCore.UseCounter.CSSProperties", 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("WebCore.UseCounter.Features", feature, 1);
+ histogramTester.expectUniqueSample("WebCore.UseCounter.CSSProperties", UseCounter::mapCSSPropertyIdToCSSSampleIdForHistogram(property), 1);
}
class DeprecationTest : public ::testing::Test {

Powered by Google App Engine
This is Rietveld 408576698