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

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/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
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)
150
151 #if defined(ENABLE_PLUGINS)
152 PluginMetricsProvider::RegisterPrefs(registry);
153 #endif
Ilya Sherman 2014/06/02 21:52:37 nit: "// defined(ENABLE_PLUGINS)"
blundell 2014/06/06 13:06:28 Done.
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_)));
Ilya Sherman 2014/06/02 21:52:37 Huh. Was this being doubly registered before?
blundell 2014/06/06 13:06:28 Yep. On 2014/06/02 21:52:37, Ilya Sherman wrote:
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
Ilya Sherman 2014/06/02 21:52:37 nit: I'd move this past line 181, so that all of t
Ilya Sherman 2014/06/02 21:52:37 nit: "// defined(OS_ANDROID)"
blundell 2014/06/06 13:06:28 Done.
blundell 2014/06/06 13:06:28 Done.
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
Ilya Sherman 2014/06/02 21:52:37 nit: "// defined(OS_WIN)"
blundell 2014/06/06 13:06:28 Done.
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
Ilya Sherman 2014/06/02 21:52:37 nit: "// defined(ENABLE_PLUGINS)"
blundell 2014/06/06 13:06:28 Done.
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
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 #else
265 NOTREACHED();
266 #endif
Ilya Sherman 2014/06/02 21:52:37 nit: trailing comment
blundell 2014/06/06 13:06:28 Done.
267 }
268
269 void ChromeMetricsServiceClient::OnInitTaskGotHardwareClass() {
270 const base::Closure got_plugin_info_callback =
271 base::Bind(&ChromeMetricsServiceClient::OnInitTaskGotPluginInfo,
272 weak_ptr_factory_.GetWeakPtr());
273
274 #if defined(ENABLE_PLUGINS)
275 plugin_metrics_provider_->GetPluginInformation(got_plugin_info_callback);
276 #else
277 got_plugin_info_callback.Run();
278 #endif
279 }
280
281 void ChromeMetricsServiceClient::OnInitTaskGotPluginInfo() {
282 const base::Closure got_metrics_callback =
283 base::Bind(&ChromeMetricsServiceClient::OnInitTaskGotGoogleUpdateData,
284 weak_ptr_factory_.GetWeakPtr());
285
286 #if defined(OS_WIN) && defined(GOOGLE_CHROME_BUILD)
287 google_update_metrics_provider_->GetGoogleUpdateData(got_metrics_callback);
288 #else
289 got_metrics_callback.Run();
290 #endif
291 }
292
293 void ChromeMetricsServiceClient::OnInitTaskGotGoogleUpdateData() {
294 // Start the next part of the init task: fetching performance data. This will
295 // call into |FinishedReceivingProfilerData()| when the task completes.
296 chrome_browser_metrics::TrackingSynchronizer::FetchProfilerDataAsynchronously(
297 weak_ptr_factory_.GetWeakPtr());
298 }
299
300 void ChromeMetricsServiceClient::ReceivedProfilerData(
301 const tracked_objects::ProcessDataSnapshot& process_data,
302 int process_type) {
303 profiler_metrics_provider_->RecordProfilerData(process_data, process_type);
304 }
305
306 void ChromeMetricsServiceClient::FinishedReceivingProfilerData() {
307 finished_gathering_initial_metrics_callback_.Run();
308 }
309
199 void ChromeMetricsServiceClient::CollectFinalMetrics( 310 void ChromeMetricsServiceClient::CollectFinalMetrics(
200 const base::Closure& done_callback) { 311 const base::Closure& done_callback) {
201 DCHECK(thread_checker_.CalledOnValidThread()); 312 DCHECK(thread_checker_.CalledOnValidThread());
202 313
203 collect_final_metrics_done_callback_ = done_callback; 314 collect_final_metrics_done_callback_ = done_callback;
204 315
205 // Begin the multi-step process of collecting memory usage histograms: 316 // Begin the multi-step process of collecting memory usage histograms:
206 // First spawn a task to collect the memory details; when that task is 317 // First spawn a task to collect the memory details; when that task is
207 // finished, it will call OnMemoryDetailCollectionDone. That will in turn 318 // finished, it will call OnMemoryDetailCollectionDone. That will in turn
208 // call HistogramSynchronization to collect histograms from all renderers and 319 // call HistogramSynchronization to collect histograms from all renderers and
(...skipping 195 matching lines...) Expand 10 before | Expand all | Expand 10 after
404 // Capture the histogram samples. 515 // Capture the histogram samples.
405 if (dumps_with_crash != 0) 516 if (dumps_with_crash != 0)
406 UMA_HISTOGRAM_COUNTS("Chrome.BrowserDumpsWithCrash", dumps_with_crash); 517 UMA_HISTOGRAM_COUNTS("Chrome.BrowserDumpsWithCrash", dumps_with_crash);
407 if (dumps_with_no_crash != 0) 518 if (dumps_with_no_crash != 0)
408 UMA_HISTOGRAM_COUNTS("Chrome.BrowserDumpsWithNoCrash", dumps_with_no_crash); 519 UMA_HISTOGRAM_COUNTS("Chrome.BrowserDumpsWithNoCrash", dumps_with_no_crash);
409 int total_dumps = dumps_with_crash + dumps_with_no_crash; 520 int total_dumps = dumps_with_crash + dumps_with_no_crash;
410 if (total_dumps != 0) 521 if (total_dumps != 0)
411 UMA_HISTOGRAM_COUNTS("Chrome.BrowserCrashDumpAttempts", total_dumps); 522 UMA_HISTOGRAM_COUNTS("Chrome.BrowserCrashDumpAttempts", total_dumps);
412 } 523 }
413 #endif // defined(OS_WIN) 524 #endif // defined(OS_WIN)
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698