Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(221)

Side by Side Diff: chrome/browser/page_load_metrics/observers/ukm_page_load_metrics_observer.cc

Issue 2727143004: Add additional PageLoad UKM metrics using new UKM client API. (Closed)
Patch Set: rebase Created 3 years, 9 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
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
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 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698