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, |
| 77 extra_info.navigation_start + 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 |