Index: chrome/browser/page_load_metrics/observers/resource_prefetch_predictor_page_load_metrics_observer.cc |
diff --git a/chrome/browser/page_load_metrics/observers/resource_prefetch_predictor_page_load_metrics_observer.cc b/chrome/browser/page_load_metrics/observers/resource_prefetch_predictor_page_load_metrics_observer.cc |
index 34762b326a29f98b4a62d0e4f2f10681a9c60b01..dc6797bf053ed0de4ea86fe4212b926eec76b281 100644 |
--- a/chrome/browser/page_load_metrics/observers/resource_prefetch_predictor_page_load_metrics_observer.cc |
+++ b/chrome/browser/page_load_metrics/observers/resource_prefetch_predictor_page_load_metrics_observer.cc |
@@ -31,13 +31,16 @@ ResourcePrefetchPredictorPageLoadMetricsObserver::CreateIfNeeded( |
if (!predictor) |
return nullptr; |
return base::MakeUnique<ResourcePrefetchPredictorPageLoadMetricsObserver>( |
- predictor); |
+ predictor, web_contents); |
} |
ResourcePrefetchPredictorPageLoadMetricsObserver:: |
ResourcePrefetchPredictorPageLoadMetricsObserver( |
- predictors::ResourcePrefetchPredictor* predictor) |
- : predictor_(predictor) { |
+ predictors::ResourcePrefetchPredictor* predictor, |
+ content::WebContents* web_contents) |
+ : predictor_(predictor), |
+ web_contents_(web_contents), |
+ record_histograms_(false) { |
DCHECK(predictor_); |
} |
@@ -49,31 +52,42 @@ ResourcePrefetchPredictorPageLoadMetricsObserver::OnStart( |
content::NavigationHandle* navigation_handle, |
const GURL& currently_commited_url, |
bool started_in_foreground) { |
- return (started_in_foreground && |
- predictor_->IsUrlPrefetchable(navigation_handle->GetURL())) |
- ? CONTINUE_OBSERVING |
- : STOP_OBSERVING; |
+ record_histograms_ = |
+ started_in_foreground && |
+ predictor_->IsUrlPrefetchable(navigation_handle->GetURL()); |
+ |
+ return CONTINUE_OBSERVING; |
} |
page_load_metrics::PageLoadMetricsObserver::ObservePolicy |
ResourcePrefetchPredictorPageLoadMetricsObserver::OnHidden( |
const page_load_metrics::PageLoadTiming& timing, |
const page_load_metrics::PageLoadExtraInfo& extra_info) { |
- return STOP_OBSERVING; |
+ record_histograms_ = false; |
+ return CONTINUE_OBSERVING; |
} |
void ResourcePrefetchPredictorPageLoadMetricsObserver::OnFirstContentfulPaint( |
const page_load_metrics::PageLoadTiming& timing, |
const page_load_metrics::PageLoadExtraInfo& extra_info) { |
- PAGE_LOAD_HISTOGRAM( |
- internal::kHistogramResourcePrefetchPredictorFirstContentfulPaint, |
- timing.first_contentful_paint.value()); |
+ predictors::NavigationID navigation_id(web_contents_); |
+ |
+ predictor_->RecordFirstContentfulPaint( |
+ navigation_id, |
+ extra_info.navigation_start + timing.first_contentful_paint.value()); |
+ if (record_histograms_) { |
+ PAGE_LOAD_HISTOGRAM( |
+ internal::kHistogramResourcePrefetchPredictorFirstContentfulPaint, |
+ timing.first_contentful_paint.value()); |
+ } |
} |
void ResourcePrefetchPredictorPageLoadMetricsObserver::OnFirstMeaningfulPaint( |
const page_load_metrics::PageLoadTiming& timing, |
const page_load_metrics::PageLoadExtraInfo& extra_info) { |
- PAGE_LOAD_HISTOGRAM( |
- internal::kHistogramResourcePrefetchPredictorFirstMeaningfulPaint, |
- timing.first_meaningful_paint.value()); |
+ if (record_histograms_) { |
+ PAGE_LOAD_HISTOGRAM( |
+ internal::kHistogramResourcePrefetchPredictorFirstMeaningfulPaint, |
+ timing.first_meaningful_paint.value()); |
+ } |
} |