Chromium Code Reviews| Index: chrome/browser/metrics/chrome_metrics_service_client.cc |
| diff --git a/chrome/browser/metrics/chrome_metrics_service_client.cc b/chrome/browser/metrics/chrome_metrics_service_client.cc |
| index 763d43aae509554477b90dd09ce3da2982c23a85..4ca1a94b0de987623bc40924da3b139aca01b1dd 100644 |
| --- a/chrome/browser/metrics/chrome_metrics_service_client.cc |
| +++ b/chrome/browser/metrics/chrome_metrics_service_client.cc |
| @@ -11,6 +11,7 @@ |
| #include "base/command_line.h" |
| #include "base/logging.h" |
| #include "base/metrics/histogram.h" |
| +#include "base/prefs/pref_registry_simple.h" |
| #include "base/strings/string16.h" |
| #include "base/strings/string_util.h" |
| #include "base/strings/utf_string_conversions.h" |
| @@ -20,8 +21,14 @@ |
| #include "chrome/browser/chrome_notification_types.h" |
| #include "chrome/browser/google/google_util.h" |
| #include "chrome/browser/memory_details.h" |
| +#include "chrome/browser/metrics/chrome_stability_metrics_provider.h" |
| #include "chrome/browser/metrics/extensions_metrics_provider.h" |
| +#include "chrome/browser/metrics/gpu_metrics_provider.h" |
| #include "chrome/browser/metrics/metrics_service.h" |
| +#include "chrome/browser/metrics/network_metrics_provider.h" |
| +#include "chrome/browser/metrics/omnibox_metrics_provider.h" |
| +#include "chrome/browser/metrics/profiler_metrics_provider.h" |
| +#include "chrome/browser/metrics/tracking_synchronizer.h" |
| #include "chrome/browser/ui/browser_otr_state.h" |
| #include "chrome/common/chrome_constants.h" |
| #include "chrome/common/chrome_switches.h" |
| @@ -34,10 +41,16 @@ |
| #include "content/public/browser/notification_service.h" |
| #include "content/public/browser/render_process_host.h" |
| -#if !defined(OS_ANDROID) |
| +#if defined(OS_ANDROID) |
| +#include "chrome/browser/metrics/android_metrics_provider.h" |
| +#else |
| #include "chrome/browser/service_process/service_process_control.h" |
| #endif |
| +#if defined(ENABLE_PLUGINS) |
| +#include "chrome/browser/metrics/plugin_metrics_provider.h" |
| +#endif |
| + |
| #if defined(OS_CHROMEOS) |
| #include "chrome/browser/metrics/chromeos_metrics_provider.h" |
| #endif |
| @@ -126,6 +139,20 @@ scoped_ptr<ChromeMetricsServiceClient> ChromeMetricsServiceClient::Create( |
| return client.Pass(); |
| } |
| +// static |
| +void ChromeMetricsServiceClient::RegisterPrefs(PrefRegistrySimple* registry) { |
| + MetricsService::RegisterPrefs(registry); |
| + ChromeStabilityMetricsProvider::RegisterPrefs(registry); |
| + |
| +#if defined(OS_ANDROID) |
| + AndroidMetricsProvider::RegisterPrefs(registry); |
| +#endif // defined(OS_ANDROID) |
|
Alexei Svitkine (slow)
2014/06/02 13:54:03
nit: Make it consistent - either have // defined(.
blundell
2014/06/02 14:24:46
Done.
blundell
2014/06/02 14:24:46
Done.
|
| + |
| +#if defined(ENABLE_PLUGINS) |
| + PluginMetricsProvider::RegisterPrefs(registry); |
| +#endif |
| +} |
| + |
| void ChromeMetricsServiceClient::Initialize() { |
| metrics_service_.reset(new MetricsService( |
| metrics_state_manager_, this, g_browser_process->local_state())); |
| @@ -135,6 +162,37 @@ void ChromeMetricsServiceClient::Initialize() { |
| scoped_ptr<metrics::MetricsProvider>( |
| new ExtensionsMetricsProvider(metrics_state_manager_))); |
| +#if defined(OS_ANDROID) |
| + metrics_service_->RegisterMetricsProvider( |
| + scoped_ptr<metrics::MetricsProvider>( |
| + new AndroidMetricsProvider(g_browser_process->local_state()))); |
| +#endif // defined(OS_ANDROID) |
| + |
| + metrics_service_->RegisterMetricsProvider( |
| + scoped_ptr<metrics::MetricsProvider>(new NetworkMetricsProvider)); |
| + metrics_service_->RegisterMetricsProvider( |
| + scoped_ptr<metrics::MetricsProvider>(new OmniboxMetricsProvider)); |
| + metrics_service_->RegisterMetricsProvider( |
| + scoped_ptr<metrics::MetricsProvider>(new ChromeStabilityMetricsProvider)); |
| + metrics_service_->RegisterMetricsProvider( |
| + scoped_ptr<metrics::MetricsProvider>(new GPUMetricsProvider())); |
| + profiler_metrics_provider_ = new ProfilerMetricsProvider; |
| + metrics_service_->RegisterMetricsProvider( |
| + scoped_ptr<metrics::MetricsProvider>(profiler_metrics_provider_)); |
| + |
| +#if defined(OS_WIN) |
| + google_update_metrics_provider_ = new GoogleUpdateMetricsProviderWin; |
| + metrics_service_->RegisterMetricsProvider( |
| + scoped_ptr<metrics::MetricsProvider>(google_update_metrics_provider_)); |
| +#endif |
| + |
| +#if defined(ENABLE_PLUGINS) |
| + plugin_metrics_provider_ = |
| + new PluginMetricsProvider(g_browser_process->local_state()); |
| + metrics_service_->RegisterMetricsProvider( |
| + scoped_ptr<metrics::MetricsProvider>(plugin_metrics_provider_)); |
| +#endif |
| + |
| #if defined(OS_CHROMEOS) |
| ChromeOSMetricsProvider* chromeos_metrics_provider = |
| new ChromeOSMetricsProvider; |
| @@ -187,15 +245,66 @@ void ChromeMetricsServiceClient::OnLogUploadComplete() { |
| void ChromeMetricsServiceClient::StartGatheringMetrics( |
| const base::Closure& done_callback) { |
| -// TODO(blundell): Move all metrics gathering tasks from MetricsService to |
| -// here. |
| + finished_gathering_initial_metrics_callback_ = done_callback; |
| + base::Closure got_hardware_class_callback = |
| + base::Bind(&ChromeMetricsServiceClient::OnInitTaskGotHardwareClass, |
| + weak_ptr_factory_.GetWeakPtr()); |
| #if defined(OS_CHROMEOS) |
| - chromeos_metrics_provider_->InitTaskGetHardwareClass(done_callback); |
| + chromeos_metrics_provider_->InitTaskGetHardwareClass( |
| + got_hardware_class_callback); |
| #else |
| - done_callback.Run(); |
| + got_hardware_class_callback.Run(); |
| #endif |
| } |
| +void ChromeMetricsServiceClient::LogPluginLoadingError( |
| + const base::FilePath& plugin_path) { |
| +#if defined(ENABLE_PLUGINS) |
| + plugin_metrics_provider_->LogPluginLoadingError(plugin_path); |
| +#endif |
|
Alexei Svitkine (slow)
2014/06/02 13:54:03
Nit: #else
NOTREACHED():
blundell
2014/06/02 14:24:46
Done.
|
| +} |
| + |
| +void ChromeMetricsServiceClient::OnInitTaskGotHardwareClass() { |
| + const base::Closure got_plugin_info_callback = |
| + base::Bind(&ChromeMetricsServiceClient::OnInitTaskGotPluginInfo, |
| + weak_ptr_factory_.GetWeakPtr()); |
| + |
| +#if defined(ENABLE_PLUGINS) |
| + plugin_metrics_provider_->GetPluginInformation(got_plugin_info_callback); |
| +#else |
| + got_plugin_info_callback.Run(); |
| +#endif |
| +} |
| + |
| +void ChromeMetricsServiceClient::OnInitTaskGotPluginInfo() { |
| + const base::Closure got_metrics_callback = |
| + base::Bind(&ChromeMetricsServiceClient::OnInitTaskGotGoogleUpdateData, |
| + weak_ptr_factory_.GetWeakPtr()); |
| + |
| +#if defined(OS_WIN) && defined(GOOGLE_CHROME_BUILD) |
| + google_update_metrics_provider_->GetGoogleUpdateData(got_metrics_callback); |
| +#else |
| + got_metrics_callback.Run(); |
| +#endif |
| +} |
| + |
| +void ChromeMetricsServiceClient::OnInitTaskGotGoogleUpdateData() { |
| + // Start the next part of the init task: fetching performance data. This will |
| + // call into |FinishedReceivingProfilerData()| when the task completes. |
| + chrome_browser_metrics::TrackingSynchronizer::FetchProfilerDataAsynchronously( |
| + weak_ptr_factory_.GetWeakPtr()); |
| +} |
| + |
| +void ChromeMetricsServiceClient::ReceivedProfilerData( |
| + const tracked_objects::ProcessDataSnapshot& process_data, |
| + int process_type) { |
| + profiler_metrics_provider_->RecordProfilerData(process_data, process_type); |
| +} |
| + |
| +void ChromeMetricsServiceClient::FinishedReceivingProfilerData() { |
| + finished_gathering_initial_metrics_callback_.Run(); |
| +} |
| + |
| void ChromeMetricsServiceClient::CollectFinalMetrics( |
| const base::Closure& done_callback) { |
| DCHECK(thread_checker_.CalledOnValidThread()); |