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

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: 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 37 matching lines...) Expand 10 before | Expand all | Expand 10 after
58 base::TimeDelta::FromHours(1), // Maximum sample 60 base::TimeDelta::FromHours(1), // Maximum sample
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(
70 DataUseAscriber* ascriber,
RyanSturm 2016/12/16 16:26:10 nit: can you order the arguments in the same order
Raj 2016/12/16 19:59:10 Done.
68 std::unique_ptr<URLRequestClassifier> url_request_classifier, 71 std::unique_ptr<URLRequestClassifier> url_request_classifier,
69 const metrics::UpdateUsagePrefCallbackType& metrics_data_use_forwarder) 72 const metrics::UpdateUsagePrefCallbackType& metrics_data_use_forwarder)
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 auto recorder = ascriber_->GetDataUseRecorderIfExists(&request);
RyanSturm 2016/12/16 16:26:10 nit: s/auto/DataUseRecorder*/ It's a little fuzzy
Raj 2016/12/16 19:59:10 Done.
201 if (recorder) {
202 RecordTabStateHistogram(
203 dir, new_app_state,
204 recorder->is_visible() ? TabState::FOREGROUND : TabState::BACKGROUND,
205 bytes);
206 }
207 }
193 } 208 }
194 209
195 void DataUseMeasurement::UpdateDataUsePrefs( 210 void DataUseMeasurement::UpdateDataUsePrefs(
196 const net::URLRequest& request) const { 211 const net::URLRequest& request) const {
197 bool is_connection_cellular = 212 bool is_connection_cellular =
198 net::NetworkChangeNotifier::IsConnectionCellular( 213 net::NetworkChangeNotifier::IsConnectionCellular(
199 net::NetworkChangeNotifier::GetConnectionType()); 214 net::NetworkChangeNotifier::GetConnectionType());
200 215
201 DataUseUserData* attached_service_data = static_cast<DataUseUserData*>( 216 DataUseUserData* attached_service_data = static_cast<DataUseUserData*>(
202 request.GetUserData(DataUseUserData::kUserDataKey)); 217 request.GetUserData(DataUseUserData::kUserDataKey));
(...skipping 120 matching lines...) Expand 10 before | Expand all | Expand 10 after
323 "DataUse.MessageSize." + DataUseUserData::GetServiceNameAsString(service), 338 "DataUse.MessageSize." + DataUseUserData::GetServiceNameAsString(service),
324 message_size); 339 message_size);
325 if (message_size > 0) { 340 if (message_size > 0) {
326 IncreaseSparseHistogramByValue( 341 IncreaseSparseHistogramByValue(
327 GetHistogramName("DataUse.MessageSize.AllServices", dir, app_state, 342 GetHistogramName("DataUse.MessageSize.AllServices", dir, app_state,
328 is_connection_cellular), 343 is_connection_cellular),
329 service, message_size); 344 service, message_size);
330 } 345 }
331 } 346 }
332 347
348 void DataUseMeasurement::RecordTabStateHistogram(
349 TrafficDirection dir,
350 DataUseUserData::AppState app_state,
351 TabState tab_state,
352 int64_t bytes) {
353 if (app_state == DataUseUserData::UNKNOWN || tab_state == TabState::UNKNOWN)
354 return;
355
356 RecordUMAHistogramCount(
357 base::StringPrintf("DataUse.AppTabState.%s.%s",
RyanSturm 2016/12/16 16:26:10 This expression might be a little more readable if
Raj 2016/12/16 19:59:10 Done.
RyanSturm 2016/12/19 19:31:49 Thanks.
358 dir == UPSTREAM ? "Upstream" : "Downstream",
359 app_state == DataUseUserData::BACKGROUND
360 ? "AppBackground"
361 : tab_state == TabState::FOREGROUND
362 ? "AppForeground.TabForeground"
363 : "AppForeground.TabBackground"),
364 bytes);
365 }
366
333 } // namespace data_use_measurement 367 } // namespace data_use_measurement
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698