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

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: Response to review 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
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
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
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)
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698