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

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

Issue 2305013002: Adding parse UMA and pingback metrics (Closed)
Patch Set: tbansal comments Created 4 years, 3 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 2016 The Chromium Authors. All rights reserved. 1 // Copyright 2016 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/data_reduction_proxy_metric s_observer.h" 5 #include "chrome/browser/page_load_metrics/observers/data_reduction_proxy_metric s_observer.h"
6 6
7 #include <string> 7 #include <string>
8 8
9 #include "base/optional.h" 9 #include "base/optional.h"
10 #include "base/time/time.h" 10 #include "base/time/time.h"
(...skipping 19 matching lines...) Expand all
30 30
31 bool ShouldRecordHistogram(const DataReductionProxyData* data, 31 bool ShouldRecordHistogram(const DataReductionProxyData* data,
32 const base::Optional<base::TimeDelta>& event, 32 const base::Optional<base::TimeDelta>& event,
33 const page_load_metrics::PageLoadExtraInfo& info) { 33 const page_load_metrics::PageLoadExtraInfo& info) {
34 return data && data->used_data_reduction_proxy() && 34 return data && data->used_data_reduction_proxy() &&
35 WasStartedInForegroundOptionalEventInForeground(event, info); 35 WasStartedInForegroundOptionalEventInForeground(event, info);
36 } 36 }
37 37
38 // A macro is needed because PAGE_LOAD_HISTOGRAM creates a static instance of 38 // A macro is needed because PAGE_LOAD_HISTOGRAM creates a static instance of
39 // the histogram. A distinct histogram is needed for each place that calls 39 // the histogram. A distinct histogram is needed for each place that calls
40 // RECORD_HISTOGRAMS_FOR_SUFFIX. 40 // RECORD_HISTOGRAMS_FOR_SUFFIX. |event| is the timing event representing when
41 #define RECORD_HISTOGRAMS_FOR_SUFFIX(data, event, info, histogram_suffix) \ 41 // |value| became available.
42 #define RECORD_HISTOGRAMS_FOR_SUFFIX(data, event, value, info, \
43 histogram_suffix) \
42 do { \ 44 do { \
43 if (ShouldRecordHistogram(data.get(), event, info)) { \ 45 if (ShouldRecordHistogram(data.get(), event, info)) { \
44 PAGE_LOAD_HISTOGRAM( \ 46 PAGE_LOAD_HISTOGRAM( \
45 std::string(internal::kHistogramDataReductionProxyPrefix) \ 47 std::string(internal::kHistogramDataReductionProxyPrefix) \
46 .append(histogram_suffix), \ 48 .append(histogram_suffix), \
47 event.value()); \ 49 value); \
48 if (data->lofi_requested()) { \ 50 if (data->lofi_requested()) { \
49 PAGE_LOAD_HISTOGRAM( \ 51 PAGE_LOAD_HISTOGRAM( \
50 std::string(internal::kHistogramDataReductionProxyLoFiOnPrefix) \ 52 std::string(internal::kHistogramDataReductionProxyLoFiOnPrefix) \
51 .append(histogram_suffix), \ 53 .append(histogram_suffix), \
52 event.value()); \ 54 value); \
53 } \ 55 } \
54 } \ 56 } \
55 } while (false) 57 } while (false)
56 58
57 } // namespace 59 } // namespace
58 60
59 namespace internal { 61 namespace internal {
60 62
61 const char kHistogramDataReductionProxyPrefix[] = 63 const char kHistogramDataReductionProxyPrefix[] =
62 "PageLoad.Clients.DataReductionProxy."; 64 "PageLoad.Clients.DataReductionProxy.";
63 const char kHistogramDataReductionProxyLoFiOnPrefix[] = 65 const char kHistogramDataReductionProxyLoFiOnPrefix[] =
64 "PageLoad.Clients.DataReductionProxy.LoFiOn."; 66 "PageLoad.Clients.DataReductionProxy.LoFiOn.";
65 const char kHistogramDOMContentLoadedEventFiredSuffix[] = 67 const char kHistogramDOMContentLoadedEventFiredSuffix[] =
66 "DocumentTiming.NavigationToDOMContentLoadedEventFired"; 68 "DocumentTiming.NavigationToDOMContentLoadedEventFired";
67 const char kHistogramFirstLayoutSuffix[] = 69 const char kHistogramFirstLayoutSuffix[] =
68 "DocumentTiming.NavigationToFirstLayout"; 70 "DocumentTiming.NavigationToFirstLayout";
69 const char kHistogramLoadEventFiredSuffix[] = 71 const char kHistogramLoadEventFiredSuffix[] =
70 "DocumentTiming.NavigationToLoadEventFired"; 72 "DocumentTiming.NavigationToLoadEventFired";
71 const char kHistogramFirstContentfulPaintSuffix[] = 73 const char kHistogramFirstContentfulPaintSuffix[] =
72 "PaintTiming.NavigationToFirstContentfulPaint"; 74 "PaintTiming.NavigationToFirstContentfulPaint";
73 const char kHistogramFirstImagePaintSuffix[] = 75 const char kHistogramFirstImagePaintSuffix[] =
74 "PaintTiming.NavigationToFirstImagePaint"; 76 "PaintTiming.NavigationToFirstImagePaint";
75 const char kHistogramFirstPaintSuffix[] = "PaintTiming.NavigationToFirstPaint"; 77 const char kHistogramFirstPaintSuffix[] = "PaintTiming.NavigationToFirstPaint";
76 const char kHistogramFirstTextPaintSuffix[] = 78 const char kHistogramFirstTextPaintSuffix[] =
77 "PaintTiming.NavigationToFirstTextPaint"; 79 "PaintTiming.NavigationToFirstTextPaint";
78 const char kHistogramParseStartSuffix[] = "ParseTiming.NavigationToParseStart"; 80 const char kHistogramParseStartSuffix[] = "ParseTiming.NavigationToParseStart";
81 const char kHistogramParseBlockedOnScriptLoadSuffix[] =
82 "ParseTiming.ParseBlockedOnScriptLoad";
83 const char kHistogramParseDurationSuffix[] = "ParseTiming.ParseDuration";
79 84
80 } // namespace internal 85 } // namespace internal
81 86
82 DataReductionProxyMetricsObserver::DataReductionProxyMetricsObserver() 87 DataReductionProxyMetricsObserver::DataReductionProxyMetricsObserver()
83 : browser_context_(nullptr) {} 88 : browser_context_(nullptr) {}
84 89
85 DataReductionProxyMetricsObserver::~DataReductionProxyMetricsObserver() {} 90 DataReductionProxyMetricsObserver::~DataReductionProxyMetricsObserver() {}
86 91
87 // Check if the NavigationData indicates anything about the DataReductionProxy. 92 // Check if the NavigationData indicates anything about the DataReductionProxy.
88 void DataReductionProxyMetricsObserver::OnCommit( 93 void DataReductionProxyMetricsObserver::OnCommit(
(...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after
124 if (data_reduction_proxy::params::IsIncludedInHoldbackFieldTrial() || 129 if (data_reduction_proxy::params::IsIncludedInHoldbackFieldTrial() ||
125 data_reduction_proxy::params::IsIncludedInTamperDetectionExperiment()) { 130 data_reduction_proxy::params::IsIncludedInTamperDetectionExperiment()) {
126 return; 131 return;
127 } 132 }
128 // Only consider timing events that happened before the first background 133 // Only consider timing events that happened before the first background
129 // event. 134 // event.
130 base::Optional<base::TimeDelta> response_start; 135 base::Optional<base::TimeDelta> response_start;
131 base::Optional<base::TimeDelta> load_event_start; 136 base::Optional<base::TimeDelta> load_event_start;
132 base::Optional<base::TimeDelta> first_image_paint; 137 base::Optional<base::TimeDelta> first_image_paint;
133 base::Optional<base::TimeDelta> first_contentful_paint; 138 base::Optional<base::TimeDelta> first_contentful_paint;
139 base::Optional<base::TimeDelta> parse_blocked_on_script_load_duration;
140 base::Optional<base::TimeDelta> parse_stop;
134 if (WasStartedInForegroundOptionalEventInForeground(timing.response_start, 141 if (WasStartedInForegroundOptionalEventInForeground(timing.response_start,
135 info)) { 142 info)) {
136 response_start = timing.response_start; 143 response_start = timing.response_start;
137 } 144 }
138 if (WasStartedInForegroundOptionalEventInForeground(timing.load_event_start, 145 if (WasStartedInForegroundOptionalEventInForeground(timing.load_event_start,
139 info)) { 146 info)) {
140 load_event_start = timing.load_event_start; 147 load_event_start = timing.load_event_start;
141 } 148 }
142 if (WasStartedInForegroundOptionalEventInForeground(timing.first_image_paint, 149 if (WasStartedInForegroundOptionalEventInForeground(timing.first_image_paint,
143 info)) { 150 info)) {
144 first_image_paint = timing.first_image_paint; 151 first_image_paint = timing.first_image_paint;
145 } 152 }
146 if (WasStartedInForegroundOptionalEventInForeground( 153 if (WasStartedInForegroundOptionalEventInForeground(
147 timing.first_contentful_paint, info)) { 154 timing.first_contentful_paint, info)) {
148 first_contentful_paint = timing.first_contentful_paint; 155 first_contentful_paint = timing.first_contentful_paint;
149 } 156 }
157 if (WasStartedInForegroundOptionalEventInForeground(
158 timing.parse_blocked_on_script_load_duration, info)) {
159 parse_blocked_on_script_load_duration =
160 timing.parse_blocked_on_script_load_duration;
161 }
162 if (WasStartedInForegroundOptionalEventInForeground(timing.parse_stop,
163 info)) {
164 parse_stop = timing.parse_stop;
165 }
166
150 DataReductionProxyPageLoadTiming data_reduction_proxy_timing( 167 DataReductionProxyPageLoadTiming data_reduction_proxy_timing(
151 timing.navigation_start, response_start, load_event_start, 168 timing.navigation_start, response_start, load_event_start,
152 first_image_paint, first_contentful_paint); 169 first_image_paint, first_contentful_paint,
170 parse_blocked_on_script_load_duration, parse_stop);
153 GetPingbackClient()->SendPingback(*data_, data_reduction_proxy_timing); 171 GetPingbackClient()->SendPingback(*data_, data_reduction_proxy_timing);
154 } 172 }
155 173
156 void DataReductionProxyMetricsObserver::OnDomContentLoadedEventStart( 174 void DataReductionProxyMetricsObserver::OnDomContentLoadedEventStart(
157 const page_load_metrics::PageLoadTiming& timing, 175 const page_load_metrics::PageLoadTiming& timing,
158 const page_load_metrics::PageLoadExtraInfo& info) { 176 const page_load_metrics::PageLoadExtraInfo& info) {
159 RECORD_HISTOGRAMS_FOR_SUFFIX( 177 RECORD_HISTOGRAMS_FOR_SUFFIX(
160 data_, timing.dom_content_loaded_event_start, info, 178 data_, timing.dom_content_loaded_event_start,
179 timing.dom_content_loaded_event_start.value(), info,
161 internal::kHistogramDOMContentLoadedEventFiredSuffix); 180 internal::kHistogramDOMContentLoadedEventFiredSuffix);
162 } 181 }
163 182
164 void DataReductionProxyMetricsObserver::OnLoadEventStart( 183 void DataReductionProxyMetricsObserver::OnLoadEventStart(
165 const page_load_metrics::PageLoadTiming& timing, 184 const page_load_metrics::PageLoadTiming& timing,
166 const page_load_metrics::PageLoadExtraInfo& info) { 185 const page_load_metrics::PageLoadExtraInfo& info) {
167 RECORD_HISTOGRAMS_FOR_SUFFIX(data_, timing.load_event_start, info, 186 RECORD_HISTOGRAMS_FOR_SUFFIX(data_, timing.load_event_start,
187 timing.load_event_start.value(), info,
168 internal::kHistogramLoadEventFiredSuffix); 188 internal::kHistogramLoadEventFiredSuffix);
169 } 189 }
170 190
171 void DataReductionProxyMetricsObserver::OnFirstLayout( 191 void DataReductionProxyMetricsObserver::OnFirstLayout(
172 const page_load_metrics::PageLoadTiming& timing, 192 const page_load_metrics::PageLoadTiming& timing,
173 const page_load_metrics::PageLoadExtraInfo& info) { 193 const page_load_metrics::PageLoadExtraInfo& info) {
174 RECORD_HISTOGRAMS_FOR_SUFFIX(data_, timing.first_layout, info, 194 RECORD_HISTOGRAMS_FOR_SUFFIX(data_, timing.first_layout,
195 timing.first_layout.value(), info,
175 internal::kHistogramFirstLayoutSuffix); 196 internal::kHistogramFirstLayoutSuffix);
176 } 197 }
177 198
178 void DataReductionProxyMetricsObserver::OnFirstPaint( 199 void DataReductionProxyMetricsObserver::OnFirstPaint(
179 const page_load_metrics::PageLoadTiming& timing, 200 const page_load_metrics::PageLoadTiming& timing,
180 const page_load_metrics::PageLoadExtraInfo& info) { 201 const page_load_metrics::PageLoadExtraInfo& info) {
181 RECORD_HISTOGRAMS_FOR_SUFFIX(data_, timing.first_paint, info, 202 RECORD_HISTOGRAMS_FOR_SUFFIX(data_, timing.first_paint,
203 timing.first_paint.value(), info,
182 internal::kHistogramFirstPaintSuffix); 204 internal::kHistogramFirstPaintSuffix);
183 } 205 }
184 206
185 void DataReductionProxyMetricsObserver::OnFirstTextPaint( 207 void DataReductionProxyMetricsObserver::OnFirstTextPaint(
186 const page_load_metrics::PageLoadTiming& timing, 208 const page_load_metrics::PageLoadTiming& timing,
187 const page_load_metrics::PageLoadExtraInfo& info) { 209 const page_load_metrics::PageLoadExtraInfo& info) {
188 RECORD_HISTOGRAMS_FOR_SUFFIX(data_, timing.first_text_paint, info, 210 RECORD_HISTOGRAMS_FOR_SUFFIX(data_, timing.first_text_paint,
211 timing.first_text_paint.value(), info,
189 internal::kHistogramFirstTextPaintSuffix); 212 internal::kHistogramFirstTextPaintSuffix);
190 } 213 }
191 214
192 void DataReductionProxyMetricsObserver::OnFirstImagePaint( 215 void DataReductionProxyMetricsObserver::OnFirstImagePaint(
193 const page_load_metrics::PageLoadTiming& timing, 216 const page_load_metrics::PageLoadTiming& timing,
194 const page_load_metrics::PageLoadExtraInfo& info) { 217 const page_load_metrics::PageLoadExtraInfo& info) {
195 RECORD_HISTOGRAMS_FOR_SUFFIX(data_, timing.first_image_paint, info, 218 RECORD_HISTOGRAMS_FOR_SUFFIX(data_, timing.first_image_paint,
219 timing.first_image_paint.value(), info,
196 internal::kHistogramFirstImagePaintSuffix); 220 internal::kHistogramFirstImagePaintSuffix);
197 } 221 }
198 222
199 void DataReductionProxyMetricsObserver::OnFirstContentfulPaint( 223 void DataReductionProxyMetricsObserver::OnFirstContentfulPaint(
200 const page_load_metrics::PageLoadTiming& timing, 224 const page_load_metrics::PageLoadTiming& timing,
201 const page_load_metrics::PageLoadExtraInfo& info) { 225 const page_load_metrics::PageLoadExtraInfo& info) {
202 RECORD_HISTOGRAMS_FOR_SUFFIX(data_, timing.first_contentful_paint, info, 226 RECORD_HISTOGRAMS_FOR_SUFFIX(data_, timing.first_contentful_paint,
227 timing.first_contentful_paint.value(), info,
203 internal::kHistogramFirstContentfulPaintSuffix); 228 internal::kHistogramFirstContentfulPaintSuffix);
204 } 229 }
205 230
206 void DataReductionProxyMetricsObserver::OnParseStart( 231 void DataReductionProxyMetricsObserver::OnParseStart(
207 const page_load_metrics::PageLoadTiming& timing, 232 const page_load_metrics::PageLoadTiming& timing,
208 const page_load_metrics::PageLoadExtraInfo& info) { 233 const page_load_metrics::PageLoadExtraInfo& info) {
209 RECORD_HISTOGRAMS_FOR_SUFFIX(data_, timing.parse_start, info, 234 RECORD_HISTOGRAMS_FOR_SUFFIX(data_, timing.parse_start,
235 timing.parse_start.value(), info,
210 internal::kHistogramParseStartSuffix); 236 internal::kHistogramParseStartSuffix);
211 } 237 }
212 238
239 void DataReductionProxyMetricsObserver::OnParseStop(
240 const page_load_metrics::PageLoadTiming& timing,
241 const page_load_metrics::PageLoadExtraInfo& info) {
242 base::TimeDelta parse_duration =
243 timing.parse_stop.value() - timing.parse_start.value();
244 RECORD_HISTOGRAMS_FOR_SUFFIX(data_, timing.parse_stop, parse_duration, info,
245 internal::kHistogramParseDurationSuffix);
246 RECORD_HISTOGRAMS_FOR_SUFFIX(
247 data_, timing.parse_stop,
248 timing.parse_blocked_on_script_load_duration.value(), info,
249 internal::kHistogramParseBlockedOnScriptLoadSuffix);
250 }
251
213 DataReductionProxyPingbackClient* 252 DataReductionProxyPingbackClient*
214 DataReductionProxyMetricsObserver::GetPingbackClient() const { 253 DataReductionProxyMetricsObserver::GetPingbackClient() const {
215 return DataReductionProxyChromeSettingsFactory::GetForBrowserContext( 254 return DataReductionProxyChromeSettingsFactory::GetForBrowserContext(
216 browser_context_) 255 browser_context_)
217 ->data_reduction_proxy_service() 256 ->data_reduction_proxy_service()
218 ->pingback_client(); 257 ->pingback_client();
219 } 258 }
220 259
221 } // namespace data_reduction_proxy 260 } // namespace data_reduction_proxy
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698