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

Side by Side Diff: components/data_use_measurement/content/data_use_measurement.cc

Issue 2338563003: Record UMA for total data usage consumed by Chromium (Closed)
Patch Set: PS 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 2015 The Chromium Authors. All rights reserved. 1 // Copyright 2015 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 "components/data_use_measurement/content/data_use_measurement.h" 5 #include "components/data_use_measurement/content/data_use_measurement.h"
6 6
7 #include "base/metrics/histogram.h" 7 #include "base/metrics/histogram.h"
8 #include "base/metrics/sparse_histogram.h" 8 #include "base/metrics/sparse_histogram.h"
9 #include "base/strings/stringprintf.h" 9 #include "base/strings/stringprintf.h"
10 #include "build/build_config.h" 10 #include "build/build_config.h"
11 #include "content/public/browser/resource_request_info.h" 11 #include "content/public/browser/resource_request_info.h"
12 #include "net/base/network_change_notifier.h" 12 #include "net/base/network_change_notifier.h"
13 #include "net/base/upload_data_stream.h" 13 #include "net/base/upload_data_stream.h"
14 #include "net/http/http_response_headers.h" 14 #include "net/http/http_response_headers.h"
15 #include "net/url_request/url_request.h" 15 #include "net/url_request/url_request.h"
16 16
17 #if defined(OS_ANDROID)
18 #include "net/android/traffic_stats.h"
19 #endif
20
17 namespace data_use_measurement { 21 namespace data_use_measurement {
18 22
19 namespace { 23 namespace {
20 24
21 // Records the occurrence of |sample| in |name| histogram. Conventional UMA 25 // Records the occurrence of |sample| in |name| histogram. Conventional UMA
22 // histograms are not used because the |name| is not static. 26 // histograms are not used because the |name| is not static.
23 void RecordUMAHistogramCount(const std::string& name, int64_t sample) { 27 void RecordUMAHistogramCount(const std::string& name, int64_t sample) {
24 base::HistogramBase* histogram_pointer = base::Histogram::FactoryGet( 28 base::HistogramBase* histogram_pointer = base::Histogram::FactoryGet(
25 name, 29 name,
26 1, // Minimum sample size in bytes. 30 1, // Minimum sample size in bytes.
(...skipping 18 matching lines...) Expand all
45 } // namespace 49 } // namespace
46 50
47 DataUseMeasurement::DataUseMeasurement( 51 DataUseMeasurement::DataUseMeasurement(
48 const metrics::UpdateUsagePrefCallbackType& metrics_data_use_forwarder) 52 const metrics::UpdateUsagePrefCallbackType& metrics_data_use_forwarder)
49 : metrics_data_use_forwarder_(metrics_data_use_forwarder) 53 : metrics_data_use_forwarder_(metrics_data_use_forwarder)
50 #if defined(OS_ANDROID) 54 #if defined(OS_ANDROID)
51 , 55 ,
52 app_state_(base::android::APPLICATION_STATE_HAS_RUNNING_ACTIVITIES), 56 app_state_(base::android::APPLICATION_STATE_HAS_RUNNING_ACTIVITIES),
53 app_listener_(new base::android::ApplicationStatusListener( 57 app_listener_(new base::android::ApplicationStatusListener(
54 base::Bind(&DataUseMeasurement::OnApplicationStateChange, 58 base::Bind(&DataUseMeasurement::OnApplicationStateChange,
55 base::Unretained(this)))) 59 base::Unretained(this)))),
60 rx_bytes_os_(0),
61 tx_bytes_os_(0)
56 #endif 62 #endif
57 { 63 {
58 } 64 }
59 65
60 DataUseMeasurement::~DataUseMeasurement(){}; 66 DataUseMeasurement::~DataUseMeasurement(){};
61 67
62 void DataUseMeasurement::OnBeforeRedirect(const net::URLRequest& request, 68 void DataUseMeasurement::OnBeforeRedirect(const net::URLRequest& request,
63 const GURL& new_location) { 69 const GURL& new_location) {
64 // Recording data use of request on redirects. 70 // Recording data use of request on redirects.
65 ReportDataUseUMA(request); 71 ReportDataUseUMA(request);
66 } 72 }
67 73
74 void DataUseMeasurement::OnNetworkBytesReceived(const net::URLRequest& request,
75 int64_t bytes_received) {
76 UMA_HISTOGRAM_COUNTS("DataUse.BytesReceived.Delegate", bytes_received);
77 RecordNetworkBytesReceivedOS();
sclittle 2016/09/14 21:28:13 Is it OK for performance to call this so often? No
tbansal1 2016/09/15 17:46:04 Good catch. Fixed.
78 }
79
80 void DataUseMeasurement::OnNetworkBytesSent(const net::URLRequest& request,
81 int64_t bytes_sent) {
82 UMA_HISTOGRAM_COUNTS("DataUse.BytesSent.Delegate", bytes_sent);
83 RecordNetworkBytesSentOS();
84 }
85
68 void DataUseMeasurement::OnCompleted(const net::URLRequest& request, 86 void DataUseMeasurement::OnCompleted(const net::URLRequest& request,
69 bool started) { 87 bool started) {
70 // TODO(amohammadkhan): Verify that there is no double recording in data use 88 // TODO(amohammadkhan): Verify that there is no double recording in data use
71 // of redirected requests. 89 // of redirected requests.
72 ReportDataUseUMA(request); 90 ReportDataUseUMA(request);
73 } 91 }
74 92
75 void DataUseMeasurement::ReportDataUseUMA( 93 void DataUseMeasurement::ReportDataUseUMA(
76 const net::URLRequest& request) const { 94 const net::URLRequest& request) const {
77 // Counts rely on URLRequest::GetTotalReceivedBytes() and 95 // Counts rely on URLRequest::GetTotalReceivedBytes() and
(...skipping 96 matching lines...) Expand 10 before | Expand all | Expand 10 after
174 "DataUse.MessageSize." + DataUseUserData::GetServiceNameAsString(service), 192 "DataUse.MessageSize." + DataUseUserData::GetServiceNameAsString(service),
175 message_size); 193 message_size);
176 if (message_size > 0) { 194 if (message_size > 0) {
177 IncreaseSparseHistogramByValue( 195 IncreaseSparseHistogramByValue(
178 GetHistogramName("DataUse.MessageSize.AllServices", dir, 196 GetHistogramName("DataUse.MessageSize.AllServices", dir,
179 is_connection_cellular), 197 is_connection_cellular),
180 service, message_size); 198 service, message_size);
181 } 199 }
182 } 200 }
183 201
202 void DataUseMeasurement::RecordNetworkBytesReceivedOS() {
sclittle 2016/09/14 21:28:13 Is there a timing issue here? E.g., suppose there'
tbansal1 2016/09/15 17:46:04 No, because I am not attributing traffic stats byt
203 #if defined(OS_ANDROID)
204 int64_t bytes = 0;
205 if (net::android::traffic_stats::GetCurrentUidRxBytes(&bytes)) {
206 if (rx_bytes_os_ != 0) {
207 DCHECK_GE(bytes, rx_bytes_os_);
sclittle 2016/09/14 21:28:13 Are you sure you want to crash if this condition d
tbansal1 2016/09/15 17:46:04 Yes, android provides guarantee that this is alway
208 UMA_HISTOGRAM_COUNTS("DataUse.BytesReceived.OS", bytes - rx_bytes_os_);
209 }
210 rx_bytes_os_ = bytes;
211 }
212 #endif
213 }
214
215 void DataUseMeasurement::RecordNetworkBytesSentOS() {
216 #if defined(OS_ANDROID)
217 int64_t bytes = 0;
218 if (net::android::traffic_stats::GetCurrentUidTxBytes(&bytes)) {
219 if (tx_bytes_os_ != 0) {
220 DCHECK_GE(bytes, tx_bytes_os_);
221 UMA_HISTOGRAM_COUNTS("DataUse.BytesSent.OS", bytes - tx_bytes_os_);
222 }
223 tx_bytes_os_ = bytes;
224 }
225 #endif
226 }
227
184 } // namespace data_use_measurement 228 } // namespace data_use_measurement
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698