| OLD | NEW |
| 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/core/data_use_measurement.h" | 5 #include "components/data_use_measurement/core/data_use_measurement.h" |
| 6 | 6 |
| 7 #include "base/metrics/histogram_macros.h" | 7 #include "base/metrics/histogram_macros.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 "components/data_use_measurement/core/data_use_ascriber.h" |
| 12 #include "components/data_use_measurement/core/data_use_recorder.h" |
| 11 #include "components/data_use_measurement/core/data_use_user_data.h" | 13 #include "components/data_use_measurement/core/data_use_user_data.h" |
| 12 #include "components/data_use_measurement/core/url_request_classifier.h" | 14 #include "components/data_use_measurement/core/url_request_classifier.h" |
| 13 #include "components/domain_reliability/uploader.h" | 15 #include "components/domain_reliability/uploader.h" |
| 14 #include "net/base/network_change_notifier.h" | 16 #include "net/base/network_change_notifier.h" |
| 15 #include "net/base/upload_data_stream.h" | 17 #include "net/base/upload_data_stream.h" |
| 16 #include "net/http/http_response_headers.h" | 18 #include "net/http/http_response_headers.h" |
| 17 #include "net/url_request/url_request.h" | 19 #include "net/url_request/url_request.h" |
| 18 | 20 |
| 19 #if defined(OS_ANDROID) | 21 #if defined(OS_ANDROID) |
| 20 #include "net/android/traffic_stats.h" | 22 #include "net/android/traffic_stats.h" |
| (...skipping 38 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 59 50, // Bucket count. | 61 50, // Bucket count. |
| 60 base::HistogramBase::kUmaTargetedHistogramFlag); | 62 base::HistogramBase::kUmaTargetedHistogramFlag); |
| 61 histogram_pointer->AddCount(latency.InMilliseconds(), count); | 63 histogram_pointer->AddCount(latency.InMilliseconds(), count); |
| 62 } | 64 } |
| 63 #endif | 65 #endif |
| 64 | 66 |
| 65 } // namespace | 67 } // namespace |
| 66 | 68 |
| 67 DataUseMeasurement::DataUseMeasurement( | 69 DataUseMeasurement::DataUseMeasurement( |
| 68 std::unique_ptr<URLRequestClassifier> url_request_classifier, | 70 std::unique_ptr<URLRequestClassifier> url_request_classifier, |
| 69 const metrics::UpdateUsagePrefCallbackType& metrics_data_use_forwarder) | 71 const metrics::UpdateUsagePrefCallbackType& metrics_data_use_forwarder, |
| 72 DataUseAscriber* ascriber) |
| 70 : url_request_classifier_(std::move(url_request_classifier)), | 73 : url_request_classifier_(std::move(url_request_classifier)), |
| 71 metrics_data_use_forwarder_(metrics_data_use_forwarder) | 74 metrics_data_use_forwarder_(metrics_data_use_forwarder), |
| 75 ascriber_(ascriber) |
| 72 #if defined(OS_ANDROID) | 76 #if defined(OS_ANDROID) |
| 73 , | 77 , |
| 74 app_state_(base::android::APPLICATION_STATE_HAS_RUNNING_ACTIVITIES), | 78 app_state_(base::android::APPLICATION_STATE_HAS_RUNNING_ACTIVITIES), |
| 75 app_listener_(new base::android::ApplicationStatusListener( | 79 app_listener_(new base::android::ApplicationStatusListener( |
| 76 base::Bind(&DataUseMeasurement::OnApplicationStateChange, | 80 base::Bind(&DataUseMeasurement::OnApplicationStateChange, |
| 77 base::Unretained(this)))), | 81 base::Unretained(this)))), |
| 78 rx_bytes_os_(0), | 82 rx_bytes_os_(0), |
| 79 tx_bytes_os_(0), | 83 tx_bytes_os_(0), |
| 80 bytes_transferred_since_last_traffic_stats_query_(0), | 84 bytes_transferred_since_last_traffic_stats_query_(0), |
| 81 no_reads_since_background_(false) | 85 no_reads_since_background_(false) |
| 82 #endif | 86 #endif |
| 83 { | 87 { |
| 88 DCHECK(ascriber_); |
| 84 DCHECK(url_request_classifier_); | 89 DCHECK(url_request_classifier_); |
| 85 } | 90 } |
| 86 | 91 |
| 87 DataUseMeasurement::~DataUseMeasurement(){}; | 92 DataUseMeasurement::~DataUseMeasurement(){}; |
| 88 | 93 |
| 89 void DataUseMeasurement::OnBeforeURLRequest(net::URLRequest* request) { | 94 void DataUseMeasurement::OnBeforeURLRequest(net::URLRequest* request) { |
| 90 DataUseUserData* data_use_user_data = reinterpret_cast<DataUseUserData*>( | 95 DataUseUserData* data_use_user_data = reinterpret_cast<DataUseUserData*>( |
| 91 request->GetUserData(DataUseUserData::kUserDataKey)); | 96 request->GetUserData(DataUseUserData::kUserDataKey)); |
| 92 if (!data_use_user_data) { | 97 if (!data_use_user_data) { |
| 93 DataUseUserData::ServiceName service_name = | 98 DataUseUserData::ServiceName service_name = |
| (...skipping 89 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 183 time_since_background, bytes); | 188 time_since_background, bytes); |
| 184 if (no_reads_since_background_) { | 189 if (no_reads_since_background_) { |
| 185 no_reads_since_background_ = false; | 190 no_reads_since_background_ = false; |
| 186 IncrementLatencyHistogramByCount( | 191 IncrementLatencyHistogramByCount( |
| 187 is_user_traffic ? "DataUse.BackgroundToFirstDownstream.User" | 192 is_user_traffic ? "DataUse.BackgroundToFirstDownstream.User" |
| 188 : "DataUse.BackgroundToFirstDownstream.System", | 193 : "DataUse.BackgroundToFirstDownstream.System", |
| 189 time_since_background, 1); | 194 time_since_background, 1); |
| 190 } | 195 } |
| 191 } | 196 } |
| 192 #endif | 197 #endif |
| 198 |
| 199 if (is_user_traffic) { |
| 200 const DataUseRecorder* recorder = ascriber_->GetDataUseRecorder(request); |
| 201 if (recorder) { |
| 202 RecordTabStateHistogram(dir, new_app_state, recorder->is_visible(), |
| 203 bytes); |
| 204 } |
| 205 } |
| 193 } | 206 } |
| 194 | 207 |
| 195 void DataUseMeasurement::UpdateDataUsePrefs( | 208 void DataUseMeasurement::UpdateDataUsePrefs( |
| 196 const net::URLRequest& request) const { | 209 const net::URLRequest& request) const { |
| 197 bool is_connection_cellular = | 210 bool is_connection_cellular = |
| 198 net::NetworkChangeNotifier::IsConnectionCellular( | 211 net::NetworkChangeNotifier::IsConnectionCellular( |
| 199 net::NetworkChangeNotifier::GetConnectionType()); | 212 net::NetworkChangeNotifier::GetConnectionType()); |
| 200 | 213 |
| 201 DataUseUserData* attached_service_data = static_cast<DataUseUserData*>( | 214 DataUseUserData* attached_service_data = static_cast<DataUseUserData*>( |
| 202 request.GetUserData(DataUseUserData::kUserDataKey)); | 215 request.GetUserData(DataUseUserData::kUserDataKey)); |
| (...skipping 120 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 323 "DataUse.MessageSize." + DataUseUserData::GetServiceNameAsString(service), | 336 "DataUse.MessageSize." + DataUseUserData::GetServiceNameAsString(service), |
| 324 message_size); | 337 message_size); |
| 325 if (message_size > 0) { | 338 if (message_size > 0) { |
| 326 IncreaseSparseHistogramByValue( | 339 IncreaseSparseHistogramByValue( |
| 327 GetHistogramName("DataUse.MessageSize.AllServices", dir, app_state, | 340 GetHistogramName("DataUse.MessageSize.AllServices", dir, app_state, |
| 328 is_connection_cellular), | 341 is_connection_cellular), |
| 329 service, message_size); | 342 service, message_size); |
| 330 } | 343 } |
| 331 } | 344 } |
| 332 | 345 |
| 346 void DataUseMeasurement::RecordTabStateHistogram( |
| 347 TrafficDirection dir, |
| 348 DataUseUserData::AppState app_state, |
| 349 bool is_tab_visible, |
| 350 int64_t bytes) { |
| 351 if (app_state == DataUseUserData::UNKNOWN) |
| 352 return; |
| 353 |
| 354 std::string histogram_name = "DataUse.AppTabState."; |
| 355 histogram_name.append(dir == UPSTREAM ? "Upstream." : "Downstream."); |
| 356 if (app_state == DataUseUserData::BACKGROUND) { |
| 357 histogram_name.append("AppBackground"); |
| 358 } else if (is_tab_visible) { |
| 359 histogram_name.append("AppForeground.TabForeground"); |
| 360 } else { |
| 361 histogram_name.append("AppForeground.TabBackground"); |
| 362 } |
| 363 RecordUMAHistogramCount(histogram_name, bytes); |
| 364 } |
| 365 |
| 333 } // namespace data_use_measurement | 366 } // namespace data_use_measurement |
| OLD | NEW |