Index: chrome/browser/metrics/chrome_metrics_service_client.cc |
diff --git a/chrome/browser/metrics/chrome_metrics_service_client.cc b/chrome/browser/metrics/chrome_metrics_service_client.cc |
index 8954197117c9b35a4d1ba0d4a5d44bf6d59bf963..c68d2bf7b816bb4688c11c63d1dc4ad2a3f3648f 100644 |
--- a/chrome/browser/metrics/chrome_metrics_service_client.cc |
+++ b/chrome/browser/metrics/chrome_metrics_service_client.cc |
@@ -11,6 +11,7 @@ |
#include "base/command_line.h" |
#include "base/files/file_path.h" |
#include "base/logging.h" |
+#include "base/metrics/field_trial.h" |
#include "base/metrics/histogram.h" |
#include "base/prefs/pref_registry_simple.h" |
#include "base/prefs/pref_service.h" |
@@ -98,6 +99,24 @@ metrics::SystemProfileProto::Channel AsProtobufChannel( |
return metrics::SystemProfileProto::CHANNEL_UNKNOWN; |
} |
+// Standard interval between log uploads, in seconds. |
+#if defined(OS_ANDROID) || defined(OS_IOS) |
+const int kStandardUploadIntervalSeconds = 5 * 60; // Five minutes. |
+const int kStandardUploadIntervalCellularSeconds = 15 * 60; // Fifteen minutes. |
+#else |
+const int kStandardUploadIntervalSeconds = 30 * 60; // Thirty minutes. |
+#endif |
+ |
+#if defined(OS_ANDROID) || defined(OS_IOS) |
+// Returns true if the user is assigned to the experiment group for enabled |
+// cellular uploads. |
+bool IsCellularEnabledByExperiment() { |
+ const std::string group_name = |
+ base::FieldTrialList::FindFullName("UMA_EnableCellularLogUpload"); |
+ return group_name == "Enabled"; |
+} |
+#endif |
+ |
} // namespace |
ChromeMetricsServiceClient::ChromeMetricsServiceClient( |
@@ -246,6 +265,17 @@ ChromeMetricsServiceClient::CreateUploader( |
on_upload_complete)); |
} |
+base::TimeDelta ChromeMetricsServiceClient::GetStandardUploadInterval() { |
+#if defined(OS_ANDROID) || defined(OS_IOS) |
+ bool is_cellular = false; |
+ cellular_callback_.Run(&is_cellular); |
+ |
+ if (is_cellular && IsCellularEnabledByExperiment()) |
+ return base::TimeDelta::FromSeconds(kStandardUploadIntervalCellularSeconds); |
+#endif |
+ return base::TimeDelta::FromSeconds(kStandardUploadIntervalSeconds); |
+} |
+ |
base::string16 ChromeMetricsServiceClient::GetRegistryBackupKey() { |
#if defined(OS_WIN) |
return L"Software\\" PRODUCT_STRING_PATH L"\\StabilityMetrics"; |
@@ -276,9 +306,7 @@ void ChromeMetricsServiceClient::Initialize() { |
scoped_ptr<metrics::NetworkMetricsProvider> network_metrics_provider( |
new metrics::NetworkMetricsProvider( |
content::BrowserThread::GetBlockingPool())); |
- base::Callback<void(bool*)> cellular_callback = |
- network_metrics_provider->GetConnectionCallback(); |
- metrics_service_->SetConnectionTypeCallback(cellular_callback); |
+ cellular_callback_ = network_metrics_provider->GetConnectionCallback(); |
metrics_service_->RegisterMetricsProvider(network_metrics_provider.Pass()); |
metrics_service_->RegisterMetricsProvider( |
@@ -289,7 +317,7 @@ void ChromeMetricsServiceClient::Initialize() { |
scoped_ptr<metrics::MetricsProvider>(new metrics::GPUMetricsProvider())); |
profiler_metrics_provider_ = |
- new metrics::ProfilerMetricsProvider(cellular_callback); |
+ new metrics::ProfilerMetricsProvider(cellular_callback_); |
metrics_service_->RegisterMetricsProvider( |
scoped_ptr<metrics::MetricsProvider>(profiler_metrics_provider_)); |