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