Commit 309089e7 authored by Luna Lu's avatar Luna Lu Committed by Commit Bot

Browser-side UseCounter track kPageVisits in PageLoadMetricsObserver::OnCommit

Bug: 760110
Change-Id: I7c8e70af3cb5b58939a762d577b5374c54638aed
Reviewed-on: https://chromium-review.googlesource.com/687574Reviewed-by: default avatarBryan McQuade <bmcquade@chromium.org>
Commit-Queue: Luna Lu <loonybear@chromium.org>
Cr-Commit-Position: refs/heads/master@{#505031}
parent 40c4389f
...@@ -12,9 +12,24 @@ using Features = page_load_metrics::mojom::PageLoadFeatures; ...@@ -12,9 +12,24 @@ using Features = page_load_metrics::mojom::PageLoadFeatures;
UseCounterPageLoadMetricsObserver::UseCounterPageLoadMetricsObserver() {} UseCounterPageLoadMetricsObserver::UseCounterPageLoadMetricsObserver() {}
UseCounterPageLoadMetricsObserver::~UseCounterPageLoadMetricsObserver() {} UseCounterPageLoadMetricsObserver::~UseCounterPageLoadMetricsObserver() {}
page_load_metrics::PageLoadMetricsObserver::ObservePolicy
UseCounterPageLoadMetricsObserver::OnCommit(
content::NavigationHandle* navigation_handle,
ukm::SourceId source_id) {
// Verify that no feature usage is observed before commit
DCHECK(features_recorded_.count() <= 0);
UMA_HISTOGRAM_ENUMERATION(internal::kFeaturesHistogramName,
WebFeature::kPageVisits,
WebFeature::kNumberOfFeatures);
features_recorded_.set(static_cast<size_t>(WebFeature::kPageVisits));
return CONTINUE_OBSERVING;
}
void UseCounterPageLoadMetricsObserver::OnFeaturesUsageObserved( void UseCounterPageLoadMetricsObserver::OnFeaturesUsageObserved(
const Features& features) { const Features& features) {
for (auto feature : features.features) { for (auto feature : features.features) {
// Verify that kPageVisits is only observed at most once per observer.
DCHECK(feature != WebFeature::kPageVisits);
// The usage of each feature should be only measured once. With OOPIF, // The usage of each feature should be only measured once. With OOPIF,
// multiple child frames may send the same feature to the browser, skip if // multiple child frames may send the same feature to the browser, skip if
// feature has already been measured. // feature has already been measured.
......
...@@ -25,6 +25,8 @@ class UseCounterPageLoadMetricsObserver ...@@ -25,6 +25,8 @@ class UseCounterPageLoadMetricsObserver
~UseCounterPageLoadMetricsObserver() override; ~UseCounterPageLoadMetricsObserver() override;
// page_load_metrics::PageLoadMetricsObserver. // page_load_metrics::PageLoadMetricsObserver.
ObservePolicy OnCommit(content::NavigationHandle* navigation_handle,
ukm::SourceId source_id) override;
void OnFeaturesUsageObserved( void OnFeaturesUsageObserved(
const page_load_metrics::mojom::PageLoadFeatures&) override; const page_load_metrics::mojom::PageLoadFeatures&) override;
......
...@@ -32,6 +32,10 @@ class UseCounterPageLoadMetricsObserverTest ...@@ -32,6 +32,10 @@ class UseCounterPageLoadMetricsObserverTest
page_load_metrics::mojom::PageLoadFeatures()) { page_load_metrics::mojom::PageLoadFeatures()) {
NavigateAndCommit(GURL(kTestUrl)); NavigateAndCommit(GURL(kTestUrl));
SimulateFeaturesUpdate(first_features); SimulateFeaturesUpdate(first_features);
// Verify that kPageVisits is observed on commit.
histogram_tester().ExpectBucketCount(
internal::kFeaturesHistogramName,
static_cast<base::Histogram::Sample>(WebFeature::kPageVisits), 1);
for (auto feature : first_features.features) { for (auto feature : first_features.features) {
histogram_tester().ExpectBucketCount( histogram_tester().ExpectBucketCount(
internal::kFeaturesHistogramName, internal::kFeaturesHistogramName,
......
...@@ -1155,6 +1155,9 @@ IN_PROC_BROWSER_TEST_F(PageLoadMetricsBrowserTest, ...@@ -1155,6 +1155,9 @@ IN_PROC_BROWSER_TEST_F(PageLoadMetricsBrowserTest,
histogram_tester_.ExpectBucketCount( histogram_tester_.ExpectBucketCount(
internal::kFeaturesHistogramName, internal::kFeaturesHistogramName,
static_cast<int32_t>(WebFeature::kV8Element_Animate_Method), 1); static_cast<int32_t>(WebFeature::kV8Element_Animate_Method), 1);
histogram_tester_.ExpectBucketCount(
internal::kFeaturesHistogramName,
static_cast<int32_t>(WebFeature::kPageVisits), 1);
} }
// Test UseCounter Features observed in a child frame are recorded, exactly // Test UseCounter Features observed in a child frame are recorded, exactly
...@@ -1176,6 +1179,9 @@ IN_PROC_BROWSER_TEST_F(PageLoadMetricsBrowserTest, UseCounterFeaturesInIframe) { ...@@ -1176,6 +1179,9 @@ IN_PROC_BROWSER_TEST_F(PageLoadMetricsBrowserTest, UseCounterFeaturesInIframe) {
histogram_tester_.ExpectBucketCount( histogram_tester_.ExpectBucketCount(
internal::kFeaturesHistogramName, internal::kFeaturesHistogramName,
static_cast<int32_t>(WebFeature::kV8Element_Animate_Method), 1); static_cast<int32_t>(WebFeature::kV8Element_Animate_Method), 1);
histogram_tester_.ExpectBucketCount(
internal::kFeaturesHistogramName,
static_cast<int32_t>(WebFeature::kPageVisits), 1);
} }
// Test UseCounter Features observed in multiple child frames are recorded, // Test UseCounter Features observed in multiple child frames are recorded,
...@@ -1199,6 +1205,9 @@ IN_PROC_BROWSER_TEST_F(PageLoadMetricsBrowserTest, ...@@ -1199,6 +1205,9 @@ IN_PROC_BROWSER_TEST_F(PageLoadMetricsBrowserTest,
histogram_tester_.ExpectBucketCount( histogram_tester_.ExpectBucketCount(
internal::kFeaturesHistogramName, internal::kFeaturesHistogramName,
static_cast<int32_t>(WebFeature::kV8Element_Animate_Method), 1); static_cast<int32_t>(WebFeature::kV8Element_Animate_Method), 1);
histogram_tester_.ExpectBucketCount(
internal::kFeaturesHistogramName,
static_cast<int32_t>(WebFeature::kPageVisits), 1);
} }
IN_PROC_BROWSER_TEST_F(PageLoadMetricsBrowserTest, LoadingMetrics) { IN_PROC_BROWSER_TEST_F(PageLoadMetricsBrowserTest, LoadingMetrics) {
......
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