| Index: chrome/browser/prerender/prerender_histograms.cc
|
| diff --git a/chrome/browser/prerender/prerender_histograms.cc b/chrome/browser/prerender/prerender_histograms.cc
|
| index 28c43c0968095a78f4c072d41a676220737994bf..4e97663049a8d3e75b14b55e98a28ec60af7f2cc 100644
|
| --- a/chrome/browser/prerender/prerender_histograms.cc
|
| +++ b/chrome/browser/prerender/prerender_histograms.cc
|
| @@ -13,6 +13,7 @@
|
| #include "base/strings/stringprintf.h"
|
| #include "chrome/browser/prerender/prerender_manager.h"
|
| #include "chrome/browser/prerender/prerender_util.h"
|
| +#include "net/http/http_cache.h"
|
|
|
| namespace prerender {
|
|
|
| @@ -37,7 +38,7 @@ int GetResourceType(bool is_main_resource, bool is_redirect, bool is_no_store) {
|
| // Similar to UMA_HISTOGRAM_ENUMERATION but allows a dynamic histogram name.
|
| // Records a sample such as 0 <= sample < bucket_count, in a histogram with
|
| // |bucket_count| buckets of width 1 each.
|
| -void RecordHistogramEnum(std::string histogram_name,
|
| +void RecordHistogramEnum(const std::string& histogram_name,
|
| base::HistogramBase::Sample sample,
|
| base::HistogramBase::Sample bucket_count) {
|
| DCHECK_LT(sample, bucket_count);
|
| @@ -47,6 +48,18 @@ void RecordHistogramEnum(std::string histogram_name,
|
| histogram_pointer->Add(sample);
|
| }
|
|
|
| +// Similar to UMA_HISTOGRAM_CUSTOM_TIMES but allows a dynamic histogram name.
|
| +void RecordHistogramTime(const std::string& histogram_name,
|
| + base::TimeDelta time_min,
|
| + base::TimeDelta time_max,
|
| + base::TimeDelta sample,
|
| + base::HistogramBase::Sample bucket_count) {
|
| + base::HistogramBase* histogram_pointer = base::Histogram::FactoryTimeGet(
|
| + histogram_name, time_min, time_max, bucket_count,
|
| + base::HistogramBase::kUmaTargetedHistogramFlag);
|
| + histogram_pointer->AddTime(sample);
|
| +}
|
| +
|
| // Time window for which we will record windowed PLTs from the last observed
|
| // link rel=prefetch tag. This is not intended to be the same as the prerender
|
| // ttl, it's just intended to be a window during which a prerender has likely
|
| @@ -439,10 +452,51 @@ void PrerenderHistograms::RecordPrefetchRedirectCount(
|
| RecordHistogramEnum(histogram_name, redirect_count, kMaxRedirectCount);
|
| }
|
|
|
| +void PrerenderHistograms::RecordFirstContentfulPaint(
|
| + Origin origin,
|
| + bool is_no_store,
|
| + base::TimeDelta time,
|
| + base::TimeDelta prefetch_age) {
|
| + DCHECK(thread_checker_.CalledOnValidThread());
|
| +
|
| + if (!prefetch_age.is_zero()) {
|
| + DCHECK_NE(origin, ORIGIN_NONE);
|
| + RecordHistogramTime(GetHistogramName(origin, IsOriginWash(),
|
| + "Prerender.NoStatePrefetchAge"),
|
| + base::TimeDelta::FromMilliseconds(10),
|
| + base::TimeDelta::FromMinutes(30), prefetch_age, 50);
|
| + }
|
| +
|
| + RecordHistogramTime(GetFirstContentfulPaintHistogramName(
|
| + origin, IsOriginWash(), is_no_store, prefetch_age),
|
| + base::TimeDelta::FromMilliseconds(10),
|
| + base::TimeDelta::FromMinutes(2), time, 50);
|
| +}
|
| +
|
| bool PrerenderHistograms::IsOriginWash() const {
|
| if (!WithinWindow())
|
| return false;
|
| return origin_wash_;
|
| }
|
|
|
| +// static
|
| +std::string PrerenderHistograms::GetFirstContentfulPaintHistogramName(
|
| + Origin origin,
|
| + bool is_wash,
|
| + bool is_no_store,
|
| + base::TimeDelta prefetch_age) {
|
| + std::string histogram_base_name;
|
| + if (prefetch_age.is_zero()) {
|
| + histogram_base_name = "NoStatePrefetchTTFCP.Reference";
|
| + } else {
|
| + histogram_base_name = prefetch_age < base::TimeDelta::FromMinutes(
|
| + net::HttpCache::kPrefetchReuseMins)
|
| + ? "NoStatePrefetchTTFCP.Warm"
|
| + : "NoStatePrefetchTTFCP.Cold";
|
| + }
|
| +
|
| + histogram_base_name += is_no_store ? ".NoStore" : ".Cacheable";
|
| + return GetHistogramName(origin, is_wash, histogram_base_name);
|
| +}
|
| +
|
| } // namespace prerender
|
|
|