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

Side by Side Diff: chrome/browser/metrics/chrome_metrics_service_client.cc

Issue 1818613002: Implement UMA log throttling for cellular connections (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: fix build for gn, fix unittests, add comments Created 4 years, 8 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 unified diff | Download patch
OLDNEW
1 // Copyright 2014 The Chromium Authors. All rights reserved. 1 // Copyright 2014 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 "chrome/browser/metrics/chrome_metrics_service_client.h" 5 #include "chrome/browser/metrics/chrome_metrics_service_client.h"
6 6
7 #include <stddef.h> 7 #include <stddef.h>
8 8
9 #include <vector> 9 #include <vector>
10 10
(...skipping 88 matching lines...) Expand 10 before | Expand all | Expand 10 after
99 const int kMaxHistogramGatheringWaitDuration = 60000; // 60 seconds. 99 const int kMaxHistogramGatheringWaitDuration = 60000; // 60 seconds.
100 100
101 // Standard interval between log uploads, in seconds. 101 // Standard interval between log uploads, in seconds.
102 #if defined(OS_ANDROID) 102 #if defined(OS_ANDROID)
103 const int kStandardUploadIntervalSeconds = 5 * 60; // Five minutes. 103 const int kStandardUploadIntervalSeconds = 5 * 60; // Five minutes.
104 const int kStandardUploadIntervalCellularSeconds = 15 * 60; // Fifteen minutes. 104 const int kStandardUploadIntervalCellularSeconds = 15 * 60; // Fifteen minutes.
105 #else 105 #else
106 const int kStandardUploadIntervalSeconds = 30 * 60; // Thirty minutes. 106 const int kStandardUploadIntervalSeconds = 30 * 60; // Thirty minutes.
107 #endif 107 #endif
108 108
109 // Returns true if current connection type is cellular and user is assigned to
110 // experimental group for enabled cellular uploads.
111 bool IsCellularLogicEnabled() {
112 if (variations::GetVariationParamValue("UMA_EnableCellularLogUpload",
113 "Enabled") != "true" ||
114 variations::GetVariationParamValue("UMA_EnableCellularLogUpload",
115 "Optimize") == "false") {
116 return false;
117 }
118
119 return net::NetworkChangeNotifier::IsConnectionCellular(
120 net::NetworkChangeNotifier::GetConnectionType());
121 }
122 109
123 // Checks whether it is the first time that cellular uploads logic should be 110 // Checks whether it is the first time that cellular uploads logic should be
124 // enabled based on whether the the preference for that logic is initialized. 111 // enabled based on whether the the preference for that logic is initialized.
125 // This should happen only once as the used preference will be initialized 112 // This should happen only once as the used preference will be initialized
126 // afterwards in |UmaSessionStats.java|. 113 // afterwards in |UmaSessionStats.java|.
127 bool ShouldClearSavedMetrics() { 114 bool ShouldClearSavedMetrics() {
128 #if BUILDFLAG(ANDROID_JAVA_UI) 115 #if BUILDFLAG(ANDROID_JAVA_UI)
129 PrefService* local_state = g_browser_process->local_state(); 116 PrefService* local_state = g_browser_process->local_state();
130 return !local_state->HasPrefPath(metrics::prefs::kMetricsReportingEnabled) && 117 return !local_state->HasPrefPath(metrics::prefs::kMetricsReportingEnabled) &&
131 variations::GetVariationParamValue("UMA_EnableCellularLogUpload", 118 variations::GetVariationParamValue("UMA_EnableCellularLogUpload",
(...skipping 172 matching lines...) Expand 10 before | Expand all | Expand 10 after
304 return scoped_ptr<metrics::MetricsLogUploader>( 291 return scoped_ptr<metrics::MetricsLogUploader>(
305 new metrics::NetMetricsLogUploader( 292 new metrics::NetMetricsLogUploader(
306 g_browser_process->system_request_context(), 293 g_browser_process->system_request_context(),
307 metrics::kDefaultMetricsServerUrl, 294 metrics::kDefaultMetricsServerUrl,
308 metrics::kDefaultMetricsMimeType, 295 metrics::kDefaultMetricsMimeType,
309 on_upload_complete)); 296 on_upload_complete));
310 } 297 }
311 298
312 base::TimeDelta ChromeMetricsServiceClient::GetStandardUploadInterval() { 299 base::TimeDelta ChromeMetricsServiceClient::GetStandardUploadInterval() {
313 #if defined(OS_ANDROID) 300 #if defined(OS_ANDROID)
314 if (IsCellularLogicEnabled()) 301 bool is_cellular = false;
302 IsCellularLogicEnabled(&is_cellular);
303 if (is_cellular)
315 return base::TimeDelta::FromSeconds(kStandardUploadIntervalCellularSeconds); 304 return base::TimeDelta::FromSeconds(kStandardUploadIntervalCellularSeconds);
316 #endif 305 #endif
317 return base::TimeDelta::FromSeconds(kStandardUploadIntervalSeconds); 306 return base::TimeDelta::FromSeconds(kStandardUploadIntervalSeconds);
318 } 307 }
319 308
320 base::string16 ChromeMetricsServiceClient::GetRegistryBackupKey() { 309 base::string16 ChromeMetricsServiceClient::GetRegistryBackupKey() {
321 #if defined(OS_WIN) 310 #if defined(OS_WIN)
322 BrowserDistribution* distribution = BrowserDistribution::GetDistribution(); 311 BrowserDistribution* distribution = BrowserDistribution::GetDistribution();
323 return distribution->GetRegistryPath().append(L"\\StabilityMetrics"); 312 return distribution->GetRegistryPath().append(L"\\StabilityMetrics");
324 #else 313 #else
(...skipping 23 matching lines...) Expand all
348 // Clear metrics reports if it is the first time cellular upload logic should 337 // Clear metrics reports if it is the first time cellular upload logic should
349 // apply to avoid sudden bulk uploads. It needs to be done before initializing 338 // apply to avoid sudden bulk uploads. It needs to be done before initializing
350 // metrics service so that metrics log manager is initialized correctly. 339 // metrics service so that metrics log manager is initialized correctly.
351 if (ShouldClearSavedMetrics()) { 340 if (ShouldClearSavedMetrics()) {
352 PrefService* local_state = g_browser_process->local_state(); 341 PrefService* local_state = g_browser_process->local_state();
353 local_state->ClearPref(metrics::prefs::kMetricsInitialLogs); 342 local_state->ClearPref(metrics::prefs::kMetricsInitialLogs);
354 local_state->ClearPref(metrics::prefs::kMetricsOngoingLogs); 343 local_state->ClearPref(metrics::prefs::kMetricsOngoingLogs);
355 } 344 }
356 345
357 metrics_service_.reset(new metrics::MetricsService( 346 metrics_service_.reset(new metrics::MetricsService(
358 metrics_state_manager_, this, g_browser_process->local_state())); 347 metrics_state_manager_, this, g_browser_process->local_state(),
348 base::Bind(&ChromeMetricsServiceClient::IsCellularLogicEnabled,
349 weak_ptr_factory_.GetWeakPtr())));
359 350
360 // Register metrics providers. 351 // Register metrics providers.
361 #if defined(ENABLE_EXTENSIONS) 352 #if defined(ENABLE_EXTENSIONS)
362 metrics_service_->RegisterMetricsProvider( 353 metrics_service_->RegisterMetricsProvider(
363 scoped_ptr<metrics::MetricsProvider>( 354 scoped_ptr<metrics::MetricsProvider>(
364 new ExtensionsMetricsProvider(metrics_state_manager_))); 355 new ExtensionsMetricsProvider(metrics_state_manager_)));
365 #endif 356 #endif
366 metrics_service_->RegisterMetricsProvider( 357 metrics_service_->RegisterMetricsProvider(
367 scoped_ptr<metrics::MetricsProvider>(new metrics::NetworkMetricsProvider( 358 scoped_ptr<metrics::MetricsProvider>(new metrics::NetworkMetricsProvider(
368 content::BrowserThread::GetBlockingPool()))); 359 content::BrowserThread::GetBlockingPool())));
(...skipping 15 matching lines...) Expand all
384 375
385 RegisterInstallerFileMetricsProvider(metrics_service_.get()); 376 RegisterInstallerFileMetricsProvider(metrics_service_.get());
386 377
387 drive_metrics_provider_ = new metrics::DriveMetricsProvider( 378 drive_metrics_provider_ = new metrics::DriveMetricsProvider(
388 content::BrowserThread::GetMessageLoopProxyForThread( 379 content::BrowserThread::GetMessageLoopProxyForThread(
389 content::BrowserThread::FILE), 380 content::BrowserThread::FILE),
390 chrome::FILE_LOCAL_STATE); 381 chrome::FILE_LOCAL_STATE);
391 metrics_service_->RegisterMetricsProvider( 382 metrics_service_->RegisterMetricsProvider(
392 scoped_ptr<metrics::MetricsProvider>(drive_metrics_provider_)); 383 scoped_ptr<metrics::MetricsProvider>(drive_metrics_provider_));
393 384
394 profiler_metrics_provider_ = 385 profiler_metrics_provider_ = new metrics::ProfilerMetricsProvider(
395 new metrics::ProfilerMetricsProvider(base::Bind(&IsCellularLogicEnabled)); 386 base::Bind(&ChromeMetricsServiceClient::IsCellularLogicEnabled,
387 weak_ptr_factory_.GetWeakPtr()));
396 metrics_service_->RegisterMetricsProvider( 388 metrics_service_->RegisterMetricsProvider(
397 scoped_ptr<metrics::MetricsProvider>(profiler_metrics_provider_)); 389 scoped_ptr<metrics::MetricsProvider>(profiler_metrics_provider_));
398 390
399 metrics_service_->RegisterMetricsProvider( 391 metrics_service_->RegisterMetricsProvider(
400 scoped_ptr<metrics::MetricsProvider>( 392 scoped_ptr<metrics::MetricsProvider>(
401 new metrics::CallStackProfileMetricsProvider)); 393 new metrics::CallStackProfileMetricsProvider));
402 394
403 #if BUILDFLAG(ANDROID_JAVA_UI) 395 #if BUILDFLAG(ANDROID_JAVA_UI)
404 metrics_service_->RegisterMetricsProvider( 396 metrics_service_->RegisterMetricsProvider(
405 scoped_ptr<metrics::MetricsProvider>( 397 scoped_ptr<metrics::MetricsProvider>(
(...skipping 271 matching lines...) Expand 10 before | Expand all | Expand 10 after
677 break; 669 break;
678 670
679 default: 671 default:
680 NOTREACHED(); 672 NOTREACHED();
681 } 673 }
682 } 674 }
683 675
684 void ChromeMetricsServiceClient::OnURLOpenedFromOmnibox(OmniboxLog* log) { 676 void ChromeMetricsServiceClient::OnURLOpenedFromOmnibox(OmniboxLog* log) {
685 metrics_service_->OnApplicationNotIdle(); 677 metrics_service_->OnApplicationNotIdle();
686 } 678 }
679
680 // Assigns true to output param if current connection type is cellular and user
681 // is assigned to experimental group for enabled cellular uploads.
682 void ChromeMetricsServiceClient::IsCellularLogicEnabled(bool* out_is_enabled) {
683 if (variations::GetVariationParamValue("UMA_EnableCellularLogUpload",
684 "Enabled") != "true" ||
685 variations::GetVariationParamValue("UMA_EnableCellularLogUpload",
686 "Optimize") == "false") {
687 *out_is_enabled = false;
688 } else {
689 *out_is_enabled = net::NetworkChangeNotifier::IsConnectionCellular(
690 net::NetworkChangeNotifier::GetConnectionType());
691 }
692 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698