Commit 03bd98ae authored by Robert Ogden's avatar Robert Ogden Committed by Commit Bot

Add a UMA histogram to track duration of PrefetchProxy Retry-After's

We expect that this duration will either be pretty short, in the case
of loadshedding origins, or very long in the case of origins trying to
use a 503 response to opt out of prefetches. Since the loadshedding
case is not interesting from a product prespective, this histogram is
scoped out to a week to catch the latter.

Bug: 1146210
Change-Id: Ibeb1488206edbca7c8999a05def7e22d833772a6
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/2538133Reviewed-by: default avatarTarun Bansal <tbansal@chromium.org>
Commit-Queue: Robert Ogden <robertogden@chromium.org>
Cr-Commit-Position: refs/heads/master@{#827489}
parent 6398b025
...@@ -7,6 +7,7 @@ ...@@ -7,6 +7,7 @@
#include <memory> #include <memory>
#include <vector> #include <vector>
#include "base/metrics/histogram_macros.h"
#include "base/util/values/values_util.h" #include "base/util/values/values_util.h"
#include "chrome/browser/prefetch/prefetch_proxy/prefetch_proxy_params.h" #include "chrome/browser/prefetch/prefetch_proxy/prefetch_proxy_params.h"
#include "chrome/browser/profiles/profile.h" #include "chrome/browser/profiles/profile.h"
...@@ -71,6 +72,10 @@ void PrefetchProxyOriginDecider::ReportOriginRetryAfter( ...@@ -71,6 +72,10 @@ void PrefetchProxyOriginDecider::ReportOriginRetryAfter(
return; return;
} }
UMA_HISTOGRAM_CUSTOM_TIMES("IsolatedPrerender.Prefetch.Mainframe.RetryAfter",
retry_after, base::TimeDelta::FromSeconds(1),
base::TimeDelta::FromDays(7), 100);
// Cap values at a maximum per experiment. // Cap values at a maximum per experiment.
if (retry_after > PrefetchProxyMaxRetryAfterDelta()) { if (retry_after > PrefetchProxyMaxRetryAfterDelta()) {
retry_after = PrefetchProxyMaxRetryAfterDelta(); retry_after = PrefetchProxyMaxRetryAfterDelta();
......
...@@ -4,6 +4,7 @@ ...@@ -4,6 +4,7 @@
#include "chrome/browser/prefetch/prefetch_proxy/prefetch_proxy_origin_decider.h" #include "chrome/browser/prefetch/prefetch_proxy/prefetch_proxy_origin_decider.h"
#include "base/test/metrics/histogram_tester.h"
#include "base/test/scoped_feature_list.h" #include "base/test/scoped_feature_list.h"
#include "base/test/simple_test_clock.h" #include "base/test/simple_test_clock.h"
#include "chrome/browser/prefetch/prefetch_proxy/prefetch_proxy_features.h" #include "chrome/browser/prefetch/prefetch_proxy/prefetch_proxy_features.h"
...@@ -23,9 +24,12 @@ class PrefetchProxyOriginDeciderTest : public testing::Test { ...@@ -23,9 +24,12 @@ class PrefetchProxyOriginDeciderTest : public testing::Test {
base::SimpleTestClock* clock() { return &clock_; } base::SimpleTestClock* clock() { return &clock_; }
base::HistogramTester* histogram_tester() { return &histogram_tester_; }
private: private:
TestingPrefServiceSimple pref_service_; TestingPrefServiceSimple pref_service_;
base::SimpleTestClock clock_; base::SimpleTestClock clock_;
base::HistogramTester histogram_tester_;
}; };
TEST_F(PrefetchProxyOriginDeciderTest, DefaultEligible) { TEST_F(PrefetchProxyOriginDeciderTest, DefaultEligible) {
...@@ -52,6 +56,9 @@ TEST_F(PrefetchProxyOriginDeciderTest, MaxCap) { ...@@ -52,6 +56,9 @@ TEST_F(PrefetchProxyOriginDeciderTest, MaxCap) {
decider->ReportOriginRetryAfter(url, base::TimeDelta::FromSeconds(15)); decider->ReportOriginRetryAfter(url, base::TimeDelta::FromSeconds(15));
EXPECT_FALSE(decider->IsOriginOutsideRetryAfterWindow(url)); EXPECT_FALSE(decider->IsOriginOutsideRetryAfterWindow(url));
histogram_tester()->ExpectUniqueTimeSample(
"IsolatedPrerender.Prefetch.Mainframe.RetryAfter",
base::TimeDelta::FromSeconds(15), 1);
clock()->Advance(base::TimeDelta::FromSeconds(11)); clock()->Advance(base::TimeDelta::FromSeconds(11));
EXPECT_TRUE(decider->IsOriginOutsideRetryAfterWindow(url)); EXPECT_TRUE(decider->IsOriginOutsideRetryAfterWindow(url));
...@@ -63,6 +70,9 @@ TEST_F(PrefetchProxyOriginDeciderTest, WaitsForDelta) { ...@@ -63,6 +70,9 @@ TEST_F(PrefetchProxyOriginDeciderTest, WaitsForDelta) {
auto decider = NewDecider(); auto decider = NewDecider();
decider->ReportOriginRetryAfter(url, base::TimeDelta::FromSeconds(15)); decider->ReportOriginRetryAfter(url, base::TimeDelta::FromSeconds(15));
histogram_tester()->ExpectUniqueTimeSample(
"IsolatedPrerender.Prefetch.Mainframe.RetryAfter",
base::TimeDelta::FromSeconds(15), 1);
for (size_t i = 0; i <= 15; i++) { for (size_t i = 0; i <= 15; i++) {
EXPECT_FALSE(decider->IsOriginOutsideRetryAfterWindow(url)); EXPECT_FALSE(decider->IsOriginOutsideRetryAfterWindow(url));
...@@ -77,6 +87,9 @@ TEST_F(PrefetchProxyOriginDeciderTest, ByOrigin) { ...@@ -77,6 +87,9 @@ TEST_F(PrefetchProxyOriginDeciderTest, ByOrigin) {
decider->ReportOriginRetryAfter(GURL("http://foo.com"), decider->ReportOriginRetryAfter(GURL("http://foo.com"),
base::TimeDelta::FromSeconds(1)); base::TimeDelta::FromSeconds(1));
histogram_tester()->ExpectUniqueTimeSample(
"IsolatedPrerender.Prefetch.Mainframe.RetryAfter",
base::TimeDelta::FromSeconds(1), 1);
// Any url for the origin should be ineligible. // Any url for the origin should be ineligible.
for (const GURL& url : { for (const GURL& url : {
...@@ -105,6 +118,9 @@ TEST_F(PrefetchProxyOriginDeciderTest, Clear) { ...@@ -105,6 +118,9 @@ TEST_F(PrefetchProxyOriginDeciderTest, Clear) {
auto decider = NewDecider(); auto decider = NewDecider();
decider->ReportOriginRetryAfter(url, base::TimeDelta::FromSeconds(1)); decider->ReportOriginRetryAfter(url, base::TimeDelta::FromSeconds(1));
histogram_tester()->ExpectUniqueTimeSample(
"IsolatedPrerender.Prefetch.Mainframe.RetryAfter",
base::TimeDelta::FromSeconds(1), 1);
EXPECT_FALSE(decider->IsOriginOutsideRetryAfterWindow(url)); EXPECT_FALSE(decider->IsOriginOutsideRetryAfterWindow(url));
decider->OnBrowsingDataCleared(); decider->OnBrowsingDataCleared();
...@@ -119,6 +135,14 @@ TEST_F(PrefetchProxyOriginDeciderTest, PersistentPrefs) { ...@@ -119,6 +135,14 @@ TEST_F(PrefetchProxyOriginDeciderTest, PersistentPrefs) {
base::TimeDelta::FromSeconds(1)); base::TimeDelta::FromSeconds(1));
decider->ReportOriginRetryAfter(GURL("http://foo.com"), decider->ReportOriginRetryAfter(GURL("http://foo.com"),
base::TimeDelta::FromSeconds(3)); base::TimeDelta::FromSeconds(3));
histogram_tester()->ExpectTimeBucketCount(
"IsolatedPrerender.Prefetch.Mainframe.RetryAfter",
base::TimeDelta::FromSeconds(1), 1);
histogram_tester()->ExpectTimeBucketCount(
"IsolatedPrerender.Prefetch.Mainframe.RetryAfter",
base::TimeDelta::FromSeconds(3), 1);
histogram_tester()->ExpectTotalCount(
"IsolatedPrerender.Prefetch.Mainframe.RetryAfter", 2);
} }
clock()->Advance(base::TimeDelta::FromSeconds(2)); clock()->Advance(base::TimeDelta::FromSeconds(2));
......
...@@ -7163,6 +7163,17 @@ reviews. Googlers can read more about this at go/gwsq-gerrit. ...@@ -7163,6 +7163,17 @@ reviews. Googlers can read more about this at go/gwsq-gerrit.
</summary> </summary>
</histogram> </histogram>
<histogram name="IsolatedPrerender.Prefetch.Mainframe.RetryAfter" units="ms"
expires_after="M90">
<owner>robertogden@chromium.org</owner>
<owner>ryansturm@chromium.org</owner>
<owner>tbansal@chromium.org</owner>
<summary>
Records the duration of a Retry-After header on a 503 response to a
mainframe prefetch request.
</summary>
</histogram>
<histogram name="IsolatedPrerender.Prefetch.Mainframe.TotalRedirects" <histogram name="IsolatedPrerender.Prefetch.Mainframe.TotalRedirects"
units="count" expires_after="M90"> units="count" expires_after="M90">
<owner>robertogden@chromium.org</owner> <owner>robertogden@chromium.org</owner>
......
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