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 |
11 #include "base/bind.h" | 11 #include "base/bind.h" |
12 #include "base/callback.h" | 12 #include "base/callback.h" |
13 #include "base/command_line.h" | 13 #include "base/command_line.h" |
14 #include "base/files/file_path.h" | 14 #include "base/files/file_path.h" |
15 #include "base/logging.h" | 15 #include "base/logging.h" |
| 16 #include "base/memory/ptr_util.h" |
16 #include "base/metrics/histogram.h" | 17 #include "base/metrics/histogram.h" |
17 #include "base/path_service.h" | 18 #include "base/path_service.h" |
18 #include "base/rand_util.h" | 19 #include "base/rand_util.h" |
19 #include "base/strings/string16.h" | 20 #include "base/strings/string16.h" |
20 #include "base/threading/platform_thread.h" | 21 #include "base/threading/platform_thread.h" |
21 #include "build/build_config.h" | 22 #include "build/build_config.h" |
22 #include "chrome/browser/browser_process.h" | 23 #include "chrome/browser/browser_process.h" |
23 #include "chrome/browser/chrome_notification_types.h" | 24 #include "chrome/browser/chrome_notification_types.h" |
24 #include "chrome/browser/google/google_brand.h" | 25 #include "chrome/browser/google/google_brand.h" |
25 #include "chrome/browser/metrics/chrome_stability_metrics_provider.h" | 26 #include "chrome/browser/metrics/chrome_stability_metrics_provider.h" |
(...skipping 113 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
139 void RegisterInstallerFileMetricsPreferences(PrefRegistrySimple* registry) { | 140 void RegisterInstallerFileMetricsPreferences(PrefRegistrySimple* registry) { |
140 #if defined(OS_WIN) | 141 #if defined(OS_WIN) |
141 metrics::FileMetricsProvider::RegisterPrefs( | 142 metrics::FileMetricsProvider::RegisterPrefs( |
142 registry, installer::kSetupHistogramAllocatorName); | 143 registry, installer::kSetupHistogramAllocatorName); |
143 #endif | 144 #endif |
144 } | 145 } |
145 | 146 |
146 void RegisterInstallerFileMetricsProvider( | 147 void RegisterInstallerFileMetricsProvider( |
147 metrics::MetricsService* metrics_service) { | 148 metrics::MetricsService* metrics_service) { |
148 #if defined(OS_WIN) | 149 #if defined(OS_WIN) |
149 scoped_ptr<metrics::FileMetricsProvider> file_metrics( | 150 std::unique_ptr<metrics::FileMetricsProvider> file_metrics( |
150 new metrics::FileMetricsProvider( | 151 new metrics::FileMetricsProvider( |
151 content::BrowserThread::GetBlockingPool() | 152 content::BrowserThread::GetBlockingPool() |
152 ->GetTaskRunnerWithShutdownBehavior( | 153 ->GetTaskRunnerWithShutdownBehavior( |
153 base::SequencedWorkerPool::CONTINUE_ON_SHUTDOWN), | 154 base::SequencedWorkerPool::CONTINUE_ON_SHUTDOWN), |
154 g_browser_process->local_state())); | 155 g_browser_process->local_state())); |
155 base::FilePath program_dir; | 156 base::FilePath program_dir; |
156 base::PathService::Get(base::DIR_EXE, &program_dir); | 157 base::PathService::Get(base::DIR_EXE, &program_dir); |
157 file_metrics->RegisterFile( | 158 file_metrics->RegisterFile( |
158 program_dir.AppendASCII(installer::kSetupHistogramAllocatorName) | 159 program_dir.AppendASCII(installer::kSetupHistogramAllocatorName) |
159 .AddExtension(L".pma"), | 160 .AddExtension(L".pma"), |
160 metrics::FileMetricsProvider::FILE_HISTOGRAMS_ATOMIC, | 161 metrics::FileMetricsProvider::FILE_HISTOGRAMS_ATOMIC, |
161 installer::kSetupHistogramAllocatorName); | 162 installer::kSetupHistogramAllocatorName); |
162 metrics_service->RegisterMetricsProvider(std::move(file_metrics)); | 163 metrics_service->RegisterMetricsProvider(std::move(file_metrics)); |
163 #endif | 164 #endif |
164 } | 165 } |
(...skipping 23 matching lines...) Expand all Loading... |
188 DCHECK(thread_checker_.CalledOnValidThread()); | 189 DCHECK(thread_checker_.CalledOnValidThread()); |
189 RecordCommandLineMetrics(); | 190 RecordCommandLineMetrics(); |
190 RegisterForNotifications(); | 191 RegisterForNotifications(); |
191 } | 192 } |
192 | 193 |
193 ChromeMetricsServiceClient::~ChromeMetricsServiceClient() { | 194 ChromeMetricsServiceClient::~ChromeMetricsServiceClient() { |
194 DCHECK(thread_checker_.CalledOnValidThread()); | 195 DCHECK(thread_checker_.CalledOnValidThread()); |
195 } | 196 } |
196 | 197 |
197 // static | 198 // static |
198 scoped_ptr<ChromeMetricsServiceClient> ChromeMetricsServiceClient::Create( | 199 std::unique_ptr<ChromeMetricsServiceClient> ChromeMetricsServiceClient::Create( |
199 metrics::MetricsStateManager* state_manager, | 200 metrics::MetricsStateManager* state_manager, |
200 PrefService* local_state) { | 201 PrefService* local_state) { |
201 // Perform two-phase initialization so that |client->metrics_service_| only | 202 // Perform two-phase initialization so that |client->metrics_service_| only |
202 // receives pointers to fully constructed objects. | 203 // receives pointers to fully constructed objects. |
203 scoped_ptr<ChromeMetricsServiceClient> client( | 204 std::unique_ptr<ChromeMetricsServiceClient> client( |
204 new ChromeMetricsServiceClient(state_manager)); | 205 new ChromeMetricsServiceClient(state_manager)); |
205 client->Initialize(); | 206 client->Initialize(); |
206 | 207 |
207 return client; | 208 return client; |
208 } | 209 } |
209 | 210 |
210 // static | 211 // static |
211 void ChromeMetricsServiceClient::RegisterPrefs(PrefRegistrySimple* registry) { | 212 void ChromeMetricsServiceClient::RegisterPrefs(PrefRegistrySimple* registry) { |
212 metrics::MetricsService::RegisterPrefs(registry); | 213 metrics::MetricsService::RegisterPrefs(registry); |
213 metrics::StabilityMetricsHelper::RegisterPrefs(registry); | 214 metrics::StabilityMetricsHelper::RegisterPrefs(registry); |
(...skipping 78 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
292 if (ShouldIncludeProfilerDataInLog()) { | 293 if (ShouldIncludeProfilerDataInLog()) { |
293 // Fetch profiler data. This will call into | 294 // Fetch profiler data. This will call into |
294 // |FinishedReceivingProfilerData()| when the task completes. | 295 // |FinishedReceivingProfilerData()| when the task completes. |
295 metrics::TrackingSynchronizer::FetchProfilerDataAsynchronously( | 296 metrics::TrackingSynchronizer::FetchProfilerDataAsynchronously( |
296 weak_ptr_factory_.GetWeakPtr()); | 297 weak_ptr_factory_.GetWeakPtr()); |
297 } else { | 298 } else { |
298 CollectFinalHistograms(); | 299 CollectFinalHistograms(); |
299 } | 300 } |
300 } | 301 } |
301 | 302 |
302 scoped_ptr<metrics::MetricsLogUploader> | 303 std::unique_ptr<metrics::MetricsLogUploader> |
303 ChromeMetricsServiceClient::CreateUploader( | 304 ChromeMetricsServiceClient::CreateUploader( |
304 const base::Callback<void(int)>& on_upload_complete) { | 305 const base::Callback<void(int)>& on_upload_complete) { |
305 return scoped_ptr<metrics::MetricsLogUploader>( | 306 return std::unique_ptr<metrics::MetricsLogUploader>( |
306 new metrics::NetMetricsLogUploader( | 307 new metrics::NetMetricsLogUploader( |
307 g_browser_process->system_request_context(), | 308 g_browser_process->system_request_context(), |
308 metrics::kDefaultMetricsServerUrl, | 309 metrics::kDefaultMetricsServerUrl, metrics::kDefaultMetricsMimeType, |
309 metrics::kDefaultMetricsMimeType, | |
310 on_upload_complete)); | 310 on_upload_complete)); |
311 } | 311 } |
312 | 312 |
313 base::TimeDelta ChromeMetricsServiceClient::GetStandardUploadInterval() { | 313 base::TimeDelta ChromeMetricsServiceClient::GetStandardUploadInterval() { |
314 #if defined(OS_ANDROID) | 314 #if defined(OS_ANDROID) |
315 if (IsCellularLogicEnabled()) | 315 if (IsCellularLogicEnabled()) |
316 return base::TimeDelta::FromSeconds(kStandardUploadIntervalCellularSeconds); | 316 return base::TimeDelta::FromSeconds(kStandardUploadIntervalCellularSeconds); |
317 #endif | 317 #endif |
318 return base::TimeDelta::FromSeconds(kStandardUploadIntervalSeconds); | 318 return base::TimeDelta::FromSeconds(kStandardUploadIntervalSeconds); |
319 } | 319 } |
(...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
353 PrefService* local_state = g_browser_process->local_state(); | 353 PrefService* local_state = g_browser_process->local_state(); |
354 local_state->ClearPref(metrics::prefs::kMetricsInitialLogs); | 354 local_state->ClearPref(metrics::prefs::kMetricsInitialLogs); |
355 local_state->ClearPref(metrics::prefs::kMetricsOngoingLogs); | 355 local_state->ClearPref(metrics::prefs::kMetricsOngoingLogs); |
356 } | 356 } |
357 | 357 |
358 metrics_service_.reset(new metrics::MetricsService( | 358 metrics_service_.reset(new metrics::MetricsService( |
359 metrics_state_manager_, this, g_browser_process->local_state())); | 359 metrics_state_manager_, this, g_browser_process->local_state())); |
360 | 360 |
361 // Gets access to persistent metrics shared by sub-processes. | 361 // Gets access to persistent metrics shared by sub-processes. |
362 metrics_service_->RegisterMetricsProvider( | 362 metrics_service_->RegisterMetricsProvider( |
363 scoped_ptr<metrics::MetricsProvider>(new SubprocessMetricsProvider())); | 363 std::unique_ptr<metrics::MetricsProvider>( |
| 364 new SubprocessMetricsProvider())); |
364 | 365 |
365 // Register metrics providers. | 366 // Register metrics providers. |
366 #if defined(ENABLE_EXTENSIONS) | 367 #if defined(ENABLE_EXTENSIONS) |
367 metrics_service_->RegisterMetricsProvider( | 368 metrics_service_->RegisterMetricsProvider( |
368 scoped_ptr<metrics::MetricsProvider>( | 369 std::unique_ptr<metrics::MetricsProvider>( |
369 new ExtensionsMetricsProvider(metrics_state_manager_))); | 370 new ExtensionsMetricsProvider(metrics_state_manager_))); |
370 #endif | 371 #endif |
371 metrics_service_->RegisterMetricsProvider( | 372 metrics_service_->RegisterMetricsProvider( |
372 scoped_ptr<metrics::MetricsProvider>(new metrics::NetworkMetricsProvider( | 373 std::unique_ptr<metrics::MetricsProvider>( |
373 content::BrowserThread::GetBlockingPool()))); | 374 new metrics::NetworkMetricsProvider( |
| 375 content::BrowserThread::GetBlockingPool()))); |
374 | 376 |
375 // Currently, we configure OmniboxMetricsProvider to not log events to UMA | 377 // Currently, we configure OmniboxMetricsProvider to not log events to UMA |
376 // if there is a single incognito session visible. In the future, it may | 378 // if there is a single incognito session visible. In the future, it may |
377 // be worth revisiting this to still log events from non-incognito sessions. | 379 // be worth revisiting this to still log events from non-incognito sessions. |
378 metrics_service_->RegisterMetricsProvider( | 380 metrics_service_->RegisterMetricsProvider( |
379 scoped_ptr<metrics::MetricsProvider>(new OmniboxMetricsProvider( | 381 std::unique_ptr<metrics::MetricsProvider>(new OmniboxMetricsProvider( |
380 base::Bind(&chrome::IsOffTheRecordSessionActive)))); | 382 base::Bind(&chrome::IsOffTheRecordSessionActive)))); |
381 metrics_service_->RegisterMetricsProvider( | 383 metrics_service_->RegisterMetricsProvider( |
382 scoped_ptr<metrics::MetricsProvider>(new ChromeStabilityMetricsProvider( | 384 std::unique_ptr<metrics::MetricsProvider>( |
383 g_browser_process->local_state()))); | 385 new ChromeStabilityMetricsProvider( |
| 386 g_browser_process->local_state()))); |
384 metrics_service_->RegisterMetricsProvider( | 387 metrics_service_->RegisterMetricsProvider( |
385 scoped_ptr<metrics::MetricsProvider>(new metrics::GPUMetricsProvider)); | 388 std::unique_ptr<metrics::MetricsProvider>( |
| 389 new metrics::GPUMetricsProvider)); |
386 metrics_service_->RegisterMetricsProvider( | 390 metrics_service_->RegisterMetricsProvider( |
387 scoped_ptr<metrics::MetricsProvider>( | 391 std::unique_ptr<metrics::MetricsProvider>( |
388 new metrics::ScreenInfoMetricsProvider)); | 392 new metrics::ScreenInfoMetricsProvider)); |
389 | 393 |
390 RegisterInstallerFileMetricsProvider(metrics_service_.get()); | 394 RegisterInstallerFileMetricsProvider(metrics_service_.get()); |
391 | 395 |
392 drive_metrics_provider_ = new metrics::DriveMetricsProvider( | 396 drive_metrics_provider_ = new metrics::DriveMetricsProvider( |
393 content::BrowserThread::GetMessageLoopProxyForThread( | 397 content::BrowserThread::GetMessageLoopProxyForThread( |
394 content::BrowserThread::FILE), | 398 content::BrowserThread::FILE), |
395 chrome::FILE_LOCAL_STATE); | 399 chrome::FILE_LOCAL_STATE); |
396 metrics_service_->RegisterMetricsProvider( | 400 metrics_service_->RegisterMetricsProvider( |
397 scoped_ptr<metrics::MetricsProvider>(drive_metrics_provider_)); | 401 std::unique_ptr<metrics::MetricsProvider>(drive_metrics_provider_)); |
398 | 402 |
399 profiler_metrics_provider_ = | 403 profiler_metrics_provider_ = |
400 new metrics::ProfilerMetricsProvider(base::Bind(&IsCellularLogicEnabled)); | 404 new metrics::ProfilerMetricsProvider(base::Bind(&IsCellularLogicEnabled)); |
401 metrics_service_->RegisterMetricsProvider( | 405 metrics_service_->RegisterMetricsProvider( |
402 scoped_ptr<metrics::MetricsProvider>(profiler_metrics_provider_)); | 406 std::unique_ptr<metrics::MetricsProvider>(profiler_metrics_provider_)); |
403 | 407 |
404 metrics_service_->RegisterMetricsProvider( | 408 metrics_service_->RegisterMetricsProvider( |
405 scoped_ptr<metrics::MetricsProvider>( | 409 std::unique_ptr<metrics::MetricsProvider>( |
406 new metrics::CallStackProfileMetricsProvider)); | 410 new metrics::CallStackProfileMetricsProvider)); |
407 | 411 |
408 #if BUILDFLAG(ANDROID_JAVA_UI) | 412 #if BUILDFLAG(ANDROID_JAVA_UI) |
409 metrics_service_->RegisterMetricsProvider( | 413 metrics_service_->RegisterMetricsProvider( |
410 scoped_ptr<metrics::MetricsProvider>( | 414 std::unique_ptr<metrics::MetricsProvider>( |
411 new AndroidMetricsProvider(g_browser_process->local_state()))); | 415 new AndroidMetricsProvider(g_browser_process->local_state()))); |
412 #endif // BUILDFLAG(ANDROID_JAVA_UI) | 416 #endif // BUILDFLAG(ANDROID_JAVA_UI) |
413 | 417 |
414 #if defined(OS_WIN) | 418 #if defined(OS_WIN) |
415 google_update_metrics_provider_ = new GoogleUpdateMetricsProviderWin; | 419 google_update_metrics_provider_ = new GoogleUpdateMetricsProviderWin; |
416 metrics_service_->RegisterMetricsProvider( | 420 metrics_service_->RegisterMetricsProvider( |
417 scoped_ptr<metrics::MetricsProvider>(google_update_metrics_provider_)); | 421 std::unique_ptr<metrics::MetricsProvider>( |
| 422 google_update_metrics_provider_)); |
418 | 423 |
419 metrics_service_->RegisterMetricsProvider( | 424 metrics_service_->RegisterMetricsProvider( |
420 scoped_ptr<metrics::MetricsProvider>( | 425 std::unique_ptr<metrics::MetricsProvider>( |
421 new browser_watcher::WatcherMetricsProviderWin( | 426 new browser_watcher::WatcherMetricsProviderWin( |
422 chrome::kBrowserExitCodesRegistryPath, | 427 chrome::kBrowserExitCodesRegistryPath, |
423 content::BrowserThread::GetBlockingPool()))); | 428 content::BrowserThread::GetBlockingPool()))); |
424 #endif // defined(OS_WIN) | 429 #endif // defined(OS_WIN) |
425 | 430 |
426 #if defined(ENABLE_PLUGINS) | 431 #if defined(ENABLE_PLUGINS) |
427 plugin_metrics_provider_ = | 432 plugin_metrics_provider_ = |
428 new PluginMetricsProvider(g_browser_process->local_state()); | 433 new PluginMetricsProvider(g_browser_process->local_state()); |
429 metrics_service_->RegisterMetricsProvider( | 434 metrics_service_->RegisterMetricsProvider( |
430 scoped_ptr<metrics::MetricsProvider>(plugin_metrics_provider_)); | 435 std::unique_ptr<metrics::MetricsProvider>(plugin_metrics_provider_)); |
431 #endif // defined(ENABLE_PLUGINS) | 436 #endif // defined(ENABLE_PLUGINS) |
432 | 437 |
433 #if defined(OS_CHROMEOS) | 438 #if defined(OS_CHROMEOS) |
434 ChromeOSMetricsProvider* chromeos_metrics_provider = | 439 ChromeOSMetricsProvider* chromeos_metrics_provider = |
435 new ChromeOSMetricsProvider; | 440 new ChromeOSMetricsProvider; |
436 chromeos_metrics_provider_ = chromeos_metrics_provider; | 441 chromeos_metrics_provider_ = chromeos_metrics_provider; |
437 metrics_service_->RegisterMetricsProvider( | 442 metrics_service_->RegisterMetricsProvider( |
438 scoped_ptr<metrics::MetricsProvider>(chromeos_metrics_provider)); | 443 std::unique_ptr<metrics::MetricsProvider>(chromeos_metrics_provider)); |
439 | 444 |
440 SigninStatusMetricsProviderChromeOS* signin_metrics_provider_cros = | 445 SigninStatusMetricsProviderChromeOS* signin_metrics_provider_cros = |
441 new SigninStatusMetricsProviderChromeOS; | 446 new SigninStatusMetricsProviderChromeOS; |
442 metrics_service_->RegisterMetricsProvider( | 447 metrics_service_->RegisterMetricsProvider( |
443 scoped_ptr<metrics::MetricsProvider>(signin_metrics_provider_cros)); | 448 std::unique_ptr<metrics::MetricsProvider>(signin_metrics_provider_cros)); |
444 #endif // defined(OS_CHROMEOS) | 449 #endif // defined(OS_CHROMEOS) |
445 | 450 |
446 #if !defined(OS_CHROMEOS) | 451 #if !defined(OS_CHROMEOS) |
447 metrics_service_->RegisterMetricsProvider( | 452 metrics_service_->RegisterMetricsProvider( |
448 scoped_ptr<metrics::MetricsProvider>( | 453 std::unique_ptr<metrics::MetricsProvider>( |
449 SigninStatusMetricsProvider::CreateInstance( | 454 SigninStatusMetricsProvider::CreateInstance(base::WrapUnique( |
450 make_scoped_ptr(new ChromeSigninStatusMetricsProviderDelegate)))); | 455 new ChromeSigninStatusMetricsProviderDelegate)))); |
451 #endif // !defined(OS_CHROMEOS) | 456 #endif // !defined(OS_CHROMEOS) |
452 | 457 |
453 metrics_service_->RegisterMetricsProvider( | 458 metrics_service_->RegisterMetricsProvider( |
454 scoped_ptr<metrics::MetricsProvider>( | 459 std::unique_ptr<metrics::MetricsProvider>( |
455 new sync_driver::DeviceCountMetricsProvider(base::Bind( | 460 new sync_driver::DeviceCountMetricsProvider(base::Bind( |
456 &browser_sync::ChromeSyncClient::GetDeviceInfoTrackers)))); | 461 &browser_sync::ChromeSyncClient::GetDeviceInfoTrackers)))); |
457 | 462 |
458 // Clear stability metrics if it is the first time cellular upload logic | 463 // Clear stability metrics if it is the first time cellular upload logic |
459 // should apply to avoid sudden bulk uploads. It needs to be done after all | 464 // should apply to avoid sudden bulk uploads. It needs to be done after all |
460 // providers are registered. | 465 // providers are registered. |
461 if (ShouldClearSavedMetrics()) | 466 if (ShouldClearSavedMetrics()) |
462 metrics_service_->ClearSavedStabilityMetrics(); | 467 metrics_service_->ClearSavedStabilityMetrics(); |
463 } | 468 } |
464 | 469 |
(...skipping 221 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
686 } | 691 } |
687 } | 692 } |
688 | 693 |
689 void ChromeMetricsServiceClient::OnURLOpenedFromOmnibox(OmniboxLog* log) { | 694 void ChromeMetricsServiceClient::OnURLOpenedFromOmnibox(OmniboxLog* log) { |
690 metrics_service_->OnApplicationNotIdle(); | 695 metrics_service_->OnApplicationNotIdle(); |
691 } | 696 } |
692 | 697 |
693 bool ChromeMetricsServiceClient::IsUMACellularUploadLogicEnabled() { | 698 bool ChromeMetricsServiceClient::IsUMACellularUploadLogicEnabled() { |
694 return IsCellularLogicEnabled(); | 699 return IsCellularLogicEnabled(); |
695 } | 700 } |
OLD | NEW |