Chromium Code Reviews| Index: components/data_use_measurement/content/data_use_measurement.cc |
| diff --git a/components/data_use_measurement/content/data_use_measurement.cc b/components/data_use_measurement/content/data_use_measurement.cc |
| index 849db0d822683bff83c1c572dec6530a280b90ff..742ebf232ccaed4f72317e467f1d5a4a86c1275d 100644 |
| --- a/components/data_use_measurement/content/data_use_measurement.cc |
| +++ b/components/data_use_measurement/content/data_use_measurement.cc |
| @@ -47,6 +47,18 @@ void IncreaseSparseHistogramByValue(const std::string& name, |
| histogram->AddCount(sample, value); |
| } |
| +void IncreaseTimeHistogramByValue(const std::string& name, |
| + const base::TimeDelta& sample, |
| + int64_t value) { |
| + base::HistogramBase* histogram_pointer = base::Histogram::FactoryTimeGet( |
| + name, |
| + base::TimeDelta::FromMilliseconds(1), // Minimum sample |
| + base::TimeDelta::FromHours(1), // Maximum sample |
| + 50, // Bucket count. |
| + base::HistogramBase::kUmaTargetedHistogramFlag); |
| + histogram_pointer->AddCount(sample.InMilliseconds(), value); |
| +} |
| + |
| } // namespace |
| DataUseMeasurement::DataUseMeasurement( |
| @@ -60,7 +72,8 @@ DataUseMeasurement::DataUseMeasurement( |
| base::Unretained(this)))), |
| rx_bytes_os_(0), |
| tx_bytes_os_(0), |
| - bytes_transferred_since_last_traffic_stats_query_(0) |
| + bytes_transferred_since_last_traffic_stats_query_(0), |
| + first_read_after_background_(false) |
| #endif |
| { |
| } |
| @@ -112,10 +125,9 @@ void DataUseMeasurement::OnCompleted(const net::URLRequest& request, |
| #endif |
| } |
| -void DataUseMeasurement::ReportDataUseUMA( |
| - const net::URLRequest& request, |
| - TrafficDirection dir, |
| - int64_t bytes) const { |
| +void DataUseMeasurement::ReportDataUseUMA(const net::URLRequest& request, |
| + TrafficDirection dir, |
| + int64_t bytes) { |
| bool is_user_traffic = IsUserInitiatedRequest(request); |
| bool is_connection_cellular = |
| net::NetworkChangeNotifier::IsConnectionCellular( |
| @@ -147,6 +159,23 @@ void DataUseMeasurement::ReportDataUseUMA( |
| ReportDataUsageServices(service_name, dir, new_app_state, |
| is_connection_cellular, bytes); |
| } |
| +#if defined(OS_ANDROID) |
| + if (dir == DOWNSTREAM && CurrentAppState() == DataUseUserData::BACKGROUND) { |
| + const base::TimeDelta time_since_background = |
| + base::TimeTicks::Now() - last_app_background_time_; |
|
Not at Google. Contact bengr
2016/10/14 23:10:57
DCHECK(!last_app_background_time_.is_null());
Raj
2016/10/15 19:36:14
Done.
|
| + IncreaseTimeHistogramByValue( |
| + is_user_traffic ? "DataUse.BackgroundDownstreamBytes.User" |
| + : "DataUse.BackgroundDownstreamBytes.System", |
| + time_since_background, bytes); |
| + if (first_read_after_background_) { |
| + first_read_after_background_ = false; |
| + UMA_HISTOGRAM_LONG_TIMES( |
| + is_user_traffic ? "DataUse.BackgroundDownstreamFirstRead.User" |
| + : "DataUse.BackgroundDownstreamFirstRead.System", |
| + time_since_background); |
| + } |
| + } |
| +#endif |
| } |
| void DataUseMeasurement::UpdateDataUsePrefs( |
| @@ -218,8 +247,13 @@ std::string DataUseMeasurement::GetHistogramName( |
| void DataUseMeasurement::OnApplicationStateChange( |
| base::android::ApplicationState application_state) { |
| app_state_ = application_state; |
| - if (app_state_ != base::android::APPLICATION_STATE_HAS_RUNNING_ACTIVITIES) |
| + if (app_state_ != base::android::APPLICATION_STATE_HAS_RUNNING_ACTIVITIES) { |
| + last_app_background_time_ = base::TimeTicks::Now(); |
| + first_read_after_background_ = true; |
| MaybeRecordNetworkBytesOS(); |
| + } else { |
| + last_app_background_time_ = base::TimeTicks(); |
| + } |
| } |
| void DataUseMeasurement::MaybeRecordNetworkBytesOS() { |