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/ukm_page_load_metrics_obser ver.h" | 5 #include "chrome/browser/page_load_metrics/observers/ukm_page_load_metrics_obser ver.h" |
6 #include "chrome/browser/browser_process.h" | 6 #include "chrome/browser/browser_process.h" |
7 #include "chrome/browser/page_load_metrics/page_load_metrics_util.h" | 7 #include "chrome/browser/page_load_metrics/page_load_metrics_util.h" |
8 #include "components/ukm/ukm_entry_builder.h" | 8 #include "components/ukm/ukm_entry_builder.h" |
9 #include "components/ukm/ukm_service.h" | 9 #include "components/ukm/ukm_service.h" |
10 | 10 |
11 namespace internal { | 11 namespace internal { |
12 | 12 |
13 const char kUkmPageLoadEventName[] = "PageLoad"; | 13 const char kUkmPageLoadEventName[] = "PageLoad"; |
14 const char kUkmParseStartName[] = "ParseTiming.ParseStart"; | |
15 const char kUkmDomContentLoadedName[] = | |
16 "DocumentTiming.NavigationToDOMContentLoadedEventFired"; | |
17 const char kUkmLoadEventName[] = "DocumentTiming.NavigationToLoadEventFired"; | |
14 const char kUkmFirstContentfulPaintName[] = | 18 const char kUkmFirstContentfulPaintName[] = |
15 "PaintTiming.NavigationToFirstContentfulPaint"; | 19 "PaintTiming.NavigationToFirstContentfulPaint"; |
20 const char kUkmFirstMeaningfulPaintName[] = | |
21 "Experimental.PaintTiming.NavigationToFirstMeaningfulPaint"; | |
22 const char kUkmForegroundDurationName[] = "PageTiming.ForegroundDuration"; | |
tdresser
2017/03/02 18:06:00
All of DocumentTiming, PageTiming, PaintTiming and
| |
16 | 23 |
17 } // namespace internal | 24 } // namespace internal |
18 | 25 |
19 // static | 26 // static |
20 std::unique_ptr<page_load_metrics::PageLoadMetricsObserver> | 27 std::unique_ptr<page_load_metrics::PageLoadMetricsObserver> |
21 UkmPageLoadMetricsObserver::CreateIfNeeded() { | 28 UkmPageLoadMetricsObserver::CreateIfNeeded() { |
22 if (!g_browser_process->ukm_service()) { | 29 if (!g_browser_process->ukm_service()) { |
23 return nullptr; | 30 return nullptr; |
24 } | 31 } |
25 | 32 |
(...skipping 15 matching lines...) Expand all Loading... | |
41 ukm::UkmService* ukm_service = g_browser_process->ukm_service(); | 48 ukm::UkmService* ukm_service = g_browser_process->ukm_service(); |
42 ukm_service->UpdateSourceURL(source_id_, navigation_handle->GetURL()); | 49 ukm_service->UpdateSourceURL(source_id_, navigation_handle->GetURL()); |
43 return CONTINUE_OBSERVING; | 50 return CONTINUE_OBSERVING; |
44 } | 51 } |
45 | 52 |
46 UkmPageLoadMetricsObserver::ObservePolicy | 53 UkmPageLoadMetricsObserver::ObservePolicy |
47 UkmPageLoadMetricsObserver::FlushMetricsOnAppEnterBackground( | 54 UkmPageLoadMetricsObserver::FlushMetricsOnAppEnterBackground( |
48 const page_load_metrics::PageLoadTiming& timing, | 55 const page_load_metrics::PageLoadTiming& timing, |
49 const page_load_metrics::PageLoadExtraInfo& info) { | 56 const page_load_metrics::PageLoadExtraInfo& info) { |
50 RecordTimingMetrics(timing); | 57 RecordTimingMetrics(timing); |
51 RecordPageLoadExtraInfoMetrics(info); | 58 RecordPageLoadExtraInfoMetrics(info, base::TimeTicks::Now()); |
52 return STOP_OBSERVING; | 59 return STOP_OBSERVING; |
53 } | 60 } |
54 | 61 |
55 UkmPageLoadMetricsObserver::ObservePolicy UkmPageLoadMetricsObserver::OnHidden( | 62 UkmPageLoadMetricsObserver::ObservePolicy UkmPageLoadMetricsObserver::OnHidden( |
56 const page_load_metrics::PageLoadTiming& timing, | 63 const page_load_metrics::PageLoadTiming& timing, |
57 const page_load_metrics::PageLoadExtraInfo& info) { | 64 const page_load_metrics::PageLoadExtraInfo& info) { |
58 RecordTimingMetrics(timing); | 65 RecordTimingMetrics(timing); |
59 RecordPageLoadExtraInfoMetrics(info); | 66 RecordPageLoadExtraInfoMetrics( |
67 info, base::TimeTicks() /* no app_background_time */); | |
60 return STOP_OBSERVING; | 68 return STOP_OBSERVING; |
61 } | 69 } |
62 | 70 |
63 void UkmPageLoadMetricsObserver::OnFailedProvisionalLoad( | 71 void UkmPageLoadMetricsObserver::OnFailedProvisionalLoad( |
64 const page_load_metrics::FailedProvisionalLoadInfo& failed_load_info, | 72 const page_load_metrics::FailedProvisionalLoadInfo& failed_load_info, |
65 const page_load_metrics::PageLoadExtraInfo& extra_info) { | 73 const page_load_metrics::PageLoadExtraInfo& extra_info) { |
66 RecordPageLoadExtraInfoMetrics(extra_info); | 74 RecordPageLoadExtraInfoMetrics( |
75 extra_info, base::TimeTicks() /* no app_background_time */); | |
67 } | 76 } |
68 | 77 |
69 void UkmPageLoadMetricsObserver::OnComplete( | 78 void UkmPageLoadMetricsObserver::OnComplete( |
70 const page_load_metrics::PageLoadTiming& timing, | 79 const page_load_metrics::PageLoadTiming& timing, |
71 const page_load_metrics::PageLoadExtraInfo& info) { | 80 const page_load_metrics::PageLoadExtraInfo& info) { |
72 RecordTimingMetrics(timing); | 81 RecordTimingMetrics(timing); |
73 RecordPageLoadExtraInfoMetrics(info); | 82 RecordPageLoadExtraInfoMetrics( |
83 info, base::TimeTicks() /* no app_background_time */); | |
74 } | 84 } |
75 | 85 |
76 void UkmPageLoadMetricsObserver::RecordTimingMetrics( | 86 void UkmPageLoadMetricsObserver::RecordTimingMetrics( |
77 const page_load_metrics::PageLoadTiming& timing) { | 87 const page_load_metrics::PageLoadTiming& timing) { |
78 if (!timing.first_contentful_paint) | |
79 return; | |
80 | |
81 ukm::UkmService* ukm_service = g_browser_process->ukm_service(); | 88 ukm::UkmService* ukm_service = g_browser_process->ukm_service(); |
82 std::unique_ptr<ukm::UkmEntryBuilder> builder = | 89 std::unique_ptr<ukm::UkmEntryBuilder> builder = |
83 ukm_service->GetEntryBuilder(source_id_, internal::kUkmPageLoadEventName); | 90 ukm_service->GetEntryBuilder(source_id_, internal::kUkmPageLoadEventName); |
84 builder->AddMetric(internal::kUkmFirstContentfulPaintName, | 91 if (timing.parse_start) { |
85 timing.first_contentful_paint.value().InMilliseconds()); | 92 builder->AddMetric(internal::kUkmParseStartName, |
93 timing.parse_start.value().InMilliseconds()); | |
94 } | |
95 if (timing.dom_content_loaded_event_start) { | |
96 builder->AddMetric( | |
97 internal::kUkmDomContentLoadedName, | |
98 timing.dom_content_loaded_event_start.value().InMilliseconds()); | |
99 } | |
100 if (timing.load_event_start) { | |
101 builder->AddMetric(internal::kUkmLoadEventName, | |
102 timing.load_event_start.value().InMilliseconds()); | |
103 } | |
104 if (timing.first_contentful_paint) { | |
105 builder->AddMetric(internal::kUkmFirstContentfulPaintName, | |
106 timing.first_contentful_paint.value().InMilliseconds()); | |
107 } | |
108 if (timing.first_meaningful_paint) { | |
109 builder->AddMetric(internal::kUkmFirstMeaningfulPaintName, | |
110 timing.first_meaningful_paint.value().InMilliseconds()); | |
111 } | |
86 } | 112 } |
87 | 113 |
88 void UkmPageLoadMetricsObserver::RecordPageLoadExtraInfoMetrics( | 114 void UkmPageLoadMetricsObserver::RecordPageLoadExtraInfoMetrics( |
89 const page_load_metrics::PageLoadExtraInfo& info) { | 115 const page_load_metrics::PageLoadExtraInfo& info, |
116 base::TimeTicks app_background_time) { | |
90 ukm::UkmService* ukm_service = g_browser_process->ukm_service(); | 117 ukm::UkmService* ukm_service = g_browser_process->ukm_service(); |
91 ukm_service->UpdateSourceURL(source_id_, info.url); | 118 ukm_service->UpdateSourceURL(source_id_, info.url); |
119 | |
120 base::Optional<base::TimeDelta> foreground_duration = | |
121 page_load_metrics::GetInitialForegroundDuration(info, | |
122 app_background_time); | |
123 if (foreground_duration) { | |
124 std::unique_ptr<ukm::UkmEntryBuilder> builder = | |
125 ukm_service->GetEntryBuilder(source_id_, | |
126 internal::kUkmPageLoadEventName); | |
127 builder->AddMetric(internal::kUkmForegroundDurationName, | |
128 foreground_duration.value().InMilliseconds()); | |
129 } | |
92 } | 130 } |
OLD | NEW |