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

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

Issue 9769011: Histogram times surrounding render crashes (Closed) Base URL: svn://chrome-svn/chrome/trunk/src/
Patch Set: Created 8 years, 9 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 | Annotate | Revision Log
OLDNEW
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 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 //------------------------------------------------------------------------------ 5 //------------------------------------------------------------------------------
6 // Description of the life cycle of a instance of MetricsService. 6 // Description of the life cycle of a instance of MetricsService.
7 // 7 //
8 // OVERVIEW 8 // OVERVIEW
9 // 9 //
10 // A MetricsService instance is typically created at application startup. It 10 // A MetricsService instance is typically created at application startup. It
(...skipping 542 matching lines...) Expand 10 before | Expand all | Expand 10 after
553 LogLoadStarted(); 553 LogLoadStarted();
554 break; 554 break;
555 555
556 case content::NOTIFICATION_RENDERER_PROCESS_CLOSED: { 556 case content::NOTIFICATION_RENDERER_PROCESS_CLOSED: {
557 content::RenderProcessHost::RendererClosedDetails* process_details = 557 content::RenderProcessHost::RendererClosedDetails* process_details =
558 content::Details< 558 content::Details<
559 content::RenderProcessHost::RendererClosedDetails>( 559 content::RenderProcessHost::RendererClosedDetails>(
560 details).ptr(); 560 details).ptr();
561 content::RenderProcessHost* host = 561 content::RenderProcessHost* host =
562 content::Source<content::RenderProcessHost>(source).ptr(); 562 content::Source<content::RenderProcessHost>(source).ptr();
563 LogRendererCrash( 563 LogRendererCrash(host, *process_details);
564 host, process_details->status, process_details->was_alive);
565 } 564 }
566 break; 565 break;
567 566
568 case content::NOTIFICATION_RENDERER_PROCESS_HANG: 567 case content::NOTIFICATION_RENDERER_PROCESS_HANG:
569 LogRendererHang(); 568 LogRendererHang();
570 break; 569 break;
571 570
572 case content::NOTIFICATION_CHILD_PROCESS_HOST_CONNECTED: 571 case content::NOTIFICATION_CHILD_PROCESS_HOST_CONNECTED:
573 case content::NOTIFICATION_CHILD_PROCESS_CRASHED: 572 case content::NOTIFICATION_CHILD_PROCESS_CRASHED:
574 case content::NOTIFICATION_CHILD_INSTANCE_CREATED: 573 case content::NOTIFICATION_CHILD_INSTANCE_CREATED:
(...skipping 786 matching lines...) Expand 10 before | Expand all | Expand 10 after
1361 } 1360 }
1362 1361
1363 void MetricsService::LogLoadStarted() { 1362 void MetricsService::LogLoadStarted() {
1364 HISTOGRAM_ENUMERATION("Chrome.UmaPageloadCounter", 1, 2); 1363 HISTOGRAM_ENUMERATION("Chrome.UmaPageloadCounter", 1, 2);
1365 IncrementPrefValue(prefs::kStabilityPageLoadCount); 1364 IncrementPrefValue(prefs::kStabilityPageLoadCount);
1366 IncrementLongPrefsValue(prefs::kUninstallMetricsPageLoadCount); 1365 IncrementLongPrefsValue(prefs::kUninstallMetricsPageLoadCount);
1367 // We need to save the prefs, as page load count is a critical stat, and it 1366 // We need to save the prefs, as page load count is a critical stat, and it
1368 // might be lost due to a crash :-(. 1367 // might be lost due to a crash :-(.
1369 } 1368 }
1370 1369
1371 void MetricsService::LogRendererCrash(content::RenderProcessHost* host, 1370 void MetricsService::LogRendererCrash(
1372 base::TerminationStatus status, 1371 content::RenderProcessHost* host,
1373 bool was_alive) { 1372 const content::RenderProcessHost::RendererClosedDetails& details) {
1374 Profile* profile = Profile::FromBrowserContext(host->GetBrowserContext()); 1373 Profile* profile = Profile::FromBrowserContext(host->GetBrowserContext());
1375 ExtensionService* service = profile->GetExtensionService(); 1374 ExtensionService* service = profile->GetExtensionService();
1376 bool was_extension_process = 1375 bool was_extension_process =
1377 service && service->process_map()->Contains(host->GetID()); 1376 service && service->process_map()->Contains(host->GetID());
1378 if (status == base::TERMINATION_STATUS_PROCESS_CRASHED || 1377 if (details.status == base::TERMINATION_STATUS_PROCESS_CRASHED ||
1379 status == base::TERMINATION_STATUS_ABNORMAL_TERMINATION) { 1378 details.status == base::TERMINATION_STATUS_ABNORMAL_TERMINATION) {
1380 if (was_extension_process) 1379 if (was_extension_process) {
1381 IncrementPrefValue(prefs::kStabilityExtensionRendererCrashCount); 1380 IncrementPrefValue(prefs::kStabilityExtensionRendererCrashCount);
1382 else 1381 } else {
1383 IncrementPrefValue(prefs::kStabilityRendererCrashCount); 1382 IncrementPrefValue(prefs::kStabilityRendererCrashCount);
1384 1383
1384 #if defined(OS_WIN)
1385 if (details.have_process_times) {
1386 if (details.status == base::TERMINATION_STATUS_PROCESS_CRASHED) {
1387 UMA_HISTOGRAM_TIMES("BrowserRenderProcessHost.CrashedDuration",
1388 details.run_duration);
1389 UMA_HISTOGRAM_TIMES("BrowserRenderProcessHost.CrashedKernelTime",
1390 details.kernel_duration);
1391 UMA_HISTOGRAM_TIMES("BrowserRenderProcessHost.CrashedUserTime",
1392 details.user_duration);
1393 } else {
1394 DCHECK(details.status ==
1395 base::TERMINATION_STATUS_ABNORMAL_TERMINATION);
1396 UMA_HISTOGRAM_TIMES("BrowserRenderProcessHost.AbnormalTermDuration",
1397 details.run_duration);
1398 UMA_HISTOGRAM_TIMES("BrowserRenderProcessHost.AbnormalTermKernelTime",
1399 details.kernel_duration);
1400 UMA_HISTOGRAM_TIMES("BrowserRenderProcessHost.AbnormalTermUserTime",
1401 details.user_duration);
1402 }
1403 }
1404 #endif // OS_WIN
1405 }
1406
1407 // TODO(jar): These histograms should be small enumerated histograms.
1385 UMA_HISTOGRAM_PERCENTAGE("BrowserRenderProcessHost.ChildCrashes", 1408 UMA_HISTOGRAM_PERCENTAGE("BrowserRenderProcessHost.ChildCrashes",
1386 was_extension_process ? 2 : 1); 1409 was_extension_process ? 2 : 1);
1387 if (was_alive) { 1410 if (details.was_alive) {
1388 UMA_HISTOGRAM_PERCENTAGE("BrowserRenderProcessHost.ChildCrashesWasAlive", 1411 UMA_HISTOGRAM_PERCENTAGE("BrowserRenderProcessHost.ChildCrashesWasAlive",
1389 was_extension_process ? 2 : 1); 1412 was_extension_process ? 2 : 1);
1390 } 1413 }
1391 } else if (status == base::TERMINATION_STATUS_PROCESS_WAS_KILLED) { 1414 } else if (details.status == base::TERMINATION_STATUS_PROCESS_WAS_KILLED) {
1392 UMA_HISTOGRAM_PERCENTAGE("BrowserRenderProcessHost.ChildKills", 1415 UMA_HISTOGRAM_PERCENTAGE("BrowserRenderProcessHost.ChildKills",
1393 was_extension_process ? 2 : 1); 1416 was_extension_process ? 2 : 1);
1394 if (was_alive) { 1417 if (details.was_alive) {
1395 UMA_HISTOGRAM_PERCENTAGE("BrowserRenderProcessHost.ChildKillsWasAlive", 1418 UMA_HISTOGRAM_PERCENTAGE("BrowserRenderProcessHost.ChildKillsWasAlive",
1396 was_extension_process ? 2 : 1); 1419 was_extension_process ? 2 : 1);
1397 } 1420 }
1398 } 1421 }
1422
1423 #if defined(OS_WIN)
1424 if (details.have_process_times && !was_extension_process &&
1425 details.status != base::TERMINATION_STATUS_PROCESS_CRASHED &&
1426 details.status != base::TERMINATION_STATUS_ABNORMAL_TERMINATION) {
1427 UMA_HISTOGRAM_TIMES("BrowserRenderProcessHost.NormalTermDuration",
1428 details.run_duration);
1429 UMA_HISTOGRAM_TIMES("BrowserRenderProcessHost.NormalTermKernelTime",
1430 details.kernel_duration);
1431 UMA_HISTOGRAM_TIMES("BrowserRenderProcessHost.NormalTermUserTime",
1432 details.user_duration);
1433 }
1434 #endif // OS_WIN
1399 } 1435 }
1400 1436
1401 void MetricsService::LogRendererHang() { 1437 void MetricsService::LogRendererHang() {
1402 IncrementPrefValue(prefs::kStabilityRendererHangCount); 1438 IncrementPrefValue(prefs::kStabilityRendererHangCount);
1403 } 1439 }
1404 1440
1405 void MetricsService::LogNeedForCleanShutdown() { 1441 void MetricsService::LogNeedForCleanShutdown() {
1406 PrefService* pref = g_browser_process->local_state(); 1442 PrefService* pref = g_browser_process->local_state();
1407 pref->SetBoolean(prefs::kStabilityExitedCleanly, false); 1443 pref->SetBoolean(prefs::kStabilityExitedCleanly, false);
1408 // Redundant setting to be sure we call for a clean shutdown. 1444 // Redundant setting to be sure we call for a clean shutdown.
(...skipping 255 matching lines...) Expand 10 before | Expand all | Expand 10 after
1664 if (local_state) { 1700 if (local_state) {
1665 const PrefService::Preference* uma_pref = 1701 const PrefService::Preference* uma_pref =
1666 local_state->FindPreference(prefs::kMetricsReportingEnabled); 1702 local_state->FindPreference(prefs::kMetricsReportingEnabled);
1667 if (uma_pref) { 1703 if (uma_pref) {
1668 bool success = uma_pref->GetValue()->GetAsBoolean(&result); 1704 bool success = uma_pref->GetValue()->GetAsBoolean(&result);
1669 DCHECK(success); 1705 DCHECK(success);
1670 } 1706 }
1671 } 1707 }
1672 return result; 1708 return result;
1673 } 1709 }
OLDNEW
« no previous file with comments | « chrome/browser/metrics/metrics_service.h ('k') | content/browser/renderer_host/render_process_host_impl.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698