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> |
| 8 |
7 #include "base/bind.h" | 9 #include "base/bind.h" |
8 #include "base/callback.h" | 10 #include "base/callback.h" |
9 #include "base/command_line.h" | 11 #include "base/command_line.h" |
10 #include "base/logging.h" | 12 #include "base/logging.h" |
11 #include "base/metrics/histogram.h" | 13 #include "base/metrics/histogram.h" |
12 #include "base/strings/string16.h" | 14 #include "base/strings/string16.h" |
13 #include "base/strings/string_util.h" | 15 #include "base/strings/string_util.h" |
14 #include "base/strings/utf_string_conversions.h" | 16 #include "base/strings/utf_string_conversions.h" |
15 #include "base/threading/platform_thread.h" | 17 #include "base/threading/platform_thread.h" |
16 #include "base/time/time.h" | 18 #include "base/time/time.h" |
17 #include "chrome/browser/browser_process.h" | 19 #include "chrome/browser/browser_process.h" |
18 #include "chrome/browser/chrome_notification_types.h" | 20 #include "chrome/browser/chrome_notification_types.h" |
19 #include "chrome/browser/google/google_util.h" | 21 #include "chrome/browser/google/google_util.h" |
20 #include "chrome/browser/memory_details.h" | 22 #include "chrome/browser/memory_details.h" |
21 #include "chrome/browser/metrics/extensions_metrics_provider.h" | 23 #include "chrome/browser/metrics/extensions_metrics_provider.h" |
22 #include "chrome/browser/metrics/metrics_service.h" | 24 #include "chrome/browser/metrics/metrics_service.h" |
23 #include "chrome/browser/ui/browser_otr_state.h" | 25 #include "chrome/browser/ui/browser_otr_state.h" |
24 #include "chrome/common/chrome_constants.h" | 26 #include "chrome/common/chrome_constants.h" |
25 #include "chrome/common/chrome_switches.h" | 27 #include "chrome/common/chrome_switches.h" |
26 #include "chrome/common/chrome_version_info.h" | 28 #include "chrome/common/chrome_version_info.h" |
27 #include "chrome/common/crash_keys.h" | 29 #include "chrome/common/crash_keys.h" |
28 #include "chrome/common/render_messages.h" | 30 #include "chrome/common/render_messages.h" |
| 31 #include "components/metrics/net/net_metrics_log_uploader.h" |
29 #include "content/public/browser/browser_thread.h" | 32 #include "content/public/browser/browser_thread.h" |
30 #include "content/public/browser/histogram_fetcher.h" | 33 #include "content/public/browser/histogram_fetcher.h" |
31 #include "content/public/browser/notification_service.h" | 34 #include "content/public/browser/notification_service.h" |
32 #include "content/public/browser/render_process_host.h" | 35 #include "content/public/browser/render_process_host.h" |
33 | 36 |
34 #if !defined(OS_ANDROID) | 37 #if !defined(OS_ANDROID) |
35 #include "chrome/browser/service_process/service_process_control.h" | 38 #include "chrome/browser/service_process/service_process_control.h" |
36 #endif | 39 #endif |
37 | 40 |
38 #if defined(OS_CHROMEOS) | 41 #if defined(OS_CHROMEOS) |
(...skipping 136 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
175 if (!version_info.IsOfficialBuild()) | 178 if (!version_info.IsOfficialBuild()) |
176 version.append("-devel"); | 179 version.append("-devel"); |
177 return version; | 180 return version; |
178 } | 181 } |
179 | 182 |
180 void ChromeMetricsServiceClient::OnLogUploadComplete() { | 183 void ChromeMetricsServiceClient::OnLogUploadComplete() { |
181 // Collect network stats after each UMA upload. | 184 // Collect network stats after each UMA upload. |
182 network_stats_uploader_.CollectAndReportNetworkStats(); | 185 network_stats_uploader_.CollectAndReportNetworkStats(); |
183 } | 186 } |
184 | 187 |
| 188 void ChromeMetricsServiceClient::StartGatheringMetrics( |
| 189 const base::Closure& done_callback) { |
| 190 // TODO(blundell): Move all metrics gathering tasks from MetricsService to |
| 191 // here. |
| 192 #if defined(OS_CHROMEOS) |
| 193 chromeos_metrics_provider_->InitTaskGetHardwareClass(done_callback); |
| 194 #else |
| 195 done_callback.Run(); |
| 196 #endif |
| 197 } |
| 198 |
185 void ChromeMetricsServiceClient::CollectFinalMetrics( | 199 void ChromeMetricsServiceClient::CollectFinalMetrics( |
186 const base::Closure& done_callback) { | 200 const base::Closure& done_callback) { |
187 DCHECK(thread_checker_.CalledOnValidThread()); | 201 DCHECK(thread_checker_.CalledOnValidThread()); |
188 | 202 |
189 collect_final_metrics_done_callback_ = done_callback; | 203 collect_final_metrics_done_callback_ = done_callback; |
190 | 204 |
191 // Begin the multi-step process of collecting memory usage histograms: | 205 // Begin the multi-step process of collecting memory usage histograms: |
192 // First spawn a task to collect the memory details; when that task is | 206 // First spawn a task to collect the memory details; when that task is |
193 // finished, it will call OnMemoryDetailCollectionDone. That will in turn | 207 // finished, it will call OnMemoryDetailCollectionDone. That will in turn |
194 // call HistogramSynchronization to collect histograms from all renderers and | 208 // call HistogramSynchronization to collect histograms from all renderers and |
(...skipping 10 matching lines...) Expand all Loading... |
205 details->StartFetch(MemoryDetails::UPDATE_USER_METRICS); | 219 details->StartFetch(MemoryDetails::UPDATE_USER_METRICS); |
206 | 220 |
207 // Collect WebCore cache information to put into a histogram. | 221 // Collect WebCore cache information to put into a histogram. |
208 for (content::RenderProcessHost::iterator i( | 222 for (content::RenderProcessHost::iterator i( |
209 content::RenderProcessHost::AllHostsIterator()); | 223 content::RenderProcessHost::AllHostsIterator()); |
210 !i.IsAtEnd(); i.Advance()) { | 224 !i.IsAtEnd(); i.Advance()) { |
211 i.GetCurrentValue()->Send(new ChromeViewMsg_GetCacheResourceStats()); | 225 i.GetCurrentValue()->Send(new ChromeViewMsg_GetCacheResourceStats()); |
212 } | 226 } |
213 } | 227 } |
214 | 228 |
| 229 scoped_ptr<metrics::MetricsLogUploader> |
| 230 ChromeMetricsServiceClient::CreateUploader( |
| 231 const std::string& server_url, |
| 232 const std::string& mime_type, |
| 233 const base::Callback<void(int)>& on_upload_complete) { |
| 234 return scoped_ptr<metrics::MetricsLogUploader>( |
| 235 new metrics::NetMetricsLogUploader( |
| 236 g_browser_process->system_request_context(), server_url, mime_type, |
| 237 on_upload_complete)); |
| 238 } |
| 239 |
215 void ChromeMetricsServiceClient::OnMemoryDetailCollectionDone() { | 240 void ChromeMetricsServiceClient::OnMemoryDetailCollectionDone() { |
216 DCHECK(thread_checker_.CalledOnValidThread()); | 241 DCHECK(thread_checker_.CalledOnValidThread()); |
217 | 242 |
218 // This function should only be called as the callback from an ansynchronous | 243 // This function should only be called as the callback from an ansynchronous |
219 // step. | 244 // step. |
220 DCHECK(waiting_for_collect_final_metrics_step_); | 245 DCHECK(waiting_for_collect_final_metrics_step_); |
221 | 246 |
222 // Create a callback_task for OnHistogramSynchronizationDone. | 247 // Create a callback_task for OnHistogramSynchronizationDone. |
223 base::Closure callback = base::Bind( | 248 base::Closure callback = base::Bind( |
224 &ChromeMetricsServiceClient::OnHistogramSynchronizationDone, | 249 &ChromeMetricsServiceClient::OnHistogramSynchronizationDone, |
(...skipping 103 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
328 case content::NOTIFICATION_RENDERER_PROCESS_CLOSED: | 353 case content::NOTIFICATION_RENDERER_PROCESS_CLOSED: |
329 case content::NOTIFICATION_RENDER_WIDGET_HOST_HANG: | 354 case content::NOTIFICATION_RENDER_WIDGET_HOST_HANG: |
330 metrics_service_->OnApplicationNotIdle(); | 355 metrics_service_->OnApplicationNotIdle(); |
331 break; | 356 break; |
332 | 357 |
333 default: | 358 default: |
334 NOTREACHED(); | 359 NOTREACHED(); |
335 } | 360 } |
336 } | 361 } |
337 | 362 |
338 void ChromeMetricsServiceClient::StartGatheringMetrics( | |
339 const base::Closure& done_callback) { | |
340 // TODO(blundell): Move all metrics gathering tasks from MetricsService to | |
341 // here. | |
342 #if defined(OS_CHROMEOS) | |
343 chromeos_metrics_provider_->InitTaskGetHardwareClass(done_callback); | |
344 #else | |
345 done_callback.Run(); | |
346 #endif | |
347 } | |
348 | |
349 #if defined(OS_WIN) | 363 #if defined(OS_WIN) |
350 void ChromeMetricsServiceClient::CountBrowserCrashDumpAttempts() { | 364 void ChromeMetricsServiceClient::CountBrowserCrashDumpAttempts() { |
351 // Open the registry key for iteration. | 365 // Open the registry key for iteration. |
352 base::win::RegKey regkey; | 366 base::win::RegKey regkey; |
353 if (regkey.Open(HKEY_CURRENT_USER, | 367 if (regkey.Open(HKEY_CURRENT_USER, |
354 chrome::kBrowserCrashDumpAttemptsRegistryPath, | 368 chrome::kBrowserCrashDumpAttemptsRegistryPath, |
355 KEY_ALL_ACCESS) != ERROR_SUCCESS) { | 369 KEY_ALL_ACCESS) != ERROR_SUCCESS) { |
356 return; | 370 return; |
357 } | 371 } |
358 | 372 |
(...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
390 // Capture the histogram samples. | 404 // Capture the histogram samples. |
391 if (dumps_with_crash != 0) | 405 if (dumps_with_crash != 0) |
392 UMA_HISTOGRAM_COUNTS("Chrome.BrowserDumpsWithCrash", dumps_with_crash); | 406 UMA_HISTOGRAM_COUNTS("Chrome.BrowserDumpsWithCrash", dumps_with_crash); |
393 if (dumps_with_no_crash != 0) | 407 if (dumps_with_no_crash != 0) |
394 UMA_HISTOGRAM_COUNTS("Chrome.BrowserDumpsWithNoCrash", dumps_with_no_crash); | 408 UMA_HISTOGRAM_COUNTS("Chrome.BrowserDumpsWithNoCrash", dumps_with_no_crash); |
395 int total_dumps = dumps_with_crash + dumps_with_no_crash; | 409 int total_dumps = dumps_with_crash + dumps_with_no_crash; |
396 if (total_dumps != 0) | 410 if (total_dumps != 0) |
397 UMA_HISTOGRAM_COUNTS("Chrome.BrowserCrashDumpAttempts", total_dumps); | 411 UMA_HISTOGRAM_COUNTS("Chrome.BrowserCrashDumpAttempts", total_dumps); |
398 } | 412 } |
399 #endif // defined(OS_WIN) | 413 #endif // defined(OS_WIN) |
OLD | NEW |