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

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: 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 20 matching lines...) Expand all
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.
41 #define RECORD_HISTOGRAMS_FOR_SUFFIX(data, event, info, histogram_suffix) \ 41 #define RECORD_HISTOGRAMS_FOR_SUFFIX(data, event, value, info, \
tbansal1 2016/09/06 17:28:16 Why do you need to pass value?
RyanSturm 2016/09/06 17:47:23 parse_duration is the difference between two event
tbansal1 2016/09/06 19:44:43 Acked. Can you add a comment that event is time de
42 histogram_suffix) \
42 do { \ 43 do { \
43 if (ShouldRecordHistogram(data.get(), event, info)) { \ 44 if (ShouldRecordHistogram(data.get(), event, info)) { \
44 PAGE_LOAD_HISTOGRAM( \ 45 PAGE_LOAD_HISTOGRAM( \
45 std::string(internal::kHistogramDataReductionProxyPrefix) \ 46 std::string(internal::kHistogramDataReductionProxyPrefix) \
46 .append(histogram_suffix), \ 47 .append(histogram_suffix), \
47 event.value()); \ 48 value); \
48 if (data->lofi_requested()) { \ 49 if (data->lofi_requested()) { \
49 PAGE_LOAD_HISTOGRAM( \ 50 PAGE_LOAD_HISTOGRAM( \
50 std::string(internal::kHistogramDataReductionProxyLoFiOnPrefix) \ 51 std::string(internal::kHistogramDataReductionProxyLoFiOnPrefix) \
51 .append(histogram_suffix), \ 52 .append(histogram_suffix), \
52 event.value()); \ 53 value); \
53 } \ 54 } \
54 } \ 55 } \
55 } while (false) 56 } while (false)
56 57
57 } // namespace 58 } // namespace
58 59
59 namespace internal { 60 namespace internal {
60 61
61 const char kHistogramDataReductionProxyPrefix[] = 62 const char kHistogramDataReductionProxyPrefix[] =
62 "PageLoad.Clients.DataReductionProxy."; 63 "PageLoad.Clients.DataReductionProxy.";
63 const char kHistogramDataReductionProxyLoFiOnPrefix[] = 64 const char kHistogramDataReductionProxyLoFiOnPrefix[] =
64 "PageLoad.Clients.DataReductionProxy.LoFiOn."; 65 "PageLoad.Clients.DataReductionProxy.LoFiOn.";
65 const char kHistogramDOMContentLoadedEventFiredSuffix[] = 66 const char kHistogramDOMContentLoadedEventFiredSuffix[] =
66 "DocumentTiming.NavigationToDOMContentLoadedEventFired"; 67 "DocumentTiming.NavigationToDOMContentLoadedEventFired";
67 const char kHistogramFirstLayoutSuffix[] = 68 const char kHistogramFirstLayoutSuffix[] =
68 "DocumentTiming.NavigationToFirstLayout"; 69 "DocumentTiming.NavigationToFirstLayout";
69 const char kHistogramLoadEventFiredSuffix[] = 70 const char kHistogramLoadEventFiredSuffix[] =
70 "DocumentTiming.NavigationToLoadEventFired"; 71 "DocumentTiming.NavigationToLoadEventFired";
71 const char kHistogramFirstContentfulPaintSuffix[] = 72 const char kHistogramFirstContentfulPaintSuffix[] =
72 "PaintTiming.NavigationToFirstContentfulPaint"; 73 "PaintTiming.NavigationToFirstContentfulPaint";
73 const char kHistogramFirstImagePaintSuffix[] = 74 const char kHistogramFirstImagePaintSuffix[] =
74 "PaintTiming.NavigationToFirstImagePaint"; 75 "PaintTiming.NavigationToFirstImagePaint";
75 const char kHistogramFirstPaintSuffix[] = "PaintTiming.NavigationToFirstPaint"; 76 const char kHistogramFirstPaintSuffix[] = "PaintTiming.NavigationToFirstPaint";
76 const char kHistogramFirstTextPaintSuffix[] = 77 const char kHistogramFirstTextPaintSuffix[] =
77 "PaintTiming.NavigationToFirstTextPaint"; 78 "PaintTiming.NavigationToFirstTextPaint";
78 const char kHistogramParseStartSuffix[] = "ParseTiming.NavigationToParseStart"; 79 const char kHistogramParseStartSuffix[] = "ParseTiming.NavigationToParseStart";
80 const char kHistogramParseBlockedOnScriptLoadSuffix[] =
81 "ParseTiming.ParseBlockedOnScriptLoad";
82 const char kHistogramParseDurationSuffix[] = "ParseTiming.ParseDuration";
79 83
80 } // namespace internal 84 } // namespace internal
81 85
82 DataReductionProxyMetricsObserver::DataReductionProxyMetricsObserver() 86 DataReductionProxyMetricsObserver::DataReductionProxyMetricsObserver()
83 : browser_context_(nullptr) {} 87 : browser_context_(nullptr) {}
84 88
85 DataReductionProxyMetricsObserver::~DataReductionProxyMetricsObserver() {} 89 DataReductionProxyMetricsObserver::~DataReductionProxyMetricsObserver() {}
86 90
87 // Check if the NavigationData indicates anything about the DataReductionProxy. 91 // Check if the NavigationData indicates anything about the DataReductionProxy.
88 void DataReductionProxyMetricsObserver::OnCommit( 92 void DataReductionProxyMetricsObserver::OnCommit(
(...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after
124 if (data_reduction_proxy::params::IsIncludedInHoldbackFieldTrial() || 128 if (data_reduction_proxy::params::IsIncludedInHoldbackFieldTrial() ||
125 data_reduction_proxy::params::IsIncludedInTamperDetectionExperiment()) { 129 data_reduction_proxy::params::IsIncludedInTamperDetectionExperiment()) {
126 return; 130 return;
127 } 131 }
128 // Only consider timing events that happened before the first background 132 // Only consider timing events that happened before the first background
129 // event. 133 // event.
130 base::Optional<base::TimeDelta> response_start; 134 base::Optional<base::TimeDelta> response_start;
131 base::Optional<base::TimeDelta> load_event_start; 135 base::Optional<base::TimeDelta> load_event_start;
132 base::Optional<base::TimeDelta> first_image_paint; 136 base::Optional<base::TimeDelta> first_image_paint;
133 base::Optional<base::TimeDelta> first_contentful_paint; 137 base::Optional<base::TimeDelta> first_contentful_paint;
138 base::Optional<base::TimeDelta> parse_blocked_on_script_load_duration;
139 base::Optional<base::TimeDelta> parse_stop;
134 if (WasStartedInForegroundOptionalEventInForeground(timing.response_start, 140 if (WasStartedInForegroundOptionalEventInForeground(timing.response_start,
135 info)) { 141 info)) {
136 response_start = timing.response_start; 142 response_start = timing.response_start;
137 } 143 }
138 if (WasStartedInForegroundOptionalEventInForeground(timing.load_event_start, 144 if (WasStartedInForegroundOptionalEventInForeground(timing.load_event_start,
139 info)) { 145 info)) {
140 load_event_start = timing.load_event_start; 146 load_event_start = timing.load_event_start;
141 } 147 }
142 if (WasStartedInForegroundOptionalEventInForeground(timing.first_image_paint, 148 if (WasStartedInForegroundOptionalEventInForeground(timing.first_image_paint,
143 info)) { 149 info)) {
144 first_image_paint = timing.first_image_paint; 150 first_image_paint = timing.first_image_paint;
145 } 151 }
146 if (WasStartedInForegroundOptionalEventInForeground( 152 if (WasStartedInForegroundOptionalEventInForeground(
147 timing.first_contentful_paint, info)) { 153 timing.first_contentful_paint, info)) {
148 first_contentful_paint = timing.first_contentful_paint; 154 first_contentful_paint = timing.first_contentful_paint;
149 } 155 }
156 if (WasStartedInForegroundOptionalEventInForeground(
157 timing.parse_blocked_on_script_load_duration, info)) {
158 parse_blocked_on_script_load_duration =
159 timing.parse_blocked_on_script_load_duration;
160 }
161 if (WasStartedInForegroundOptionalEventInForeground(timing.parse_stop,
162 info)) {
163 parse_stop = timing.parse_stop;
164 }
165
150 DataReductionProxyPageLoadTiming data_reduction_proxy_timing( 166 DataReductionProxyPageLoadTiming data_reduction_proxy_timing(
151 timing.navigation_start, response_start, load_event_start, 167 timing.navigation_start, response_start, load_event_start,
152 first_image_paint, first_contentful_paint); 168 first_image_paint, first_contentful_paint,
169 parse_blocked_on_script_load_duration, parse_stop);
153 GetPingbackClient()->SendPingback(*data_, data_reduction_proxy_timing); 170 GetPingbackClient()->SendPingback(*data_, data_reduction_proxy_timing);
154 } 171 }
155 172
156 void DataReductionProxyMetricsObserver::OnDomContentLoadedEventStart( 173 void DataReductionProxyMetricsObserver::OnDomContentLoadedEventStart(
157 const page_load_metrics::PageLoadTiming& timing, 174 const page_load_metrics::PageLoadTiming& timing,
158 const page_load_metrics::PageLoadExtraInfo& info) { 175 const page_load_metrics::PageLoadExtraInfo& info) {
159 RECORD_HISTOGRAMS_FOR_SUFFIX( 176 RECORD_HISTOGRAMS_FOR_SUFFIX(
160 data_, timing.dom_content_loaded_event_start, info, 177 data_, timing.dom_content_loaded_event_start,
178 timing.dom_content_loaded_event_start.value(), info,
161 internal::kHistogramDOMContentLoadedEventFiredSuffix); 179 internal::kHistogramDOMContentLoadedEventFiredSuffix);
162 } 180 }
163 181
164 void DataReductionProxyMetricsObserver::OnLoadEventStart( 182 void DataReductionProxyMetricsObserver::OnLoadEventStart(
165 const page_load_metrics::PageLoadTiming& timing, 183 const page_load_metrics::PageLoadTiming& timing,
166 const page_load_metrics::PageLoadExtraInfo& info) { 184 const page_load_metrics::PageLoadExtraInfo& info) {
167 RECORD_HISTOGRAMS_FOR_SUFFIX(data_, timing.load_event_start, info, 185 RECORD_HISTOGRAMS_FOR_SUFFIX(data_, timing.load_event_start,
186 timing.load_event_start.value(), info,
168 internal::kHistogramLoadEventFiredSuffix); 187 internal::kHistogramLoadEventFiredSuffix);
169 } 188 }
170 189
171 void DataReductionProxyMetricsObserver::OnFirstLayout( 190 void DataReductionProxyMetricsObserver::OnFirstLayout(
172 const page_load_metrics::PageLoadTiming& timing, 191 const page_load_metrics::PageLoadTiming& timing,
173 const page_load_metrics::PageLoadExtraInfo& info) { 192 const page_load_metrics::PageLoadExtraInfo& info) {
174 RECORD_HISTOGRAMS_FOR_SUFFIX(data_, timing.first_layout, info, 193 RECORD_HISTOGRAMS_FOR_SUFFIX(data_, timing.first_layout,
194 timing.first_layout.value(), info,
175 internal::kHistogramFirstLayoutSuffix); 195 internal::kHistogramFirstLayoutSuffix);
176 } 196 }
177 197
178 void DataReductionProxyMetricsObserver::OnFirstPaint( 198 void DataReductionProxyMetricsObserver::OnFirstPaint(
179 const page_load_metrics::PageLoadTiming& timing, 199 const page_load_metrics::PageLoadTiming& timing,
180 const page_load_metrics::PageLoadExtraInfo& info) { 200 const page_load_metrics::PageLoadExtraInfo& info) {
181 RECORD_HISTOGRAMS_FOR_SUFFIX(data_, timing.first_paint, info, 201 RECORD_HISTOGRAMS_FOR_SUFFIX(data_, timing.first_paint,
202 timing.first_paint.value(), info,
182 internal::kHistogramFirstPaintSuffix); 203 internal::kHistogramFirstPaintSuffix);
183 } 204 }
184 205
185 void DataReductionProxyMetricsObserver::OnFirstTextPaint( 206 void DataReductionProxyMetricsObserver::OnFirstTextPaint(
186 const page_load_metrics::PageLoadTiming& timing, 207 const page_load_metrics::PageLoadTiming& timing,
187 const page_load_metrics::PageLoadExtraInfo& info) { 208 const page_load_metrics::PageLoadExtraInfo& info) {
188 RECORD_HISTOGRAMS_FOR_SUFFIX(data_, timing.first_text_paint, info, 209 RECORD_HISTOGRAMS_FOR_SUFFIX(data_, timing.first_text_paint,
210 timing.first_text_paint.value(), info,
189 internal::kHistogramFirstTextPaintSuffix); 211 internal::kHistogramFirstTextPaintSuffix);
190 } 212 }
191 213
192 void DataReductionProxyMetricsObserver::OnFirstImagePaint( 214 void DataReductionProxyMetricsObserver::OnFirstImagePaint(
193 const page_load_metrics::PageLoadTiming& timing, 215 const page_load_metrics::PageLoadTiming& timing,
194 const page_load_metrics::PageLoadExtraInfo& info) { 216 const page_load_metrics::PageLoadExtraInfo& info) {
195 RECORD_HISTOGRAMS_FOR_SUFFIX(data_, timing.first_image_paint, info, 217 RECORD_HISTOGRAMS_FOR_SUFFIX(data_, timing.first_image_paint,
218 timing.first_image_paint.value(), info,
196 internal::kHistogramFirstImagePaintSuffix); 219 internal::kHistogramFirstImagePaintSuffix);
197 } 220 }
198 221
199 void DataReductionProxyMetricsObserver::OnFirstContentfulPaint( 222 void DataReductionProxyMetricsObserver::OnFirstContentfulPaint(
200 const page_load_metrics::PageLoadTiming& timing, 223 const page_load_metrics::PageLoadTiming& timing,
201 const page_load_metrics::PageLoadExtraInfo& info) { 224 const page_load_metrics::PageLoadExtraInfo& info) {
202 RECORD_HISTOGRAMS_FOR_SUFFIX(data_, timing.first_contentful_paint, info, 225 RECORD_HISTOGRAMS_FOR_SUFFIX(data_, timing.first_contentful_paint,
226 timing.first_contentful_paint.value(), info,
203 internal::kHistogramFirstContentfulPaintSuffix); 227 internal::kHistogramFirstContentfulPaintSuffix);
204 } 228 }
205 229
206 void DataReductionProxyMetricsObserver::OnParseStart( 230 void DataReductionProxyMetricsObserver::OnParseStart(
207 const page_load_metrics::PageLoadTiming& timing, 231 const page_load_metrics::PageLoadTiming& timing,
208 const page_load_metrics::PageLoadExtraInfo& info) { 232 const page_load_metrics::PageLoadExtraInfo& info) {
209 RECORD_HISTOGRAMS_FOR_SUFFIX(data_, timing.parse_start, info, 233 RECORD_HISTOGRAMS_FOR_SUFFIX(data_, timing.parse_start,
234 timing.parse_start.value(), info,
210 internal::kHistogramParseStartSuffix); 235 internal::kHistogramParseStartSuffix);
211 } 236 }
212 237
238 void DataReductionProxyMetricsObserver::OnParseStop(
239 const page_load_metrics::PageLoadTiming& timing,
240 const page_load_metrics::PageLoadExtraInfo& info) {
241 base::TimeDelta parse_duration =
242 timing.parse_stop.value() - timing.parse_start.value();
243 RECORD_HISTOGRAMS_FOR_SUFFIX(data_, timing.parse_stop, parse_duration, info,
244 internal::kHistogramParseDurationSuffix);
245 RECORD_HISTOGRAMS_FOR_SUFFIX(
246 data_, timing.parse_blocked_on_script_load_duration,
247 timing.parse_blocked_on_script_load_duration.value(), info,
248 internal::kHistogramParseBlockedOnScriptLoadSuffix);
249 }
250
213 DataReductionProxyPingbackClient* 251 DataReductionProxyPingbackClient*
214 DataReductionProxyMetricsObserver::GetPingbackClient() const { 252 DataReductionProxyMetricsObserver::GetPingbackClient() const {
215 return DataReductionProxyChromeSettingsFactory::GetForBrowserContext( 253 return DataReductionProxyChromeSettingsFactory::GetForBrowserContext(
216 browser_context_) 254 browser_context_)
217 ->data_reduction_proxy_service() 255 ->data_reduction_proxy_service()
218 ->pingback_client(); 256 ->pingback_client();
219 } 257 }
220 258
221 } // namespace data_reduction_proxy 259 } // namespace data_reduction_proxy
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698