Chromium Code Reviews| 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 <vector> | 7 #include <vector> |
| 8 | 8 |
| 9 #include "base/bind.h" | 9 #include "base/bind.h" |
| 10 #include "base/callback.h" | 10 #include "base/callback.h" |
| 11 #include "base/command_line.h" | 11 #include "base/command_line.h" |
| 12 #include "base/logging.h" | 12 #include "base/logging.h" |
| 13 #include "base/metrics/histogram.h" | 13 #include "base/metrics/histogram.h" |
| 14 #include "base/prefs/pref_registry_simple.h" | |
| 14 #include "base/strings/string16.h" | 15 #include "base/strings/string16.h" |
| 15 #include "base/strings/string_util.h" | 16 #include "base/strings/string_util.h" |
| 16 #include "base/strings/utf_string_conversions.h" | 17 #include "base/strings/utf_string_conversions.h" |
| 17 #include "base/threading/platform_thread.h" | 18 #include "base/threading/platform_thread.h" |
| 18 #include "base/time/time.h" | 19 #include "base/time/time.h" |
| 19 #include "chrome/browser/browser_process.h" | 20 #include "chrome/browser/browser_process.h" |
| 20 #include "chrome/browser/chrome_notification_types.h" | 21 #include "chrome/browser/chrome_notification_types.h" |
| 21 #include "chrome/browser/google/google_util.h" | 22 #include "chrome/browser/google/google_util.h" |
| 22 #include "chrome/browser/memory_details.h" | 23 #include "chrome/browser/memory_details.h" |
| 24 #include "chrome/browser/metrics/chrome_stability_metrics_provider.h" | |
| 23 #include "chrome/browser/metrics/extensions_metrics_provider.h" | 25 #include "chrome/browser/metrics/extensions_metrics_provider.h" |
| 26 #include "chrome/browser/metrics/gpu_metrics_provider.h" | |
| 24 #include "chrome/browser/metrics/metrics_service.h" | 27 #include "chrome/browser/metrics/metrics_service.h" |
| 28 #include "chrome/browser/metrics/network_metrics_provider.h" | |
| 29 #include "chrome/browser/metrics/omnibox_metrics_provider.h" | |
| 30 #include "chrome/browser/metrics/profiler_metrics_provider.h" | |
| 31 #include "chrome/browser/metrics/tracking_synchronizer.h" | |
| 25 #include "chrome/browser/ui/browser_otr_state.h" | 32 #include "chrome/browser/ui/browser_otr_state.h" |
| 26 #include "chrome/common/chrome_constants.h" | 33 #include "chrome/common/chrome_constants.h" |
| 27 #include "chrome/common/chrome_switches.h" | 34 #include "chrome/common/chrome_switches.h" |
| 28 #include "chrome/common/chrome_version_info.h" | 35 #include "chrome/common/chrome_version_info.h" |
| 29 #include "chrome/common/crash_keys.h" | 36 #include "chrome/common/crash_keys.h" |
| 30 #include "chrome/common/render_messages.h" | 37 #include "chrome/common/render_messages.h" |
| 31 #include "components/metrics/net/net_metrics_log_uploader.h" | 38 #include "components/metrics/net/net_metrics_log_uploader.h" |
| 32 #include "content/public/browser/browser_thread.h" | 39 #include "content/public/browser/browser_thread.h" |
| 33 #include "content/public/browser/histogram_fetcher.h" | 40 #include "content/public/browser/histogram_fetcher.h" |
| 34 #include "content/public/browser/notification_service.h" | 41 #include "content/public/browser/notification_service.h" |
| 35 #include "content/public/browser/render_process_host.h" | 42 #include "content/public/browser/render_process_host.h" |
| 36 | 43 |
| 37 #if !defined(OS_ANDROID) | 44 #if defined(OS_ANDROID) |
| 45 #include "chrome/browser/metrics/android_metrics_provider.h" | |
| 46 #else | |
| 38 #include "chrome/browser/service_process/service_process_control.h" | 47 #include "chrome/browser/service_process/service_process_control.h" |
| 39 #endif | 48 #endif |
| 40 | 49 |
| 50 #if defined(ENABLE_PLUGINS) | |
| 51 #include "chrome/browser/metrics/plugin_metrics_provider.h" | |
| 52 #endif | |
| 53 | |
| 41 #if defined(OS_CHROMEOS) | 54 #if defined(OS_CHROMEOS) |
| 42 #include "chrome/browser/metrics/chromeos_metrics_provider.h" | 55 #include "chrome/browser/metrics/chromeos_metrics_provider.h" |
| 43 #endif | 56 #endif |
| 44 | 57 |
| 45 #if defined(OS_WIN) | 58 #if defined(OS_WIN) |
| 46 #include <windows.h> | 59 #include <windows.h> |
| 47 #include "base/win/registry.h" | 60 #include "base/win/registry.h" |
| 48 #include "chrome/browser/metrics/google_update_metrics_provider_win.h" | 61 #include "chrome/browser/metrics/google_update_metrics_provider_win.h" |
| 49 #endif | 62 #endif |
| 50 | 63 |
| (...skipping 68 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 119 PrefService* local_state) { | 132 PrefService* local_state) { |
| 120 // Perform two-phase initialization so that |client->metrics_service_| only | 133 // Perform two-phase initialization so that |client->metrics_service_| only |
| 121 // receives pointers to fully constructed objects. | 134 // receives pointers to fully constructed objects. |
| 122 scoped_ptr<ChromeMetricsServiceClient> client( | 135 scoped_ptr<ChromeMetricsServiceClient> client( |
| 123 new ChromeMetricsServiceClient(state_manager)); | 136 new ChromeMetricsServiceClient(state_manager)); |
| 124 client->Initialize(); | 137 client->Initialize(); |
| 125 | 138 |
| 126 return client.Pass(); | 139 return client.Pass(); |
| 127 } | 140 } |
| 128 | 141 |
| 142 // static | |
| 143 void ChromeMetricsServiceClient::RegisterPrefs(PrefRegistrySimple* registry) { | |
| 144 MetricsService::RegisterPrefs(registry); | |
| 145 ChromeStabilityMetricsProvider::RegisterPrefs(registry); | |
| 146 | |
| 147 #if defined(OS_ANDROID) | |
| 148 AndroidMetricsProvider::RegisterPrefs(registry); | |
| 149 #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.
| |
| 150 | |
| 151 #if defined(ENABLE_PLUGINS) | |
| 152 PluginMetricsProvider::RegisterPrefs(registry); | |
| 153 #endif | |
| 154 } | |
| 155 | |
| 129 void ChromeMetricsServiceClient::Initialize() { | 156 void ChromeMetricsServiceClient::Initialize() { |
| 130 metrics_service_.reset(new MetricsService( | 157 metrics_service_.reset(new MetricsService( |
| 131 metrics_state_manager_, this, g_browser_process->local_state())); | 158 metrics_state_manager_, this, g_browser_process->local_state())); |
| 132 | 159 |
| 133 // Register metrics providers. | 160 // Register metrics providers. |
| 134 metrics_service_->RegisterMetricsProvider( | 161 metrics_service_->RegisterMetricsProvider( |
| 135 scoped_ptr<metrics::MetricsProvider>( | 162 scoped_ptr<metrics::MetricsProvider>( |
| 136 new ExtensionsMetricsProvider(metrics_state_manager_))); | 163 new ExtensionsMetricsProvider(metrics_state_manager_))); |
| 137 | 164 |
| 165 #if defined(OS_ANDROID) | |
| 166 metrics_service_->RegisterMetricsProvider( | |
| 167 scoped_ptr<metrics::MetricsProvider>( | |
| 168 new AndroidMetricsProvider(g_browser_process->local_state()))); | |
| 169 #endif // defined(OS_ANDROID) | |
| 170 | |
| 171 metrics_service_->RegisterMetricsProvider( | |
| 172 scoped_ptr<metrics::MetricsProvider>(new NetworkMetricsProvider)); | |
| 173 metrics_service_->RegisterMetricsProvider( | |
| 174 scoped_ptr<metrics::MetricsProvider>(new OmniboxMetricsProvider)); | |
| 175 metrics_service_->RegisterMetricsProvider( | |
| 176 scoped_ptr<metrics::MetricsProvider>(new ChromeStabilityMetricsProvider)); | |
| 177 metrics_service_->RegisterMetricsProvider( | |
| 178 scoped_ptr<metrics::MetricsProvider>(new GPUMetricsProvider())); | |
| 179 profiler_metrics_provider_ = new ProfilerMetricsProvider; | |
| 180 metrics_service_->RegisterMetricsProvider( | |
| 181 scoped_ptr<metrics::MetricsProvider>(profiler_metrics_provider_)); | |
| 182 | |
| 183 #if defined(OS_WIN) | |
| 184 google_update_metrics_provider_ = new GoogleUpdateMetricsProviderWin; | |
| 185 metrics_service_->RegisterMetricsProvider( | |
| 186 scoped_ptr<metrics::MetricsProvider>(google_update_metrics_provider_)); | |
| 187 #endif | |
| 188 | |
| 189 #if defined(ENABLE_PLUGINS) | |
| 190 plugin_metrics_provider_ = | |
| 191 new PluginMetricsProvider(g_browser_process->local_state()); | |
| 192 metrics_service_->RegisterMetricsProvider( | |
| 193 scoped_ptr<metrics::MetricsProvider>(plugin_metrics_provider_)); | |
| 194 #endif | |
| 195 | |
| 138 #if defined(OS_CHROMEOS) | 196 #if defined(OS_CHROMEOS) |
| 139 ChromeOSMetricsProvider* chromeos_metrics_provider = | 197 ChromeOSMetricsProvider* chromeos_metrics_provider = |
| 140 new ChromeOSMetricsProvider; | 198 new ChromeOSMetricsProvider; |
| 141 chromeos_metrics_provider_ = chromeos_metrics_provider; | 199 chromeos_metrics_provider_ = chromeos_metrics_provider; |
| 142 metrics_service_->RegisterMetricsProvider( | 200 metrics_service_->RegisterMetricsProvider( |
| 143 scoped_ptr<metrics::MetricsProvider>(chromeos_metrics_provider)); | 201 scoped_ptr<metrics::MetricsProvider>(chromeos_metrics_provider)); |
| 144 #endif | 202 #endif |
| 145 } | 203 } |
| 146 | 204 |
| 147 void ChromeMetricsServiceClient::SetClientID(const std::string& client_id) { | 205 void ChromeMetricsServiceClient::SetClientID(const std::string& client_id) { |
| (...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 180 return version; | 238 return version; |
| 181 } | 239 } |
| 182 | 240 |
| 183 void ChromeMetricsServiceClient::OnLogUploadComplete() { | 241 void ChromeMetricsServiceClient::OnLogUploadComplete() { |
| 184 // Collect network stats after each UMA upload. | 242 // Collect network stats after each UMA upload. |
| 185 network_stats_uploader_.CollectAndReportNetworkStats(); | 243 network_stats_uploader_.CollectAndReportNetworkStats(); |
| 186 } | 244 } |
| 187 | 245 |
| 188 void ChromeMetricsServiceClient::StartGatheringMetrics( | 246 void ChromeMetricsServiceClient::StartGatheringMetrics( |
| 189 const base::Closure& done_callback) { | 247 const base::Closure& done_callback) { |
| 190 // TODO(blundell): Move all metrics gathering tasks from MetricsService to | 248 finished_gathering_initial_metrics_callback_ = done_callback; |
| 191 // here. | 249 base::Closure got_hardware_class_callback = |
| 250 base::Bind(&ChromeMetricsServiceClient::OnInitTaskGotHardwareClass, | |
| 251 weak_ptr_factory_.GetWeakPtr()); | |
| 192 #if defined(OS_CHROMEOS) | 252 #if defined(OS_CHROMEOS) |
| 193 chromeos_metrics_provider_->InitTaskGetHardwareClass(done_callback); | 253 chromeos_metrics_provider_->InitTaskGetHardwareClass( |
| 254 got_hardware_class_callback); | |
| 194 #else | 255 #else |
| 195 done_callback.Run(); | 256 got_hardware_class_callback.Run(); |
| 196 #endif | 257 #endif |
| 197 } | 258 } |
| 198 | 259 |
| 260 void ChromeMetricsServiceClient::LogPluginLoadingError( | |
| 261 const base::FilePath& plugin_path) { | |
| 262 #if defined(ENABLE_PLUGINS) | |
| 263 plugin_metrics_provider_->LogPluginLoadingError(plugin_path); | |
| 264 #endif | |
|
Alexei Svitkine (slow)
2014/06/02 13:54:03
Nit: #else
NOTREACHED():
blundell
2014/06/02 14:24:46
Done.
| |
| 265 } | |
| 266 | |
| 267 void ChromeMetricsServiceClient::OnInitTaskGotHardwareClass() { | |
| 268 const base::Closure got_plugin_info_callback = | |
| 269 base::Bind(&ChromeMetricsServiceClient::OnInitTaskGotPluginInfo, | |
| 270 weak_ptr_factory_.GetWeakPtr()); | |
| 271 | |
| 272 #if defined(ENABLE_PLUGINS) | |
| 273 plugin_metrics_provider_->GetPluginInformation(got_plugin_info_callback); | |
| 274 #else | |
| 275 got_plugin_info_callback.Run(); | |
| 276 #endif | |
| 277 } | |
| 278 | |
| 279 void ChromeMetricsServiceClient::OnInitTaskGotPluginInfo() { | |
| 280 const base::Closure got_metrics_callback = | |
| 281 base::Bind(&ChromeMetricsServiceClient::OnInitTaskGotGoogleUpdateData, | |
| 282 weak_ptr_factory_.GetWeakPtr()); | |
| 283 | |
| 284 #if defined(OS_WIN) && defined(GOOGLE_CHROME_BUILD) | |
| 285 google_update_metrics_provider_->GetGoogleUpdateData(got_metrics_callback); | |
| 286 #else | |
| 287 got_metrics_callback.Run(); | |
| 288 #endif | |
| 289 } | |
| 290 | |
| 291 void ChromeMetricsServiceClient::OnInitTaskGotGoogleUpdateData() { | |
| 292 // Start the next part of the init task: fetching performance data. This will | |
| 293 // call into |FinishedReceivingProfilerData()| when the task completes. | |
| 294 chrome_browser_metrics::TrackingSynchronizer::FetchProfilerDataAsynchronously( | |
| 295 weak_ptr_factory_.GetWeakPtr()); | |
| 296 } | |
| 297 | |
| 298 void ChromeMetricsServiceClient::ReceivedProfilerData( | |
| 299 const tracked_objects::ProcessDataSnapshot& process_data, | |
| 300 int process_type) { | |
| 301 profiler_metrics_provider_->RecordProfilerData(process_data, process_type); | |
| 302 } | |
| 303 | |
| 304 void ChromeMetricsServiceClient::FinishedReceivingProfilerData() { | |
| 305 finished_gathering_initial_metrics_callback_.Run(); | |
| 306 } | |
| 307 | |
| 199 void ChromeMetricsServiceClient::CollectFinalMetrics( | 308 void ChromeMetricsServiceClient::CollectFinalMetrics( |
| 200 const base::Closure& done_callback) { | 309 const base::Closure& done_callback) { |
| 201 DCHECK(thread_checker_.CalledOnValidThread()); | 310 DCHECK(thread_checker_.CalledOnValidThread()); |
| 202 | 311 |
| 203 collect_final_metrics_done_callback_ = done_callback; | 312 collect_final_metrics_done_callback_ = done_callback; |
| 204 | 313 |
| 205 // Begin the multi-step process of collecting memory usage histograms: | 314 // Begin the multi-step process of collecting memory usage histograms: |
| 206 // First spawn a task to collect the memory details; when that task is | 315 // First spawn a task to collect the memory details; when that task is |
| 207 // finished, it will call OnMemoryDetailCollectionDone. That will in turn | 316 // finished, it will call OnMemoryDetailCollectionDone. That will in turn |
| 208 // call HistogramSynchronization to collect histograms from all renderers and | 317 // call HistogramSynchronization to collect histograms from all renderers and |
| (...skipping 195 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 404 // Capture the histogram samples. | 513 // Capture the histogram samples. |
| 405 if (dumps_with_crash != 0) | 514 if (dumps_with_crash != 0) |
| 406 UMA_HISTOGRAM_COUNTS("Chrome.BrowserDumpsWithCrash", dumps_with_crash); | 515 UMA_HISTOGRAM_COUNTS("Chrome.BrowserDumpsWithCrash", dumps_with_crash); |
| 407 if (dumps_with_no_crash != 0) | 516 if (dumps_with_no_crash != 0) |
| 408 UMA_HISTOGRAM_COUNTS("Chrome.BrowserDumpsWithNoCrash", dumps_with_no_crash); | 517 UMA_HISTOGRAM_COUNTS("Chrome.BrowserDumpsWithNoCrash", dumps_with_no_crash); |
| 409 int total_dumps = dumps_with_crash + dumps_with_no_crash; | 518 int total_dumps = dumps_with_crash + dumps_with_no_crash; |
| 410 if (total_dumps != 0) | 519 if (total_dumps != 0) |
| 411 UMA_HISTOGRAM_COUNTS("Chrome.BrowserCrashDumpAttempts", total_dumps); | 520 UMA_HISTOGRAM_COUNTS("Chrome.BrowserCrashDumpAttempts", total_dumps); |
| 412 } | 521 } |
| 413 #endif // defined(OS_WIN) | 522 #endif // defined(OS_WIN) |
| OLD | NEW |