OLD | NEW |
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 86 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
97 const int kMaxHistogramGatheringWaitDuration = 60000; // 60 seconds. | 97 const int kMaxHistogramGatheringWaitDuration = 60000; // 60 seconds. |
98 | 98 |
99 // Standard interval between log uploads, in seconds. | 99 // Standard interval between log uploads, in seconds. |
100 #if defined(OS_ANDROID) | 100 #if defined(OS_ANDROID) |
101 const int kStandardUploadIntervalSeconds = 5 * 60; // Five minutes. | 101 const int kStandardUploadIntervalSeconds = 5 * 60; // Five minutes. |
102 const int kStandardUploadIntervalCellularSeconds = 15 * 60; // Fifteen minutes. | 102 const int kStandardUploadIntervalCellularSeconds = 15 * 60; // Fifteen minutes. |
103 #else | 103 #else |
104 const int kStandardUploadIntervalSeconds = 30 * 60; // Thirty minutes. | 104 const int kStandardUploadIntervalSeconds = 30 * 60; // Thirty minutes. |
105 #endif | 105 #endif |
106 | 106 |
107 // Returns true if current connection type is cellular and user is assigned to | |
108 // experimental group for enabled cellular uploads. | |
109 bool IsCellularLogicEnabled() { | |
110 if (variations::GetVariationParamValue("UMA_EnableCellularLogUpload", | |
111 "Enabled") != "true" || | |
112 variations::GetVariationParamValue("UMA_EnableCellularLogUpload", | |
113 "Optimize") == "false") { | |
114 return false; | |
115 } | |
116 | |
117 return net::NetworkChangeNotifier::IsConnectionCellular( | |
118 net::NetworkChangeNotifier::GetConnectionType()); | |
119 } | |
120 | 107 |
121 // Checks whether it is the first time that cellular uploads logic should be | 108 // Checks whether it is the first time that cellular uploads logic should be |
122 // enabled based on whether the the preference for that logic is initialized. | 109 // enabled based on whether the the preference for that logic is initialized. |
123 // This should happen only once as the used preference will be initialized | 110 // This should happen only once as the used preference will be initialized |
124 // afterwards in |UmaSessionStats.java|. | 111 // afterwards in |UmaSessionStats.java|. |
125 bool ShouldClearSavedMetrics() { | 112 bool ShouldClearSavedMetrics() { |
126 #if BUILDFLAG(ANDROID_JAVA_UI) | 113 #if BUILDFLAG(ANDROID_JAVA_UI) |
127 PrefService* local_state = g_browser_process->local_state(); | 114 PrefService* local_state = g_browser_process->local_state(); |
128 return !local_state->HasPrefPath(metrics::prefs::kMetricsReportingEnabled) && | 115 return !local_state->HasPrefPath(metrics::prefs::kMetricsReportingEnabled) && |
129 variations::GetVariationParamValue("UMA_EnableCellularLogUpload", | 116 variations::GetVariationParamValue("UMA_EnableCellularLogUpload", |
(...skipping 205 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
335 // Clear metrics reports if it is the first time cellular upload logic should | 322 // Clear metrics reports if it is the first time cellular upload logic should |
336 // apply to avoid sudden bulk uploads. It needs to be done before initializing | 323 // apply to avoid sudden bulk uploads. It needs to be done before initializing |
337 // metrics service so that metrics log manager is initialized correctly. | 324 // metrics service so that metrics log manager is initialized correctly. |
338 if (ShouldClearSavedMetrics()) { | 325 if (ShouldClearSavedMetrics()) { |
339 PrefService* local_state = g_browser_process->local_state(); | 326 PrefService* local_state = g_browser_process->local_state(); |
340 local_state->ClearPref(metrics::prefs::kMetricsInitialLogs); | 327 local_state->ClearPref(metrics::prefs::kMetricsInitialLogs); |
341 local_state->ClearPref(metrics::prefs::kMetricsOngoingLogs); | 328 local_state->ClearPref(metrics::prefs::kMetricsOngoingLogs); |
342 } | 329 } |
343 | 330 |
344 metrics_service_.reset(new metrics::MetricsService( | 331 metrics_service_.reset(new metrics::MetricsService( |
345 metrics_state_manager_, this, g_browser_process->local_state())); | 332 metrics_state_manager_, this, g_browser_process->local_state(), |
| 333 base::Bind(&ChromeMetricsServiceClient::IsCellularLogicEnabled, |
| 334 weak_ptr_factory_.GetWeakPtr()))); |
346 | 335 |
347 // Register metrics providers. | 336 // Register metrics providers. |
348 #if defined(ENABLE_EXTENSIONS) | 337 #if defined(ENABLE_EXTENSIONS) |
349 metrics_service_->RegisterMetricsProvider( | 338 metrics_service_->RegisterMetricsProvider( |
350 scoped_ptr<metrics::MetricsProvider>( | 339 scoped_ptr<metrics::MetricsProvider>( |
351 new ExtensionsMetricsProvider(metrics_state_manager_))); | 340 new ExtensionsMetricsProvider(metrics_state_manager_))); |
352 #endif | 341 #endif |
353 metrics_service_->RegisterMetricsProvider( | 342 metrics_service_->RegisterMetricsProvider( |
354 scoped_ptr<metrics::MetricsProvider>(new metrics::NetworkMetricsProvider( | 343 scoped_ptr<metrics::MetricsProvider>(new metrics::NetworkMetricsProvider( |
355 content::BrowserThread::GetBlockingPool()))); | 344 content::BrowserThread::GetBlockingPool()))); |
(...skipping 15 matching lines...) Expand all Loading... |
371 | 360 |
372 RegisterInstallerFileMetricsProvider(metrics_service_.get()); | 361 RegisterInstallerFileMetricsProvider(metrics_service_.get()); |
373 | 362 |
374 drive_metrics_provider_ = new metrics::DriveMetricsProvider( | 363 drive_metrics_provider_ = new metrics::DriveMetricsProvider( |
375 content::BrowserThread::GetMessageLoopProxyForThread( | 364 content::BrowserThread::GetMessageLoopProxyForThread( |
376 content::BrowserThread::FILE), | 365 content::BrowserThread::FILE), |
377 chrome::FILE_LOCAL_STATE); | 366 chrome::FILE_LOCAL_STATE); |
378 metrics_service_->RegisterMetricsProvider( | 367 metrics_service_->RegisterMetricsProvider( |
379 scoped_ptr<metrics::MetricsProvider>(drive_metrics_provider_)); | 368 scoped_ptr<metrics::MetricsProvider>(drive_metrics_provider_)); |
380 | 369 |
381 profiler_metrics_provider_ = | 370 profiler_metrics_provider_ = new metrics::ProfilerMetricsProvider( |
382 new metrics::ProfilerMetricsProvider(base::Bind(&IsCellularLogicEnabled)); | 371 base::Bind(&ChromeMetricsServiceClient::IsCellularLogicEnabled, |
| 372 weak_ptr_factory_.GetWeakPtr())); |
383 metrics_service_->RegisterMetricsProvider( | 373 metrics_service_->RegisterMetricsProvider( |
384 scoped_ptr<metrics::MetricsProvider>(profiler_metrics_provider_)); | 374 scoped_ptr<metrics::MetricsProvider>(profiler_metrics_provider_)); |
385 | 375 |
386 metrics_service_->RegisterMetricsProvider( | 376 metrics_service_->RegisterMetricsProvider( |
387 scoped_ptr<metrics::MetricsProvider>( | 377 scoped_ptr<metrics::MetricsProvider>( |
388 new metrics::CallStackProfileMetricsProvider)); | 378 new metrics::CallStackProfileMetricsProvider)); |
389 | 379 |
390 #if BUILDFLAG(ANDROID_JAVA_UI) | 380 #if BUILDFLAG(ANDROID_JAVA_UI) |
391 metrics_service_->RegisterMetricsProvider( | 381 metrics_service_->RegisterMetricsProvider( |
392 scoped_ptr<metrics::MetricsProvider>( | 382 scoped_ptr<metrics::MetricsProvider>( |
(...skipping 271 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
664 break; | 654 break; |
665 | 655 |
666 default: | 656 default: |
667 NOTREACHED(); | 657 NOTREACHED(); |
668 } | 658 } |
669 } | 659 } |
670 | 660 |
671 void ChromeMetricsServiceClient::OnURLOpenedFromOmnibox(OmniboxLog* log) { | 661 void ChromeMetricsServiceClient::OnURLOpenedFromOmnibox(OmniboxLog* log) { |
672 metrics_service_->OnApplicationNotIdle(); | 662 metrics_service_->OnApplicationNotIdle(); |
673 } | 663 } |
| 664 |
| 665 // Assigns true if current connection type is cellular and user is assigned to |
| 666 // experimental group for enabled cellular uploads. |
| 667 void ChromeMetricsServiceClient::IsCellularLogicEnabled(bool* out_is_enabled) { |
| 668 if (variations::GetVariationParamValue("UMA_EnableCellularLogUpload", |
| 669 "Enabled") != "true" || |
| 670 variations::GetVariationParamValue("UMA_EnableCellularLogUpload", |
| 671 "Optimize") == "false") { |
| 672 *out_is_enabled = false; |
| 673 } else { |
| 674 *out_is_enabled = net::NetworkChangeNotifier::IsConnectionCellular( |
| 675 net::NetworkChangeNotifier::GetConnectionType()); |
| 676 } |
| 677 } |
OLD | NEW |