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

Unified Diff: components/data_use_measurement/content/data_use_measurement.cc

Issue 2417773005: Record the time since Chromium is in background for background data use (Closed)
Patch Set: Fix compile error Created 4 years, 2 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 side-by-side diff with in-line comments
Download patch
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..1fbeb536ad0eb4783d2c4d2a27bd684f3f296caa 100644
--- a/components/data_use_measurement/content/data_use_measurement.cc
+++ b/components/data_use_measurement/content/data_use_measurement.cc
@@ -47,6 +47,20 @@ void IncreaseSparseHistogramByValue(const std::string& name,
histogram->AddCount(sample, value);
}
+#if defined(OS_ANDROID)
+void IncreaseTimeHistogramByValue(const std::string& name,
+ const base::TimeDelta& sample,
+ int64_t value) {
Steven Holte 2016/10/17 21:35:16 Recording a histogram like this is a bit unusual,
Raj 2016/10/19 20:07:20 Done.
+ 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);
+}
+#endif
+
} // namespace
DataUseMeasurement::DataUseMeasurement(
@@ -60,7 +74,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),
+ no_reads_since_background_(false)
#endif
{
}
@@ -112,10 +127,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 +161,25 @@ void DataUseMeasurement::ReportDataUseUMA(
ReportDataUsageServices(service_name, dir, new_app_state,
is_connection_cellular, bytes);
}
+#if defined(OS_ANDROID)
+ if (dir == DOWNSTREAM && CurrentAppState() == DataUseUserData::BACKGROUND) {
+ DCHECK(!last_app_background_time_.is_null());
+
+ const base::TimeDelta time_since_background =
+ base::TimeTicks::Now() - last_app_background_time_;
+ IncreaseTimeHistogramByValue(
+ is_user_traffic ? "DataUse.BackgroundDownstreamBytes.User"
+ : "DataUse.BackgroundDownstreamBytes.System",
+ time_since_background, bytes);
+ if (no_reads_since_background_) {
+ no_reads_since_background_ = false;
+ UMA_HISTOGRAM_LONG_TIMES(
+ is_user_traffic ? "DataUse.BackgroundDownstreamFirstRead.User"
+ : "DataUse.BackgroundDownstreamFirstRead.System",
+ time_since_background);
+ }
+ }
+#endif
}
void DataUseMeasurement::UpdateDataUsePrefs(
@@ -187,7 +220,7 @@ bool DataUseMeasurement::IsUserInitiatedRequest(
#if defined(OS_ANDROID)
void DataUseMeasurement::OnApplicationStateChangeForTesting(
base::android::ApplicationState application_state) {
- app_state_ = application_state;
+ OnApplicationStateChange(application_state);
}
#endif
@@ -218,8 +251,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();
+ no_reads_since_background_ = true;
MaybeRecordNetworkBytesOS();
+ } else {
+ last_app_background_time_ = base::TimeTicks();
+ }
}
void DataUseMeasurement::MaybeRecordNetworkBytesOS() {

Powered by Google App Engine
This is Rietveld 408576698