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

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

Issue 2583703002: Record the tab state during data use (Closed)
Patch Set: minor fix Created 4 years 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/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
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
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
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
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698