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

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

Issue 2833523002: Adding opt out and previews type information to DRP pingback (Closed)
Patch Set: moved definition up Created 3 years, 8 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/metrics/histogram_macros.h" 9 #include "base/metrics/histogram_macros.h"
10 #include "base/optional.h" 10 #include "base/optional.h"
(...skipping 100 matching lines...) Expand 10 before | Expand all | Expand 10 after
111 const char kBytesInflation[] = "Experimental.Bytes.Network.Inflation"; 111 const char kBytesInflation[] = "Experimental.Bytes.Network.Inflation";
112 112
113 } // namespace internal 113 } // namespace internal
114 114
115 DataReductionProxyMetricsObserver::DataReductionProxyMetricsObserver() 115 DataReductionProxyMetricsObserver::DataReductionProxyMetricsObserver()
116 : browser_context_(nullptr), 116 : browser_context_(nullptr),
117 num_data_reduction_proxy_resources_(0), 117 num_data_reduction_proxy_resources_(0),
118 num_network_resources_(0), 118 num_network_resources_(0),
119 original_network_bytes_(0), 119 original_network_bytes_(0),
120 network_bytes_proxied_(0), 120 network_bytes_proxied_(0),
121 network_bytes_(0) {} 121 network_bytes_(0),
122 tab_identifier_key_(nullptr) {}
122 123
123 DataReductionProxyMetricsObserver::~DataReductionProxyMetricsObserver() {} 124 DataReductionProxyMetricsObserver::~DataReductionProxyMetricsObserver() {}
124 125
125 // Check if the NavigationData indicates anything about the DataReductionProxy. 126 // Check if the NavigationData indicates anything about the DataReductionProxy.
126 page_load_metrics::PageLoadMetricsObserver::ObservePolicy 127 page_load_metrics::PageLoadMetricsObserver::ObservePolicy
127 DataReductionProxyMetricsObserver::OnCommit( 128 DataReductionProxyMetricsObserver::OnCommit(
128 content::NavigationHandle* navigation_handle) { 129 content::NavigationHandle* navigation_handle) {
129 // This BrowserContext is valid for the lifetime of 130 // This BrowserContext is valid for the lifetime of
130 // DataReductionProxyMetricsObserver. BrowserContext is always valid and 131 // DataReductionProxyMetricsObserver. BrowserContext is always valid and
131 // non-nullptr in NavigationControllerImpl, which is a member of WebContents. 132 // non-nullptr in NavigationControllerImpl, which is a member of WebContents.
132 // A raw pointer to BrowserContext taken at this point will be valid until 133 // A raw pointer to BrowserContext taken at this point will be valid until
133 // after WebContent's destructor. The latest that PageLoadTracker's destructor 134 // after WebContent's destructor. The latest that PageLoadTracker's destructor
134 // will be called is in MetricsWebContentsObserver's destrcutor, which is 135 // will be called is in MetricsWebContentsObserver's destrcutor, which is
135 // called in WebContents destructor. 136 // called in WebContents destructor.
136 browser_context_ = navigation_handle->GetWebContents()->GetBrowserContext(); 137 browser_context_ = navigation_handle->GetWebContents()->GetBrowserContext();
137 // As documented in content/public/browser/navigation_handle.h, this 138 // As documented in content/public/browser/navigation_handle.h, this
138 // NavigationData is a clone of the NavigationData instance returned from 139 // NavigationData is a clone of the NavigationData instance returned from
139 // ResourceDispatcherHostDelegate::GetNavigationData during commit. 140 // ResourceDispatcherHostDelegate::GetNavigationData during commit.
140 // Because ChromeResourceDispatcherHostDelegate always returns a 141 // Because ChromeResourceDispatcherHostDelegate always returns a
141 // ChromeNavigationData, it is safe to static_cast here. 142 // ChromeNavigationData, it is safe to static_cast here.
142 ChromeNavigationData* chrome_navigation_data = 143 ChromeNavigationData* chrome_navigation_data =
143 static_cast<ChromeNavigationData*>( 144 static_cast<ChromeNavigationData*>(
144 navigation_handle->GetNavigationData()); 145 navigation_handle->GetNavigationData());
145 if (!chrome_navigation_data) 146 if (!chrome_navigation_data)
146 return STOP_OBSERVING; 147 return STOP_OBSERVING;
147 data_reduction_proxy::DataReductionProxyData* data = 148 data_reduction_proxy::DataReductionProxyData* data =
148 chrome_navigation_data->GetDataReductionProxyData(); 149 chrome_navigation_data->GetDataReductionProxyData();
149 if (!data || !data->used_data_reduction_proxy()) 150 if (!data || !data->used_data_reduction_proxy())
150 return STOP_OBSERVING; 151 return STOP_OBSERVING;
152 tab_identifier_key_ = navigation_handle->GetWebContents();
Charlie Harrison 2017/04/20 14:09:00 This makes me really nervous. Is there any evidenc
RyanSturm 2017/04/20 15:37:57 I agree this is a little odd. How about I rework t
Charlie Harrison 2017/04/20 16:35:06 This approach sounds much better, though I'm not s
bengr 2017/04/20 17:36:18 Likewise, I'm not sure either.
RyanSturm 2017/04/20 20:25:44 Done.
151 data_ = data->DeepCopy(); 153 data_ = data->DeepCopy();
152 // DataReductionProxy page loads should only occur on HTTP navigations. 154 // DataReductionProxy page loads should only occur on HTTP navigations.
153 DCHECK(!navigation_handle->GetURL().SchemeIsCryptographic()); 155 DCHECK(!navigation_handle->GetURL().SchemeIsCryptographic());
154 return CONTINUE_OBSERVING; 156 return CONTINUE_OBSERVING;
155 } 157 }
156 158
157 page_load_metrics::PageLoadMetricsObserver::ObservePolicy 159 page_load_metrics::PageLoadMetricsObserver::ObservePolicy
158 DataReductionProxyMetricsObserver::OnStart( 160 DataReductionProxyMetricsObserver::OnStart(
159 content::NavigationHandle* navigation_handle, 161 content::NavigationHandle* navigation_handle,
160 const GURL& currently_committed_url, 162 const GURL& currently_committed_url,
161 bool started_in_foreground) { 163 bool started_in_foreground) {
162 if (!started_in_foreground) 164 if (!started_in_foreground)
163 return STOP_OBSERVING; 165 return STOP_OBSERVING;
164 return CONTINUE_OBSERVING; 166 return CONTINUE_OBSERVING;
165 } 167 }
166 168
167 page_load_metrics::PageLoadMetricsObserver::ObservePolicy 169 page_load_metrics::PageLoadMetricsObserver::ObservePolicy
168 DataReductionProxyMetricsObserver::FlushMetricsOnAppEnterBackground( 170 DataReductionProxyMetricsObserver::FlushMetricsOnAppEnterBackground(
169 const page_load_metrics::PageLoadTiming& timing, 171 const page_load_metrics::PageLoadTiming& timing,
170 const page_load_metrics::PageLoadExtraInfo& info) { 172 const page_load_metrics::PageLoadExtraInfo& info) {
171 // FlushMetricsOnAppEnterBackground is invoked on Android in cases where the 173 // FlushMetricsOnAppEnterBackground is invoked on Android in cases where the
172 // app is about to be backgrounded, as part of the Activity.onPause() 174 // app is about to be backgrounded, as part of the Activity.onPause()
173 // flow. After this method is invoked, Chrome may be killed without further 175 // flow. After this method is invoked, Chrome may be killed without further
174 // notification, so we send a pingback with data collected up to this point. 176 // notification, so we send a pingback with data collected up to this point.
175 if (info.did_commit) { 177 if (info.did_commit) {
176 RecordPageSizeUMA(); 178 RecordPageSizeUMA();
177 SendPingback(timing, info); 179 SendPingback(timing, info, true /* app_background_occured */);
178 } 180 }
179 return STOP_OBSERVING; 181 return STOP_OBSERVING;
180 } 182 }
181 183
182 void DataReductionProxyMetricsObserver::OnComplete( 184 void DataReductionProxyMetricsObserver::OnComplete(
183 const page_load_metrics::PageLoadTiming& timing, 185 const page_load_metrics::PageLoadTiming& timing,
184 const page_load_metrics::PageLoadExtraInfo& info) { 186 const page_load_metrics::PageLoadExtraInfo& info) {
185 RecordPageSizeUMA(); 187 RecordPageSizeUMA();
186 SendPingback(timing, info); 188 SendPingback(timing, info, false /* app_background_occured */);
187 } 189 }
188 190
189 void DataReductionProxyMetricsObserver::RecordPageSizeUMA() const { 191 void DataReductionProxyMetricsObserver::RecordPageSizeUMA() const {
190 if (!data_) 192 if (!data_)
191 return; 193 return;
192 194
193 // If the first request didn't complete, don't record UMA. 195 // If the first request didn't complete, don't record UMA.
194 if (num_network_resources_ == 0) 196 if (num_network_resources_ == 0)
195 return; 197 return;
196 198
(...skipping 67 matching lines...) Expand 10 before | Expand all | Expand 10 after
264 PAGE_BYTES_HISTOGRAM(GetConstHistogramWithSuffix(internal::kBytesSavings), 266 PAGE_BYTES_HISTOGRAM(GetConstHistogramWithSuffix(internal::kBytesSavings),
265 original_network_bytes_ - network_bytes_); 267 original_network_bytes_ - network_bytes_);
266 } else { 268 } else {
267 PAGE_BYTES_HISTOGRAM(GetConstHistogramWithSuffix(internal::kBytesInflation), 269 PAGE_BYTES_HISTOGRAM(GetConstHistogramWithSuffix(internal::kBytesInflation),
268 network_bytes_proxied_ - original_network_bytes_); 270 network_bytes_proxied_ - original_network_bytes_);
269 } 271 }
270 } 272 }
271 273
272 void DataReductionProxyMetricsObserver::SendPingback( 274 void DataReductionProxyMetricsObserver::SendPingback(
273 const page_load_metrics::PageLoadTiming& timing, 275 const page_load_metrics::PageLoadTiming& timing,
274 const page_load_metrics::PageLoadExtraInfo& info) { 276 const page_load_metrics::PageLoadExtraInfo& info,
277 bool app_background_occured) {
bengr 2017/04/20 17:36:18 occurred!
RyanSturm 2017/04/20 20:25:44 Done.
275 // TODO(ryansturm): Move to OnFirstBackgroundEvent to handle some fast 278 // TODO(ryansturm): Move to OnFirstBackgroundEvent to handle some fast
276 // shutdown cases. crbug.com/618072 279 // shutdown cases. crbug.com/618072
277 if (!browser_context_ || !data_) 280 if (!browser_context_ || !data_)
278 return; 281 return;
279 if (data_reduction_proxy::params::IsIncludedInHoldbackFieldTrial() || 282 if (data_reduction_proxy::params::IsIncludedInHoldbackFieldTrial() ||
280 data_reduction_proxy::params::IsIncludedInTamperDetectionExperiment()) { 283 data_reduction_proxy::params::IsIncludedInTamperDetectionExperiment()) {
281 return; 284 return;
282 } 285 }
283 // Only consider timing events that happened before the first background 286 // Only consider timing events that happened before the first background
284 // event. 287 // event.
(...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after
317 if (WasStartedInForegroundOptionalEventInForeground(timing.parse_stop, 320 if (WasStartedInForegroundOptionalEventInForeground(timing.parse_stop,
318 info)) { 321 info)) {
319 parse_stop = timing.parse_stop; 322 parse_stop = timing.parse_stop;
320 } 323 }
321 324
322 DataReductionProxyPageLoadTiming data_reduction_proxy_timing( 325 DataReductionProxyPageLoadTiming data_reduction_proxy_timing(
323 timing.navigation_start, response_start, load_event_start, 326 timing.navigation_start, response_start, load_event_start,
324 first_image_paint, first_contentful_paint, 327 first_image_paint, first_contentful_paint,
325 experimental_first_meaningful_paint, 328 experimental_first_meaningful_paint,
326 parse_blocked_on_script_load_duration, parse_stop, network_bytes_, 329 parse_blocked_on_script_load_duration, parse_stop, network_bytes_,
327 original_network_bytes_); 330 original_network_bytes_, app_background_occured);
328 GetPingbackClient()->SendPingback(*data_, data_reduction_proxy_timing); 331 GetPingbackClient()->SendPingback(*data_, data_reduction_proxy_timing,
332 tab_identifier_key_);
329 } 333 }
330 334
331 void DataReductionProxyMetricsObserver::OnDomContentLoadedEventStart( 335 void DataReductionProxyMetricsObserver::OnDomContentLoadedEventStart(
332 const page_load_metrics::PageLoadTiming& timing, 336 const page_load_metrics::PageLoadTiming& timing,
333 const page_load_metrics::PageLoadExtraInfo& info) { 337 const page_load_metrics::PageLoadExtraInfo& info) {
334 RECORD_FOREGROUND_HISTOGRAMS_FOR_SUFFIX( 338 RECORD_FOREGROUND_HISTOGRAMS_FOR_SUFFIX(
335 info, data_, timing.dom_content_loaded_event_start, 339 info, data_, timing.dom_content_loaded_event_start,
336 internal::kHistogramDOMContentLoadedEventFiredSuffix); 340 internal::kHistogramDOMContentLoadedEventFiredSuffix);
337 } 341 }
338 342
(...skipping 68 matching lines...) Expand 10 before | Expand all | Expand 10 after
407 timing.parse_stop.value() - timing.parse_start.value(); 411 timing.parse_stop.value() - timing.parse_start.value();
408 RECORD_HISTOGRAMS_FOR_SUFFIX(data_, parse_duration, 412 RECORD_HISTOGRAMS_FOR_SUFFIX(data_, parse_duration,
409 internal::kHistogramParseDurationSuffix); 413 internal::kHistogramParseDurationSuffix);
410 RECORD_HISTOGRAMS_FOR_SUFFIX( 414 RECORD_HISTOGRAMS_FOR_SUFFIX(
411 data_, timing.parse_blocked_on_script_load_duration.value(), 415 data_, timing.parse_blocked_on_script_load_duration.value(),
412 internal::kHistogramParseBlockedOnScriptLoadSuffix); 416 internal::kHistogramParseBlockedOnScriptLoadSuffix);
413 } 417 }
414 418
415 void DataReductionProxyMetricsObserver::OnLoadedResource( 419 void DataReductionProxyMetricsObserver::OnLoadedResource(
416 const page_load_metrics::ExtraRequestInfo& extra_request_info) { 420 const page_load_metrics::ExtraRequestInfo& extra_request_info) {
421 if (extra_request_info.was_lofi_response)
422 data_->set_lofi_received(true);
417 if (extra_request_info.was_cached) 423 if (extra_request_info.was_cached)
418 return; 424 return;
419 original_network_bytes_ += extra_request_info.original_network_content_length; 425 original_network_bytes_ += extra_request_info.original_network_content_length;
420 network_bytes_ += extra_request_info.raw_body_bytes; 426 network_bytes_ += extra_request_info.raw_body_bytes;
421 num_network_resources_++; 427 num_network_resources_++;
422 if (!extra_request_info.data_reduction_proxy_used) 428 if (!extra_request_info.data_reduction_proxy_used)
423 return; 429 return;
424 num_data_reduction_proxy_resources_++; 430 num_data_reduction_proxy_resources_++;
425 network_bytes_proxied_ += extra_request_info.raw_body_bytes; 431 network_bytes_proxied_ += extra_request_info.raw_body_bytes;
426 } 432 }
427 433
428 DataReductionProxyPingbackClient* 434 DataReductionProxyPingbackClient*
429 DataReductionProxyMetricsObserver::GetPingbackClient() const { 435 DataReductionProxyMetricsObserver::GetPingbackClient() const {
430 return DataReductionProxyChromeSettingsFactory::GetForBrowserContext( 436 return DataReductionProxyChromeSettingsFactory::GetForBrowserContext(
431 browser_context_) 437 browser_context_)
432 ->data_reduction_proxy_service() 438 ->data_reduction_proxy_service()
433 ->pingback_client(); 439 ->pingback_client();
434 } 440 }
435 441
436 } // namespace data_reduction_proxy 442 } // namespace data_reduction_proxy
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698