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 predictor_->RecordFirstContentfulPaint( |
70 timing.first_contentful_paint.value()); | 75 navigation_id, |
76 timing.navigation_start + timing.first_contentful_paint.value()); | |
alexilin
2017/03/28 12:58:51
PageLoadTiming::navigation_start marked as "should
trevordixon
2017/03/29 09:26:55
Cool, I'll use extra_info.navigation_start. The fo
| |
77 if (record_histograms_) { | |
78 PAGE_LOAD_HISTOGRAM( | |
79 internal::kHistogramResourcePrefetchPredictorFirstContentfulPaint, | |
80 timing.first_contentful_paint.value()); | |
81 } | |
71 } | 82 } |
72 | 83 |
73 void ResourcePrefetchPredictorPageLoadMetricsObserver::OnFirstMeaningfulPaint( | 84 void ResourcePrefetchPredictorPageLoadMetricsObserver::OnFirstMeaningfulPaint( |
74 const page_load_metrics::PageLoadTiming& timing, | 85 const page_load_metrics::PageLoadTiming& timing, |
75 const page_load_metrics::PageLoadExtraInfo& extra_info) { | 86 const page_load_metrics::PageLoadExtraInfo& extra_info) { |
76 PAGE_LOAD_HISTOGRAM( | 87 if (record_histograms_) { |
77 internal::kHistogramResourcePrefetchPredictorFirstMeaningfulPaint, | 88 PAGE_LOAD_HISTOGRAM( |
78 timing.first_meaningful_paint.value()); | 89 internal::kHistogramResourcePrefetchPredictorFirstMeaningfulPaint, |
90 timing.first_meaningful_paint.value()); | |
91 } | |
79 } | 92 } |
OLD | NEW |