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 22 matching lines...) Expand all Loading... |
33 #include "chrome/browser/metrics/subprocess_metrics_provider.h" | 33 #include "chrome/browser/metrics/subprocess_metrics_provider.h" |
34 #include "chrome/browser/metrics/time_ticks_experiment_win.h" | 34 #include "chrome/browser/metrics/time_ticks_experiment_win.h" |
35 #include "chrome/browser/sync/chrome_sync_client.h" | 35 #include "chrome/browser/sync/chrome_sync_client.h" |
36 #include "chrome/browser/ui/browser_otr_state.h" | 36 #include "chrome/browser/ui/browser_otr_state.h" |
37 #include "chrome/common/channel_info.h" | 37 #include "chrome/common/channel_info.h" |
38 #include "chrome/common/chrome_paths.h" | 38 #include "chrome/common/chrome_paths.h" |
39 #include "chrome/common/chrome_paths_internal.h" | 39 #include "chrome/common/chrome_paths_internal.h" |
40 #include "chrome/common/chrome_switches.h" | 40 #include "chrome/common/chrome_switches.h" |
41 #include "chrome/common/crash_keys.h" | 41 #include "chrome/common/crash_keys.h" |
42 #include "chrome/common/features.h" | 42 #include "chrome/common/features.h" |
| 43 #include "chrome/common/pref_names.h" |
43 #include "chrome/installer/util/util_constants.h" | 44 #include "chrome/installer/util/util_constants.h" |
44 #include "components/metrics/call_stack_profile_metrics_provider.h" | 45 #include "components/metrics/call_stack_profile_metrics_provider.h" |
45 #include "components/metrics/drive_metrics_provider.h" | 46 #include "components/metrics/drive_metrics_provider.h" |
46 #include "components/metrics/file_metrics_provider.h" | 47 #include "components/metrics/file_metrics_provider.h" |
47 #include "components/metrics/gpu/gpu_metrics_provider.h" | 48 #include "components/metrics/gpu/gpu_metrics_provider.h" |
48 #include "components/metrics/metrics_pref_names.h" | 49 #include "components/metrics/metrics_pref_names.h" |
49 #include "components/metrics/metrics_reporting_default_state.h" | 50 #include "components/metrics/metrics_reporting_default_state.h" |
50 #include "components/metrics/metrics_service.h" | 51 #include "components/metrics/metrics_service.h" |
51 #include "components/metrics/metrics_service_client.h" | 52 #include "components/metrics/metrics_service_client.h" |
52 #include "components/metrics/metrics_state_manager.h" | 53 #include "components/metrics/metrics_state_manager.h" |
(...skipping 55 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
108 namespace { | 109 namespace { |
109 | 110 |
110 // This specifies the amount of time to wait for all renderers to send their | 111 // This specifies the amount of time to wait for all renderers to send their |
111 // data. | 112 // data. |
112 const int kMaxHistogramGatheringWaitDuration = 60000; // 60 seconds. | 113 const int kMaxHistogramGatheringWaitDuration = 60000; // 60 seconds. |
113 | 114 |
114 // Needs to be kept in sync with the writer in | 115 // Needs to be kept in sync with the writer in |
115 // third_party/crashpad/crashpad/handler/handler_main.cc. | 116 // third_party/crashpad/crashpad/handler/handler_main.cc. |
116 const char kCrashpadHistogramAllocatorName[] = "CrashpadMetrics"; | 117 const char kCrashpadHistogramAllocatorName[] = "CrashpadMetrics"; |
117 | 118 |
118 // Checks whether it is the first time that cellular uploads logic should be | |
119 // enabled based on whether the the preference for that logic is initialized. | |
120 // This should happen only once as the used preference will be initialized | |
121 // afterwards in |UmaSessionStats.java|. | |
122 bool ShouldClearSavedMetrics() { | |
123 #if BUILDFLAG(ANDROID_JAVA_UI) | |
124 PrefService* local_state = g_browser_process->local_state(); | |
125 return !local_state->HasPrefPath(metrics::prefs::kMetricsReportingEnabled) && | |
126 metrics::IsCellularLogicEnabled(); | |
127 #else | |
128 return false; | |
129 #endif | |
130 } | |
131 | |
132 void RegisterFileMetricsPreferences(PrefRegistrySimple* registry) { | 119 void RegisterFileMetricsPreferences(PrefRegistrySimple* registry) { |
133 metrics::FileMetricsProvider::RegisterPrefs( | 120 metrics::FileMetricsProvider::RegisterPrefs( |
134 registry, ChromeMetricsServiceClient::kBrowserMetricsName); | 121 registry, ChromeMetricsServiceClient::kBrowserMetricsName); |
135 | 122 |
136 metrics::FileMetricsProvider::RegisterPrefs(registry, | 123 metrics::FileMetricsProvider::RegisterPrefs(registry, |
137 kCrashpadHistogramAllocatorName); | 124 kCrashpadHistogramAllocatorName); |
138 | 125 |
139 #if defined(OS_WIN) | 126 #if defined(OS_WIN) |
140 metrics::FileMetricsProvider::RegisterPrefs( | 127 metrics::FileMetricsProvider::RegisterPrefs( |
141 registry, installer::kSetupHistogramAllocatorName); | 128 registry, installer::kSetupHistogramAllocatorName); |
(...skipping 267 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
409 return IsMetricsReportingPolicyManaged(); | 396 return IsMetricsReportingPolicyManaged(); |
410 } | 397 } |
411 | 398 |
412 metrics::EnableMetricsDefault | 399 metrics::EnableMetricsDefault |
413 ChromeMetricsServiceClient::GetMetricsReportingDefaultState() { | 400 ChromeMetricsServiceClient::GetMetricsReportingDefaultState() { |
414 return metrics::GetMetricsReportingDefaultState( | 401 return metrics::GetMetricsReportingDefaultState( |
415 g_browser_process->local_state()); | 402 g_browser_process->local_state()); |
416 } | 403 } |
417 | 404 |
418 void ChromeMetricsServiceClient::Initialize() { | 405 void ChromeMetricsServiceClient::Initialize() { |
419 // Clear metrics reports if it is the first time cellular upload logic should | 406 PrefService* local_state = g_browser_process->local_state(); |
420 // apply to avoid sudden bulk uploads. It needs to be done before initializing | |
421 // metrics service so that metrics log manager is initialized correctly. | |
422 if (ShouldClearSavedMetrics()) { | |
423 PrefService* local_state = g_browser_process->local_state(); | |
424 local_state->ClearPref(metrics::prefs::kMetricsInitialLogs); | |
425 local_state->ClearPref(metrics::prefs::kMetricsOngoingLogs); | |
426 } | |
427 | 407 |
428 metrics_service_.reset(new metrics::MetricsService( | 408 // Clear deprecated metrics preference for Android. |
429 metrics_state_manager_, this, g_browser_process->local_state())); | 409 // TODO(gayane): Cleanup this code after M60 when the pref would be cleared |
| 410 // from clients. |
| 411 #if BUILDFLAG(ANDROID_JAVA_UI) |
| 412 local_state->ClearPref(prefs::kCrashReportingEnabled); |
| 413 #endif |
| 414 |
| 415 metrics_service_.reset( |
| 416 new metrics::MetricsService(metrics_state_manager_, this, local_state)); |
430 | 417 |
431 // Gets access to persistent metrics shared by sub-processes. | 418 // Gets access to persistent metrics shared by sub-processes. |
432 metrics_service_->RegisterMetricsProvider( | 419 metrics_service_->RegisterMetricsProvider( |
433 std::unique_ptr<metrics::MetricsProvider>( | 420 std::unique_ptr<metrics::MetricsProvider>( |
434 new SubprocessMetricsProvider())); | 421 new SubprocessMetricsProvider())); |
435 | 422 |
436 // Register metrics providers. | 423 // Register metrics providers. |
437 #if defined(ENABLE_EXTENSIONS) | 424 #if defined(ENABLE_EXTENSIONS) |
438 metrics_service_->RegisterMetricsProvider( | 425 metrics_service_->RegisterMetricsProvider( |
439 std::unique_ptr<metrics::MetricsProvider>( | 426 std::unique_ptr<metrics::MetricsProvider>( |
440 new ExtensionsMetricsProvider(metrics_state_manager_))); | 427 new ExtensionsMetricsProvider(metrics_state_manager_))); |
441 #endif | 428 #endif |
442 metrics_service_->RegisterMetricsProvider( | 429 metrics_service_->RegisterMetricsProvider( |
443 std::unique_ptr<metrics::MetricsProvider>( | 430 std::unique_ptr<metrics::MetricsProvider>( |
444 new metrics::NetworkMetricsProvider( | 431 new metrics::NetworkMetricsProvider( |
445 content::BrowserThread::GetBlockingPool()))); | 432 content::BrowserThread::GetBlockingPool()))); |
446 | 433 |
447 // Currently, we configure OmniboxMetricsProvider to not log events to UMA | 434 // Currently, we configure OmniboxMetricsProvider to not log events to UMA |
448 // if there is a single incognito session visible. In the future, it may | 435 // if there is a single incognito session visible. In the future, it may |
449 // be worth revisiting this to still log events from non-incognito sessions. | 436 // be worth revisiting this to still log events from non-incognito sessions. |
450 metrics_service_->RegisterMetricsProvider( | 437 metrics_service_->RegisterMetricsProvider( |
451 std::unique_ptr<metrics::MetricsProvider>(new OmniboxMetricsProvider( | 438 std::unique_ptr<metrics::MetricsProvider>(new OmniboxMetricsProvider( |
452 base::Bind(&chrome::IsIncognitoSessionActive)))); | 439 base::Bind(&chrome::IsIncognitoSessionActive)))); |
453 metrics_service_->RegisterMetricsProvider( | 440 metrics_service_->RegisterMetricsProvider( |
454 std::unique_ptr<metrics::MetricsProvider>( | 441 std::unique_ptr<metrics::MetricsProvider>( |
455 new ChromeStabilityMetricsProvider( | 442 new ChromeStabilityMetricsProvider(local_state))); |
456 g_browser_process->local_state()))); | |
457 metrics_service_->RegisterMetricsProvider( | 443 metrics_service_->RegisterMetricsProvider( |
458 std::unique_ptr<metrics::MetricsProvider>( | 444 std::unique_ptr<metrics::MetricsProvider>( |
459 new metrics::GPUMetricsProvider)); | 445 new metrics::GPUMetricsProvider)); |
460 metrics_service_->RegisterMetricsProvider( | 446 metrics_service_->RegisterMetricsProvider( |
461 std::unique_ptr<metrics::MetricsProvider>( | 447 std::unique_ptr<metrics::MetricsProvider>( |
462 new metrics::ScreenInfoMetricsProvider)); | 448 new metrics::ScreenInfoMetricsProvider)); |
463 | 449 |
464 metrics_service_->RegisterMetricsProvider(CreateFileMetricsProvider( | 450 metrics_service_->RegisterMetricsProvider(CreateFileMetricsProvider( |
465 ChromeMetricsServiceAccessor::IsMetricsAndCrashReportingEnabled())); | 451 ChromeMetricsServiceAccessor::IsMetricsAndCrashReportingEnabled())); |
466 | 452 |
467 drive_metrics_provider_ = new metrics::DriveMetricsProvider( | 453 drive_metrics_provider_ = new metrics::DriveMetricsProvider( |
468 content::BrowserThread::GetTaskRunnerForThread( | 454 content::BrowserThread::GetTaskRunnerForThread( |
469 content::BrowserThread::FILE), | 455 content::BrowserThread::FILE), |
470 chrome::FILE_LOCAL_STATE); | 456 chrome::FILE_LOCAL_STATE); |
471 metrics_service_->RegisterMetricsProvider( | 457 metrics_service_->RegisterMetricsProvider( |
472 std::unique_ptr<metrics::MetricsProvider>(drive_metrics_provider_)); | 458 std::unique_ptr<metrics::MetricsProvider>(drive_metrics_provider_)); |
473 | 459 |
474 profiler_metrics_provider_ = new metrics::ProfilerMetricsProvider( | 460 profiler_metrics_provider_ = new metrics::ProfilerMetricsProvider(); |
475 base::Bind(&metrics::IsCellularLogicEnabled)); | |
476 metrics_service_->RegisterMetricsProvider( | 461 metrics_service_->RegisterMetricsProvider( |
477 std::unique_ptr<metrics::MetricsProvider>(profiler_metrics_provider_)); | 462 std::unique_ptr<metrics::MetricsProvider>(profiler_metrics_provider_)); |
478 | 463 |
479 metrics_service_->RegisterMetricsProvider( | 464 metrics_service_->RegisterMetricsProvider( |
480 std::unique_ptr<metrics::MetricsProvider>( | 465 std::unique_ptr<metrics::MetricsProvider>( |
481 new metrics::CallStackProfileMetricsProvider)); | 466 new metrics::CallStackProfileMetricsProvider)); |
482 | 467 |
483 metrics_service_->RegisterMetricsProvider( | 468 metrics_service_->RegisterMetricsProvider( |
484 std::unique_ptr<metrics::MetricsProvider>( | 469 std::unique_ptr<metrics::MetricsProvider>( |
485 new metrics::SamplingMetricsProvider)); | 470 new metrics::SamplingMetricsProvider)); |
486 | 471 |
487 #if BUILDFLAG(ANDROID_JAVA_UI) | 472 #if BUILDFLAG(ANDROID_JAVA_UI) |
488 metrics_service_->RegisterMetricsProvider( | 473 metrics_service_->RegisterMetricsProvider( |
489 std::unique_ptr<metrics::MetricsProvider>( | 474 std::unique_ptr<metrics::MetricsProvider>( |
490 new AndroidMetricsProvider(g_browser_process->local_state()))); | 475 new AndroidMetricsProvider(local_state))); |
491 metrics_service_->RegisterMetricsProvider( | 476 metrics_service_->RegisterMetricsProvider( |
492 std::unique_ptr<metrics::MetricsProvider>(new PageLoadMetricsProvider())); | 477 std::unique_ptr<metrics::MetricsProvider>(new PageLoadMetricsProvider())); |
493 #endif // BUILDFLAG(ANDROID_JAVA_UI) | 478 #endif // BUILDFLAG(ANDROID_JAVA_UI) |
494 | 479 |
495 #if defined(OS_WIN) | 480 #if defined(OS_WIN) |
496 google_update_metrics_provider_ = new GoogleUpdateMetricsProviderWin; | 481 google_update_metrics_provider_ = new GoogleUpdateMetricsProviderWin; |
497 metrics_service_->RegisterMetricsProvider( | 482 metrics_service_->RegisterMetricsProvider( |
498 std::unique_ptr<metrics::MetricsProvider>( | 483 std::unique_ptr<metrics::MetricsProvider>( |
499 google_update_metrics_provider_)); | 484 google_update_metrics_provider_)); |
500 | 485 |
501 metrics_service_->RegisterMetricsProvider( | 486 metrics_service_->RegisterMetricsProvider( |
502 std::unique_ptr<metrics::MetricsProvider>( | 487 std::unique_ptr<metrics::MetricsProvider>( |
503 new browser_watcher::WatcherMetricsProviderWin( | 488 new browser_watcher::WatcherMetricsProviderWin( |
504 chrome::GetBrowserExitCodesRegistryPath(), | 489 chrome::GetBrowserExitCodesRegistryPath(), |
505 content::BrowserThread::GetBlockingPool()))); | 490 content::BrowserThread::GetBlockingPool()))); |
506 | 491 |
507 antivirus_metrics_provider_ = new AntiVirusMetricsProvider( | 492 antivirus_metrics_provider_ = new AntiVirusMetricsProvider( |
508 content::BrowserThread::GetBlockingPool() | 493 content::BrowserThread::GetBlockingPool() |
509 ->GetTaskRunnerWithShutdownBehavior( | 494 ->GetTaskRunnerWithShutdownBehavior( |
510 base::SequencedWorkerPool::CONTINUE_ON_SHUTDOWN)); | 495 base::SequencedWorkerPool::CONTINUE_ON_SHUTDOWN)); |
511 | 496 |
512 metrics_service_->RegisterMetricsProvider( | 497 metrics_service_->RegisterMetricsProvider( |
513 std::unique_ptr<metrics::MetricsProvider>(antivirus_metrics_provider_)); | 498 std::unique_ptr<metrics::MetricsProvider>(antivirus_metrics_provider_)); |
514 #endif // defined(OS_WIN) | 499 #endif // defined(OS_WIN) |
515 | 500 |
516 #if defined(ENABLE_PLUGINS) | 501 #if defined(ENABLE_PLUGINS) |
517 plugin_metrics_provider_ = | 502 plugin_metrics_provider_ = new PluginMetricsProvider(local_state); |
518 new PluginMetricsProvider(g_browser_process->local_state()); | |
519 metrics_service_->RegisterMetricsProvider( | 503 metrics_service_->RegisterMetricsProvider( |
520 std::unique_ptr<metrics::MetricsProvider>(plugin_metrics_provider_)); | 504 std::unique_ptr<metrics::MetricsProvider>(plugin_metrics_provider_)); |
521 #endif // defined(ENABLE_PLUGINS) | 505 #endif // defined(ENABLE_PLUGINS) |
522 | 506 |
523 #if defined(OS_CHROMEOS) | 507 #if defined(OS_CHROMEOS) |
524 ChromeOSMetricsProvider* chromeos_metrics_provider = | 508 ChromeOSMetricsProvider* chromeos_metrics_provider = |
525 new ChromeOSMetricsProvider; | 509 new ChromeOSMetricsProvider; |
526 chromeos_metrics_provider_ = chromeos_metrics_provider; | 510 chromeos_metrics_provider_ = chromeos_metrics_provider; |
527 metrics_service_->RegisterMetricsProvider( | 511 metrics_service_->RegisterMetricsProvider( |
528 std::unique_ptr<metrics::MetricsProvider>(chromeos_metrics_provider)); | 512 std::unique_ptr<metrics::MetricsProvider>(chromeos_metrics_provider)); |
529 | 513 |
530 SigninStatusMetricsProviderChromeOS* signin_metrics_provider_cros = | 514 SigninStatusMetricsProviderChromeOS* signin_metrics_provider_cros = |
531 new SigninStatusMetricsProviderChromeOS; | 515 new SigninStatusMetricsProviderChromeOS; |
532 metrics_service_->RegisterMetricsProvider( | 516 metrics_service_->RegisterMetricsProvider( |
533 std::unique_ptr<metrics::MetricsProvider>(signin_metrics_provider_cros)); | 517 std::unique_ptr<metrics::MetricsProvider>(signin_metrics_provider_cros)); |
534 | 518 |
535 // Record default UMA state as opt-out for all Chrome OS users, if not | 519 // Record default UMA state as opt-out for all Chrome OS users, if not |
536 // recorded yet. | 520 // recorded yet. |
537 PrefService* local_state = g_browser_process->local_state(); | |
538 if (metrics::GetMetricsReportingDefaultState(local_state) == | 521 if (metrics::GetMetricsReportingDefaultState(local_state) == |
539 metrics::EnableMetricsDefault::DEFAULT_UNKNOWN) { | 522 metrics::EnableMetricsDefault::DEFAULT_UNKNOWN) { |
540 metrics::RecordMetricsReportingDefaultState( | 523 metrics::RecordMetricsReportingDefaultState( |
541 local_state, metrics::EnableMetricsDefault::OPT_OUT); | 524 local_state, metrics::EnableMetricsDefault::OPT_OUT); |
542 } | 525 } |
543 #endif // defined(OS_CHROMEOS) | 526 #endif // defined(OS_CHROMEOS) |
544 | 527 |
545 #if !defined(OS_CHROMEOS) | 528 #if !defined(OS_CHROMEOS) |
546 metrics_service_->RegisterMetricsProvider( | 529 metrics_service_->RegisterMetricsProvider( |
547 std::unique_ptr<metrics::MetricsProvider>( | 530 std::unique_ptr<metrics::MetricsProvider>( |
548 SigninStatusMetricsProvider::CreateInstance(base::WrapUnique( | 531 SigninStatusMetricsProvider::CreateInstance(base::WrapUnique( |
549 new ChromeSigninStatusMetricsProviderDelegate)))); | 532 new ChromeSigninStatusMetricsProviderDelegate)))); |
550 #endif // !defined(OS_CHROMEOS) | 533 #endif // !defined(OS_CHROMEOS) |
551 | 534 |
552 metrics_service_->RegisterMetricsProvider( | 535 metrics_service_->RegisterMetricsProvider( |
553 std::unique_ptr<metrics::MetricsProvider>( | 536 std::unique_ptr<metrics::MetricsProvider>( |
554 new sync_driver::DeviceCountMetricsProvider(base::Bind( | 537 new sync_driver::DeviceCountMetricsProvider(base::Bind( |
555 &browser_sync::ChromeSyncClient::GetDeviceInfoTrackers)))); | 538 &browser_sync::ChromeSyncClient::GetDeviceInfoTrackers)))); |
556 | 539 |
557 metrics_service_->RegisterMetricsProvider( | 540 metrics_service_->RegisterMetricsProvider( |
558 std::unique_ptr<metrics::MetricsProvider>( | 541 std::unique_ptr<metrics::MetricsProvider>( |
559 new HttpsEngagementMetricsProvider())); | 542 new HttpsEngagementMetricsProvider())); |
560 | |
561 // Clear stability metrics if it is the first time cellular upload logic | |
562 // should apply to avoid sudden bulk uploads. It needs to be done after all | |
563 // providers are registered. | |
564 if (ShouldClearSavedMetrics()) | |
565 metrics_service_->ClearSavedStabilityMetrics(); | |
566 } | 543 } |
567 | 544 |
568 void ChromeMetricsServiceClient::OnInitTaskGotHardwareClass() { | 545 void ChromeMetricsServiceClient::OnInitTaskGotHardwareClass() { |
569 const base::Closure got_bluetooth_adapter_callback = | 546 const base::Closure got_bluetooth_adapter_callback = |
570 base::Bind(&ChromeMetricsServiceClient::OnInitTaskGotBluetoothAdapter, | 547 base::Bind(&ChromeMetricsServiceClient::OnInitTaskGotBluetoothAdapter, |
571 weak_ptr_factory_.GetWeakPtr()); | 548 weak_ptr_factory_.GetWeakPtr()); |
572 #if defined(OS_CHROMEOS) | 549 #if defined(OS_CHROMEOS) |
573 chromeos_metrics_provider_->InitTaskGetBluetoothAdapter( | 550 chromeos_metrics_provider_->InitTaskGetBluetoothAdapter( |
574 got_bluetooth_adapter_callback); | 551 got_bluetooth_adapter_callback); |
575 #else | 552 #else |
(...skipping 238 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
814 } | 791 } |
815 } | 792 } |
816 | 793 |
817 void ChromeMetricsServiceClient::OnURLOpenedFromOmnibox(OmniboxLog* log) { | 794 void ChromeMetricsServiceClient::OnURLOpenedFromOmnibox(OmniboxLog* log) { |
818 metrics_service_->OnApplicationNotIdle(); | 795 metrics_service_->OnApplicationNotIdle(); |
819 } | 796 } |
820 | 797 |
821 bool ChromeMetricsServiceClient::IsUMACellularUploadLogicEnabled() { | 798 bool ChromeMetricsServiceClient::IsUMACellularUploadLogicEnabled() { |
822 return metrics::IsCellularLogicEnabled(); | 799 return metrics::IsCellularLogicEnabled(); |
823 } | 800 } |
OLD | NEW |