Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(300)

Side by Side Diff: chrome/browser/metrics/chrome_metrics_service_client.cc

Issue 293393010: Move initial metrics gathering tasks out of MetricsService. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Rebase Created 6 years, 6 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
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
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
131 void ChromeMetricsServiceClient::Initialize() { 145 // static
132 metrics_service_.reset(new MetricsService( 146 void ChromeMetricsServiceClient::RegisterPrefs(PrefRegistrySimple* registry) {
133 metrics_state_manager_, this, g_browser_process->local_state())); 147 MetricsService::RegisterPrefs(registry);
148 ChromeStabilityMetricsProvider::RegisterPrefs(registry);
134 149
135 // Register metrics providers. 150 #if defined(OS_ANDROID)
136 metrics_service_->RegisterMetricsProvider( 151 AndroidMetricsProvider::RegisterPrefs(registry);
137 scoped_ptr<metrics::MetricsProvider>( 152 #endif // defined(OS_ANDROID)
138 new ExtensionsMetricsProvider(metrics_state_manager_)));
139 153
140 #if defined(OS_CHROMEOS) 154 #if defined(ENABLE_PLUGINS)
141 ChromeOSMetricsProvider* chromeos_metrics_provider = 155 PluginMetricsProvider::RegisterPrefs(registry);
142 new ChromeOSMetricsProvider; 156 #endif // defined(ENABLE_PLUGINS)
143 chromeos_metrics_provider_ = chromeos_metrics_provider;
144 metrics_service_->RegisterMetricsProvider(
145 scoped_ptr<metrics::MetricsProvider>(chromeos_metrics_provider));
146 #endif
147 } 157 }
148 158
149 void ChromeMetricsServiceClient::SetClientID(const std::string& client_id) { 159 void ChromeMetricsServiceClient::SetClientID(const std::string& client_id) {
150 crash_keys::SetClientID(client_id); 160 crash_keys::SetClientID(client_id);
151 } 161 }
152 162
153 bool ChromeMetricsServiceClient::IsOffTheRecordSessionActive() { 163 bool ChromeMetricsServiceClient::IsOffTheRecordSessionActive() {
154 return !chrome::IsOffTheRecordSessionActive(); 164 return !chrome::IsOffTheRecordSessionActive();
155 } 165 }
156 166
(...skipping 29 matching lines...) Expand all
186 return g_browser_process->local_state()->GetInt64(prefs::kInstallDate); 196 return g_browser_process->local_state()->GetInt64(prefs::kInstallDate);
187 } 197 }
188 198
189 void ChromeMetricsServiceClient::OnLogUploadComplete() { 199 void ChromeMetricsServiceClient::OnLogUploadComplete() {
190 // Collect network stats after each UMA upload. 200 // Collect network stats after each UMA upload.
191 network_stats_uploader_.CollectAndReportNetworkStats(); 201 network_stats_uploader_.CollectAndReportNetworkStats();
192 } 202 }
193 203
194 void ChromeMetricsServiceClient::StartGatheringMetrics( 204 void ChromeMetricsServiceClient::StartGatheringMetrics(
195 const base::Closure& done_callback) { 205 const base::Closure& done_callback) {
196 // TODO(blundell): Move all metrics gathering tasks from MetricsService to 206 finished_gathering_initial_metrics_callback_ = done_callback;
197 // here. 207 base::Closure got_hardware_class_callback =
208 base::Bind(&ChromeMetricsServiceClient::OnInitTaskGotHardwareClass,
209 weak_ptr_factory_.GetWeakPtr());
198 #if defined(OS_CHROMEOS) 210 #if defined(OS_CHROMEOS)
199 chromeos_metrics_provider_->InitTaskGetHardwareClass(done_callback); 211 chromeos_metrics_provider_->InitTaskGetHardwareClass(
212 got_hardware_class_callback);
200 #else 213 #else
201 done_callback.Run(); 214 got_hardware_class_callback.Run();
202 #endif 215 #endif // defined(OS_CHROMEOS)
203 } 216 }
204 217
205 void ChromeMetricsServiceClient::CollectFinalMetrics( 218 void ChromeMetricsServiceClient::CollectFinalMetrics(
206 const base::Closure& done_callback) { 219 const base::Closure& done_callback) {
207 DCHECK(thread_checker_.CalledOnValidThread()); 220 DCHECK(thread_checker_.CalledOnValidThread());
208 221
209 collect_final_metrics_done_callback_ = done_callback; 222 collect_final_metrics_done_callback_ = done_callback;
210 223
211 // Begin the multi-step process of collecting memory usage histograms: 224 // Begin the multi-step process of collecting memory usage histograms:
212 // First spawn a task to collect the memory details; when that task is 225 // First spawn a task to collect the memory details; when that task is
(...skipping 23 matching lines...) Expand all
236 ChromeMetricsServiceClient::CreateUploader( 249 ChromeMetricsServiceClient::CreateUploader(
237 const std::string& server_url, 250 const std::string& server_url,
238 const std::string& mime_type, 251 const std::string& mime_type,
239 const base::Callback<void(int)>& on_upload_complete) { 252 const base::Callback<void(int)>& on_upload_complete) {
240 return scoped_ptr<metrics::MetricsLogUploader>( 253 return scoped_ptr<metrics::MetricsLogUploader>(
241 new metrics::NetMetricsLogUploader( 254 new metrics::NetMetricsLogUploader(
242 g_browser_process->system_request_context(), server_url, mime_type, 255 g_browser_process->system_request_context(), server_url, mime_type,
243 on_upload_complete)); 256 on_upload_complete));
244 } 257 }
245 258
259 void ChromeMetricsServiceClient::LogPluginLoadingError(
260 const base::FilePath& plugin_path) {
261 #if defined(ENABLE_PLUGINS)
262 plugin_metrics_provider_->LogPluginLoadingError(plugin_path);
263 #else
264 NOTREACHED();
265 #endif // defined(ENABLE_PLUGINS)
266 }
267
268 void ChromeMetricsServiceClient::Initialize() {
269 metrics_service_.reset(new MetricsService(
270 metrics_state_manager_, this, g_browser_process->local_state()));
271
272 // Register metrics providers.
273 metrics_service_->RegisterMetricsProvider(
274 scoped_ptr<metrics::MetricsProvider>(
275 new ExtensionsMetricsProvider(metrics_state_manager_)));
276 metrics_service_->RegisterMetricsProvider(
277 scoped_ptr<metrics::MetricsProvider>(new NetworkMetricsProvider));
278 metrics_service_->RegisterMetricsProvider(
279 scoped_ptr<metrics::MetricsProvider>(new OmniboxMetricsProvider));
280 metrics_service_->RegisterMetricsProvider(
281 scoped_ptr<metrics::MetricsProvider>(new ChromeStabilityMetricsProvider));
282 metrics_service_->RegisterMetricsProvider(
283 scoped_ptr<metrics::MetricsProvider>(new GPUMetricsProvider()));
284 profiler_metrics_provider_ = new ProfilerMetricsProvider;
285 metrics_service_->RegisterMetricsProvider(
286 scoped_ptr<metrics::MetricsProvider>(profiler_metrics_provider_));
287
288 #if defined(OS_ANDROID)
289 metrics_service_->RegisterMetricsProvider(
290 scoped_ptr<metrics::MetricsProvider>(
291 new AndroidMetricsProvider(g_browser_process->local_state())));
292 #endif // defined(OS_ANDROID)
293
294 #if defined(OS_WIN)
295 google_update_metrics_provider_ = new GoogleUpdateMetricsProviderWin;
296 metrics_service_->RegisterMetricsProvider(
297 scoped_ptr<metrics::MetricsProvider>(google_update_metrics_provider_));
298 #endif // defined(OS_WIN)
299
300 #if defined(ENABLE_PLUGINS)
301 plugin_metrics_provider_ =
302 new PluginMetricsProvider(g_browser_process->local_state());
303 metrics_service_->RegisterMetricsProvider(
304 scoped_ptr<metrics::MetricsProvider>(plugin_metrics_provider_));
305 #endif // defined(ENABLE_PLUGINS)
306
307 #if defined(OS_CHROMEOS)
308 ChromeOSMetricsProvider* chromeos_metrics_provider =
309 new ChromeOSMetricsProvider;
310 chromeos_metrics_provider_ = chromeos_metrics_provider;
311 metrics_service_->RegisterMetricsProvider(
312 scoped_ptr<metrics::MetricsProvider>(chromeos_metrics_provider));
313 #endif // defined(OS_CHROMEOS)
314 }
315
316 void ChromeMetricsServiceClient::OnInitTaskGotHardwareClass() {
317 const base::Closure got_plugin_info_callback =
318 base::Bind(&ChromeMetricsServiceClient::OnInitTaskGotPluginInfo,
319 weak_ptr_factory_.GetWeakPtr());
320
321 #if defined(ENABLE_PLUGINS)
322 plugin_metrics_provider_->GetPluginInformation(got_plugin_info_callback);
323 #else
324 got_plugin_info_callback.Run();
325 #endif // defined(ENABLE_PLUGINS)
326 }
327
328 void ChromeMetricsServiceClient::OnInitTaskGotPluginInfo() {
329 const base::Closure got_metrics_callback =
330 base::Bind(&ChromeMetricsServiceClient::OnInitTaskGotGoogleUpdateData,
331 weak_ptr_factory_.GetWeakPtr());
332
333 #if defined(OS_WIN) && defined(GOOGLE_CHROME_BUILD)
334 google_update_metrics_provider_->GetGoogleUpdateData(got_metrics_callback);
335 #else
336 got_metrics_callback.Run();
337 #endif // defined(OS_WIN) && defined(GOOGLE_CHROME_BUILD)
338 }
339
340 void ChromeMetricsServiceClient::OnInitTaskGotGoogleUpdateData() {
341 // Start the next part of the init task: fetching performance data. This will
342 // call into |FinishedReceivingProfilerData()| when the task completes.
343 chrome_browser_metrics::TrackingSynchronizer::FetchProfilerDataAsynchronously(
344 weak_ptr_factory_.GetWeakPtr());
345 }
346
347 void ChromeMetricsServiceClient::ReceivedProfilerData(
348 const tracked_objects::ProcessDataSnapshot& process_data,
349 int process_type) {
350 profiler_metrics_provider_->RecordProfilerData(process_data, process_type);
351 }
352
353 void ChromeMetricsServiceClient::FinishedReceivingProfilerData() {
354 finished_gathering_initial_metrics_callback_.Run();
355 }
356
246 void ChromeMetricsServiceClient::OnMemoryDetailCollectionDone() { 357 void ChromeMetricsServiceClient::OnMemoryDetailCollectionDone() {
247 DCHECK(thread_checker_.CalledOnValidThread()); 358 DCHECK(thread_checker_.CalledOnValidThread());
248 359
249 // This function should only be called as the callback from an ansynchronous 360 // This function should only be called as the callback from an ansynchronous
250 // step. 361 // step.
251 DCHECK(waiting_for_collect_final_metrics_step_); 362 DCHECK(waiting_for_collect_final_metrics_step_);
252 363
253 // Create a callback_task for OnHistogramSynchronizationDone. 364 // Create a callback_task for OnHistogramSynchronizationDone.
254 base::Closure callback = base::Bind( 365 base::Closure callback = base::Bind(
255 &ChromeMetricsServiceClient::OnHistogramSynchronizationDone, 366 &ChromeMetricsServiceClient::OnHistogramSynchronizationDone,
(...skipping 154 matching lines...) Expand 10 before | Expand all | Expand 10 after
410 // Capture the histogram samples. 521 // Capture the histogram samples.
411 if (dumps_with_crash != 0) 522 if (dumps_with_crash != 0)
412 UMA_HISTOGRAM_COUNTS("Chrome.BrowserDumpsWithCrash", dumps_with_crash); 523 UMA_HISTOGRAM_COUNTS("Chrome.BrowserDumpsWithCrash", dumps_with_crash);
413 if (dumps_with_no_crash != 0) 524 if (dumps_with_no_crash != 0)
414 UMA_HISTOGRAM_COUNTS("Chrome.BrowserDumpsWithNoCrash", dumps_with_no_crash); 525 UMA_HISTOGRAM_COUNTS("Chrome.BrowserDumpsWithNoCrash", dumps_with_no_crash);
415 int total_dumps = dumps_with_crash + dumps_with_no_crash; 526 int total_dumps = dumps_with_crash + dumps_with_no_crash;
416 if (total_dumps != 0) 527 if (total_dumps != 0)
417 UMA_HISTOGRAM_COUNTS("Chrome.BrowserCrashDumpAttempts", total_dumps); 528 UMA_HISTOGRAM_COUNTS("Chrome.BrowserCrashDumpAttempts", total_dumps);
418 } 529 }
419 #endif // defined(OS_WIN) 530 #endif // defined(OS_WIN)
OLDNEW
« no previous file with comments | « chrome/browser/metrics/chrome_metrics_service_client.h ('k') | chrome/browser/metrics/metrics_service.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698