| OLD | NEW |
| 1 // Copyright 2017 The Chromium Authors. All rights reserved. | 1 // Copyright 2017 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #include "chrome/browser/page_load_metrics/observers/resource_prefetch_predictor
_page_load_metrics_observer.h" | 5 #include "chrome/browser/page_load_metrics/observers/resource_prefetch_predictor
_page_load_metrics_observer.h" |
| 6 | 6 |
| 7 #include "base/memory/ptr_util.h" | 7 #include "base/memory/ptr_util.h" |
| 8 #include "chrome/browser/page_load_metrics/page_load_metrics_util.h" | 8 #include "chrome/browser/page_load_metrics/page_load_metrics_util.h" |
| 9 #include "chrome/browser/predictors/resource_prefetch_predictor.h" | 9 #include "chrome/browser/predictors/resource_prefetch_predictor.h" |
| 10 #include "chrome/browser/predictors/resource_prefetch_predictor_factory.h" | 10 #include "chrome/browser/predictors/resource_prefetch_predictor_factory.h" |
| (...skipping 13 matching lines...) Expand all Loading... |
| 24 // static | 24 // static |
| 25 std::unique_ptr<ResourcePrefetchPredictorPageLoadMetricsObserver> | 25 std::unique_ptr<ResourcePrefetchPredictorPageLoadMetricsObserver> |
| 26 ResourcePrefetchPredictorPageLoadMetricsObserver::CreateIfNeeded( | 26 ResourcePrefetchPredictorPageLoadMetricsObserver::CreateIfNeeded( |
| 27 content::WebContents* web_contents) { | 27 content::WebContents* web_contents) { |
| 28 predictors::ResourcePrefetchPredictor* predictor = | 28 predictors::ResourcePrefetchPredictor* predictor = |
| 29 predictors::ResourcePrefetchPredictorFactory::GetForProfile( | 29 predictors::ResourcePrefetchPredictorFactory::GetForProfile( |
| 30 web_contents->GetBrowserContext()); | 30 web_contents->GetBrowserContext()); |
| 31 if (!predictor) | 31 if (!predictor) |
| 32 return nullptr; | 32 return nullptr; |
| 33 return base::MakeUnique<ResourcePrefetchPredictorPageLoadMetricsObserver>( | 33 return base::MakeUnique<ResourcePrefetchPredictorPageLoadMetricsObserver>( |
| 34 predictor); | 34 predictor, web_contents); |
| 35 } | 35 } |
| 36 | 36 |
| 37 ResourcePrefetchPredictorPageLoadMetricsObserver:: | 37 ResourcePrefetchPredictorPageLoadMetricsObserver:: |
| 38 ResourcePrefetchPredictorPageLoadMetricsObserver( | 38 ResourcePrefetchPredictorPageLoadMetricsObserver( |
| 39 predictors::ResourcePrefetchPredictor* predictor) | 39 predictors::ResourcePrefetchPredictor* predictor, |
| 40 : predictor_(predictor) { | 40 content::WebContents* web_contents) |
| 41 : predictor_(predictor), |
| 42 web_contents_(web_contents), |
| 43 record_histograms_(false) { |
| 41 DCHECK(predictor_); | 44 DCHECK(predictor_); |
| 42 } | 45 } |
| 43 | 46 |
| 44 ResourcePrefetchPredictorPageLoadMetricsObserver:: | 47 ResourcePrefetchPredictorPageLoadMetricsObserver:: |
| 45 ~ResourcePrefetchPredictorPageLoadMetricsObserver() {} | 48 ~ResourcePrefetchPredictorPageLoadMetricsObserver() {} |
| 46 | 49 |
| 47 page_load_metrics::PageLoadMetricsObserver::ObservePolicy | 50 page_load_metrics::PageLoadMetricsObserver::ObservePolicy |
| 48 ResourcePrefetchPredictorPageLoadMetricsObserver::OnStart( | 51 ResourcePrefetchPredictorPageLoadMetricsObserver::OnStart( |
| 49 content::NavigationHandle* navigation_handle, | 52 content::NavigationHandle* navigation_handle, |
| 50 const GURL& currently_commited_url, | 53 const GURL& currently_commited_url, |
| 51 bool started_in_foreground) { | 54 bool started_in_foreground) { |
| 52 return (started_in_foreground && | 55 record_histograms_ = |
| 53 predictor_->IsUrlPrefetchable(navigation_handle->GetURL())) | 56 started_in_foreground && |
| 54 ? CONTINUE_OBSERVING | 57 predictor_->IsUrlPrefetchable(navigation_handle->GetURL()); |
| 55 : STOP_OBSERVING; | 58 |
| 59 return CONTINUE_OBSERVING; |
| 56 } | 60 } |
| 57 | 61 |
| 58 page_load_metrics::PageLoadMetricsObserver::ObservePolicy | 62 page_load_metrics::PageLoadMetricsObserver::ObservePolicy |
| 59 ResourcePrefetchPredictorPageLoadMetricsObserver::OnHidden( | 63 ResourcePrefetchPredictorPageLoadMetricsObserver::OnHidden( |
| 60 const page_load_metrics::PageLoadTiming& timing, | 64 const page_load_metrics::PageLoadTiming& timing, |
| 61 const page_load_metrics::PageLoadExtraInfo& extra_info) { | 65 const page_load_metrics::PageLoadExtraInfo& extra_info) { |
| 62 return STOP_OBSERVING; | 66 record_histograms_ = false; |
| 67 return CONTINUE_OBSERVING; |
| 63 } | 68 } |
| 64 | 69 |
| 65 void ResourcePrefetchPredictorPageLoadMetricsObserver::OnFirstContentfulPaint( | 70 void ResourcePrefetchPredictorPageLoadMetricsObserver::OnFirstContentfulPaint( |
| 66 const page_load_metrics::PageLoadTiming& timing, | 71 const page_load_metrics::PageLoadTiming& timing, |
| 67 const page_load_metrics::PageLoadExtraInfo& extra_info) { | 72 const page_load_metrics::PageLoadExtraInfo& extra_info) { |
| 68 PAGE_LOAD_HISTOGRAM( | 73 predictors::NavigationID navigation_id(web_contents_); |
| 69 internal::kHistogramResourcePrefetchPredictorFirstContentfulPaint, | 74 |
| 70 timing.paint_timing.first_contentful_paint.value()); | 75 predictor_->RecordFirstContentfulPaint( |
| 76 navigation_id, extra_info.navigation_start + |
| 77 timing.paint_timing.first_contentful_paint.value()); |
| 78 if (record_histograms_) { |
| 79 PAGE_LOAD_HISTOGRAM( |
| 80 internal::kHistogramResourcePrefetchPredictorFirstContentfulPaint, |
| 81 timing.paint_timing.first_contentful_paint.value()); |
| 82 } |
| 71 } | 83 } |
| 72 | 84 |
| 73 void ResourcePrefetchPredictorPageLoadMetricsObserver::OnFirstMeaningfulPaint( | 85 void ResourcePrefetchPredictorPageLoadMetricsObserver::OnFirstMeaningfulPaint( |
| 74 const page_load_metrics::PageLoadTiming& timing, | 86 const page_load_metrics::PageLoadTiming& timing, |
| 75 const page_load_metrics::PageLoadExtraInfo& extra_info) { | 87 const page_load_metrics::PageLoadExtraInfo& extra_info) { |
| 76 PAGE_LOAD_HISTOGRAM( | 88 if (record_histograms_) { |
| 77 internal::kHistogramResourcePrefetchPredictorFirstMeaningfulPaint, | 89 PAGE_LOAD_HISTOGRAM( |
| 78 timing.paint_timing.first_meaningful_paint.value()); | 90 internal::kHistogramResourcePrefetchPredictorFirstMeaningfulPaint, |
| 91 timing.paint_timing.first_meaningful_paint.value()); |
| 92 } |
| 79 } | 93 } |
| OLD | NEW |