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 // Clear deprecated metrics preference for Android. |
420 // apply to avoid sudden bulk uploads. It needs to be done before initializing | 407 PrefService* local_state = g_browser_process->local_state(); |
421 // metrics service so that metrics log manager is initialized correctly. | 408 #if BUILDFLAG(ANDROID_JAVA_UI) |
Alexei Svitkine (slow)
2016/09/19 19:38:02
Add a comment about this explaining what this with
gayane -on leave until 09-2017
2016/09/19 20:05:58
Done.
| |
422 if (ShouldClearSavedMetrics()) { | 409 local_state->ClearPref(prefs::kCrashReportingEnabled); |
423 PrefService* local_state = g_browser_process->local_state(); | 410 #endif |
424 local_state->ClearPref(metrics::prefs::kMetricsInitialLogs); | |
425 local_state->ClearPref(metrics::prefs::kMetricsOngoingLogs); | |
426 } | |
427 | 411 |
428 metrics_service_.reset(new metrics::MetricsService( | 412 metrics_service_.reset( |
429 metrics_state_manager_, this, g_browser_process->local_state())); | 413 new metrics::MetricsService(metrics_state_manager_, this, local_state)); |
430 | 414 |
431 // Gets access to persistent metrics shared by sub-processes. | 415 // Gets access to persistent metrics shared by sub-processes. |
432 metrics_service_->RegisterMetricsProvider( | 416 metrics_service_->RegisterMetricsProvider( |
433 std::unique_ptr<metrics::MetricsProvider>( | 417 std::unique_ptr<metrics::MetricsProvider>( |
434 new SubprocessMetricsProvider())); | 418 new SubprocessMetricsProvider())); |
435 | 419 |
436 // Register metrics providers. | 420 // Register metrics providers. |
437 #if defined(ENABLE_EXTENSIONS) | 421 #if defined(ENABLE_EXTENSIONS) |
438 metrics_service_->RegisterMetricsProvider( | 422 metrics_service_->RegisterMetricsProvider( |
439 std::unique_ptr<metrics::MetricsProvider>( | 423 std::unique_ptr<metrics::MetricsProvider>( |
440 new ExtensionsMetricsProvider(metrics_state_manager_))); | 424 new ExtensionsMetricsProvider(metrics_state_manager_))); |
441 #endif | 425 #endif |
442 metrics_service_->RegisterMetricsProvider( | 426 metrics_service_->RegisterMetricsProvider( |
443 std::unique_ptr<metrics::MetricsProvider>( | 427 std::unique_ptr<metrics::MetricsProvider>( |
444 new metrics::NetworkMetricsProvider( | 428 new metrics::NetworkMetricsProvider( |
445 content::BrowserThread::GetBlockingPool()))); | 429 content::BrowserThread::GetBlockingPool()))); |
446 | 430 |
447 // Currently, we configure OmniboxMetricsProvider to not log events to UMA | 431 // Currently, we configure OmniboxMetricsProvider to not log events to UMA |
448 // if there is a single incognito session visible. In the future, it may | 432 // 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. | 433 // be worth revisiting this to still log events from non-incognito sessions. |
450 metrics_service_->RegisterMetricsProvider( | 434 metrics_service_->RegisterMetricsProvider( |
451 std::unique_ptr<metrics::MetricsProvider>(new OmniboxMetricsProvider( | 435 std::unique_ptr<metrics::MetricsProvider>(new OmniboxMetricsProvider( |
452 base::Bind(&chrome::IsIncognitoSessionActive)))); | 436 base::Bind(&chrome::IsIncognitoSessionActive)))); |
453 metrics_service_->RegisterMetricsProvider( | 437 metrics_service_->RegisterMetricsProvider( |
454 std::unique_ptr<metrics::MetricsProvider>( | 438 std::unique_ptr<metrics::MetricsProvider>( |
455 new ChromeStabilityMetricsProvider( | 439 new ChromeStabilityMetricsProvider(local_state))); |
456 g_browser_process->local_state()))); | |
457 metrics_service_->RegisterMetricsProvider( | 440 metrics_service_->RegisterMetricsProvider( |
458 std::unique_ptr<metrics::MetricsProvider>( | 441 std::unique_ptr<metrics::MetricsProvider>( |
459 new metrics::GPUMetricsProvider)); | 442 new metrics::GPUMetricsProvider)); |
460 metrics_service_->RegisterMetricsProvider( | 443 metrics_service_->RegisterMetricsProvider( |
461 std::unique_ptr<metrics::MetricsProvider>( | 444 std::unique_ptr<metrics::MetricsProvider>( |
462 new metrics::ScreenInfoMetricsProvider)); | 445 new metrics::ScreenInfoMetricsProvider)); |
463 | 446 |
464 metrics_service_->RegisterMetricsProvider(CreateFileMetricsProvider( | 447 metrics_service_->RegisterMetricsProvider(CreateFileMetricsProvider( |
465 ChromeMetricsServiceAccessor::IsMetricsAndCrashReportingEnabled())); | 448 ChromeMetricsServiceAccessor::IsMetricsAndCrashReportingEnabled())); |
466 | 449 |
467 drive_metrics_provider_ = new metrics::DriveMetricsProvider( | 450 drive_metrics_provider_ = new metrics::DriveMetricsProvider( |
468 content::BrowserThread::GetTaskRunnerForThread( | 451 content::BrowserThread::GetTaskRunnerForThread( |
469 content::BrowserThread::FILE), | 452 content::BrowserThread::FILE), |
470 chrome::FILE_LOCAL_STATE); | 453 chrome::FILE_LOCAL_STATE); |
471 metrics_service_->RegisterMetricsProvider( | 454 metrics_service_->RegisterMetricsProvider( |
472 std::unique_ptr<metrics::MetricsProvider>(drive_metrics_provider_)); | 455 std::unique_ptr<metrics::MetricsProvider>(drive_metrics_provider_)); |
473 | 456 |
474 profiler_metrics_provider_ = new metrics::ProfilerMetricsProvider( | 457 profiler_metrics_provider_ = new metrics::ProfilerMetricsProvider(); |
475 base::Bind(&metrics::IsCellularLogicEnabled)); | |
476 metrics_service_->RegisterMetricsProvider( | 458 metrics_service_->RegisterMetricsProvider( |
477 std::unique_ptr<metrics::MetricsProvider>(profiler_metrics_provider_)); | 459 std::unique_ptr<metrics::MetricsProvider>(profiler_metrics_provider_)); |
478 | 460 |
479 metrics_service_->RegisterMetricsProvider( | 461 metrics_service_->RegisterMetricsProvider( |
480 std::unique_ptr<metrics::MetricsProvider>( | 462 std::unique_ptr<metrics::MetricsProvider>( |
481 new metrics::CallStackProfileMetricsProvider)); | 463 new metrics::CallStackProfileMetricsProvider)); |
482 | 464 |
483 metrics_service_->RegisterMetricsProvider( | 465 metrics_service_->RegisterMetricsProvider( |
484 std::unique_ptr<metrics::MetricsProvider>( | 466 std::unique_ptr<metrics::MetricsProvider>( |
485 new metrics::SamplingMetricsProvider)); | 467 new metrics::SamplingMetricsProvider)); |
486 | 468 |
487 #if BUILDFLAG(ANDROID_JAVA_UI) | 469 #if BUILDFLAG(ANDROID_JAVA_UI) |
488 metrics_service_->RegisterMetricsProvider( | 470 metrics_service_->RegisterMetricsProvider( |
489 std::unique_ptr<metrics::MetricsProvider>( | 471 std::unique_ptr<metrics::MetricsProvider>( |
490 new AndroidMetricsProvider(g_browser_process->local_state()))); | 472 new AndroidMetricsProvider(local_state))); |
491 metrics_service_->RegisterMetricsProvider( | 473 metrics_service_->RegisterMetricsProvider( |
492 std::unique_ptr<metrics::MetricsProvider>(new PageLoadMetricsProvider())); | 474 std::unique_ptr<metrics::MetricsProvider>(new PageLoadMetricsProvider())); |
493 #endif // BUILDFLAG(ANDROID_JAVA_UI) | 475 #endif // BUILDFLAG(ANDROID_JAVA_UI) |
494 | 476 |
495 #if defined(OS_WIN) | 477 #if defined(OS_WIN) |
496 google_update_metrics_provider_ = new GoogleUpdateMetricsProviderWin; | 478 google_update_metrics_provider_ = new GoogleUpdateMetricsProviderWin; |
497 metrics_service_->RegisterMetricsProvider( | 479 metrics_service_->RegisterMetricsProvider( |
498 std::unique_ptr<metrics::MetricsProvider>( | 480 std::unique_ptr<metrics::MetricsProvider>( |
499 google_update_metrics_provider_)); | 481 google_update_metrics_provider_)); |
500 | 482 |
501 metrics_service_->RegisterMetricsProvider( | 483 metrics_service_->RegisterMetricsProvider( |
502 std::unique_ptr<metrics::MetricsProvider>( | 484 std::unique_ptr<metrics::MetricsProvider>( |
503 new browser_watcher::WatcherMetricsProviderWin( | 485 new browser_watcher::WatcherMetricsProviderWin( |
504 chrome::GetBrowserExitCodesRegistryPath(), | 486 chrome::GetBrowserExitCodesRegistryPath(), |
505 content::BrowserThread::GetBlockingPool()))); | 487 content::BrowserThread::GetBlockingPool()))); |
506 | 488 |
507 antivirus_metrics_provider_ = new AntiVirusMetricsProvider( | 489 antivirus_metrics_provider_ = new AntiVirusMetricsProvider( |
508 content::BrowserThread::GetBlockingPool() | 490 content::BrowserThread::GetBlockingPool() |
509 ->GetTaskRunnerWithShutdownBehavior( | 491 ->GetTaskRunnerWithShutdownBehavior( |
510 base::SequencedWorkerPool::CONTINUE_ON_SHUTDOWN)); | 492 base::SequencedWorkerPool::CONTINUE_ON_SHUTDOWN)); |
511 | 493 |
512 metrics_service_->RegisterMetricsProvider( | 494 metrics_service_->RegisterMetricsProvider( |
513 std::unique_ptr<metrics::MetricsProvider>(antivirus_metrics_provider_)); | 495 std::unique_ptr<metrics::MetricsProvider>(antivirus_metrics_provider_)); |
514 #endif // defined(OS_WIN) | 496 #endif // defined(OS_WIN) |
515 | 497 |
516 #if defined(ENABLE_PLUGINS) | 498 #if defined(ENABLE_PLUGINS) |
517 plugin_metrics_provider_ = | 499 plugin_metrics_provider_ = new PluginMetricsProvider(local_state); |
518 new PluginMetricsProvider(g_browser_process->local_state()); | |
519 metrics_service_->RegisterMetricsProvider( | 500 metrics_service_->RegisterMetricsProvider( |
520 std::unique_ptr<metrics::MetricsProvider>(plugin_metrics_provider_)); | 501 std::unique_ptr<metrics::MetricsProvider>(plugin_metrics_provider_)); |
521 #endif // defined(ENABLE_PLUGINS) | 502 #endif // defined(ENABLE_PLUGINS) |
522 | 503 |
523 #if defined(OS_CHROMEOS) | 504 #if defined(OS_CHROMEOS) |
524 ChromeOSMetricsProvider* chromeos_metrics_provider = | 505 ChromeOSMetricsProvider* chromeos_metrics_provider = |
525 new ChromeOSMetricsProvider; | 506 new ChromeOSMetricsProvider; |
526 chromeos_metrics_provider_ = chromeos_metrics_provider; | 507 chromeos_metrics_provider_ = chromeos_metrics_provider; |
527 metrics_service_->RegisterMetricsProvider( | 508 metrics_service_->RegisterMetricsProvider( |
528 std::unique_ptr<metrics::MetricsProvider>(chromeos_metrics_provider)); | 509 std::unique_ptr<metrics::MetricsProvider>(chromeos_metrics_provider)); |
529 | 510 |
530 SigninStatusMetricsProviderChromeOS* signin_metrics_provider_cros = | 511 SigninStatusMetricsProviderChromeOS* signin_metrics_provider_cros = |
531 new SigninStatusMetricsProviderChromeOS; | 512 new SigninStatusMetricsProviderChromeOS; |
532 metrics_service_->RegisterMetricsProvider( | 513 metrics_service_->RegisterMetricsProvider( |
533 std::unique_ptr<metrics::MetricsProvider>(signin_metrics_provider_cros)); | 514 std::unique_ptr<metrics::MetricsProvider>(signin_metrics_provider_cros)); |
534 | 515 |
535 // Record default UMA state as opt-out for all Chrome OS users, if not | 516 // Record default UMA state as opt-out for all Chrome OS users, if not |
536 // recorded yet. | 517 // recorded yet. |
537 PrefService* local_state = g_browser_process->local_state(); | |
538 if (metrics::GetMetricsReportingDefaultState(local_state) == | 518 if (metrics::GetMetricsReportingDefaultState(local_state) == |
539 metrics::EnableMetricsDefault::DEFAULT_UNKNOWN) { | 519 metrics::EnableMetricsDefault::DEFAULT_UNKNOWN) { |
540 metrics::RecordMetricsReportingDefaultState( | 520 metrics::RecordMetricsReportingDefaultState( |
541 local_state, metrics::EnableMetricsDefault::OPT_OUT); | 521 local_state, metrics::EnableMetricsDefault::OPT_OUT); |
542 } | 522 } |
543 #endif // defined(OS_CHROMEOS) | 523 #endif // defined(OS_CHROMEOS) |
544 | 524 |
545 #if !defined(OS_CHROMEOS) | 525 #if !defined(OS_CHROMEOS) |
546 metrics_service_->RegisterMetricsProvider( | 526 metrics_service_->RegisterMetricsProvider( |
547 std::unique_ptr<metrics::MetricsProvider>( | 527 std::unique_ptr<metrics::MetricsProvider>( |
548 SigninStatusMetricsProvider::CreateInstance(base::WrapUnique( | 528 SigninStatusMetricsProvider::CreateInstance(base::WrapUnique( |
549 new ChromeSigninStatusMetricsProviderDelegate)))); | 529 new ChromeSigninStatusMetricsProviderDelegate)))); |
550 #endif // !defined(OS_CHROMEOS) | 530 #endif // !defined(OS_CHROMEOS) |
551 | 531 |
552 metrics_service_->RegisterMetricsProvider( | 532 metrics_service_->RegisterMetricsProvider( |
553 std::unique_ptr<metrics::MetricsProvider>( | 533 std::unique_ptr<metrics::MetricsProvider>( |
554 new sync_driver::DeviceCountMetricsProvider(base::Bind( | 534 new sync_driver::DeviceCountMetricsProvider(base::Bind( |
555 &browser_sync::ChromeSyncClient::GetDeviceInfoTrackers)))); | 535 &browser_sync::ChromeSyncClient::GetDeviceInfoTrackers)))); |
556 | 536 |
557 metrics_service_->RegisterMetricsProvider( | 537 metrics_service_->RegisterMetricsProvider( |
558 std::unique_ptr<metrics::MetricsProvider>( | 538 std::unique_ptr<metrics::MetricsProvider>( |
559 new HttpsEngagementMetricsProvider())); | 539 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 } | 540 } |
567 | 541 |
568 void ChromeMetricsServiceClient::OnInitTaskGotHardwareClass() { | 542 void ChromeMetricsServiceClient::OnInitTaskGotHardwareClass() { |
569 const base::Closure got_bluetooth_adapter_callback = | 543 const base::Closure got_bluetooth_adapter_callback = |
570 base::Bind(&ChromeMetricsServiceClient::OnInitTaskGotBluetoothAdapter, | 544 base::Bind(&ChromeMetricsServiceClient::OnInitTaskGotBluetoothAdapter, |
571 weak_ptr_factory_.GetWeakPtr()); | 545 weak_ptr_factory_.GetWeakPtr()); |
572 #if defined(OS_CHROMEOS) | 546 #if defined(OS_CHROMEOS) |
573 chromeos_metrics_provider_->InitTaskGetBluetoothAdapter( | 547 chromeos_metrics_provider_->InitTaskGetBluetoothAdapter( |
574 got_bluetooth_adapter_callback); | 548 got_bluetooth_adapter_callback); |
575 #else | 549 #else |
(...skipping 238 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
814 } | 788 } |
815 } | 789 } |
816 | 790 |
817 void ChromeMetricsServiceClient::OnURLOpenedFromOmnibox(OmniboxLog* log) { | 791 void ChromeMetricsServiceClient::OnURLOpenedFromOmnibox(OmniboxLog* log) { |
818 metrics_service_->OnApplicationNotIdle(); | 792 metrics_service_->OnApplicationNotIdle(); |
819 } | 793 } |
820 | 794 |
821 bool ChromeMetricsServiceClient::IsUMACellularUploadLogicEnabled() { | 795 bool ChromeMetricsServiceClient::IsUMACellularUploadLogicEnabled() { |
822 return metrics::IsCellularLogicEnabled(); | 796 return metrics::IsCellularLogicEnabled(); |
823 } | 797 } |
OLD | NEW |