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

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 541 matching lines...) Expand 10 before | Expand all | Expand 10 after
552 LogLoadStarted(); 552 LogLoadStarted();
553 break; 553 break;
554 554
555 case content::NOTIFICATION_RENDERER_PROCESS_CLOSED: { 555 case content::NOTIFICATION_RENDERER_PROCESS_CLOSED: {
556 content::RenderProcessHost::RendererClosedDetails* process_details = 556 content::RenderProcessHost::RendererClosedDetails* process_details =
557 content::Details< 557 content::Details<
558 content::RenderProcessHost::RendererClosedDetails>( 558 content::RenderProcessHost::RendererClosedDetails>(
559 details).ptr(); 559 details).ptr();
560 content::RenderProcessHost* host = 560 content::RenderProcessHost* host =
561 content::Source<content::RenderProcessHost>(source).ptr(); 561 content::Source<content::RenderProcessHost>(source).ptr();
562 LogRendererCrash( 562 LogRendererCrash(host, *process_details);
563 host, process_details->status, process_details->was_alive);
564 } 563 }
565 break; 564 break;
566 565
567 case content::NOTIFICATION_RENDERER_PROCESS_HANG: 566 case content::NOTIFICATION_RENDERER_PROCESS_HANG:
568 LogRendererHang(); 567 LogRendererHang();
569 break; 568 break;
570 569
571 case content::NOTIFICATION_CHILD_PROCESS_HOST_CONNECTED: 570 case content::NOTIFICATION_CHILD_PROCESS_HOST_CONNECTED:
572 case content::NOTIFICATION_CHILD_PROCESS_CRASHED: 571 case content::NOTIFICATION_CHILD_PROCESS_CRASHED:
573 case content::NOTIFICATION_CHILD_INSTANCE_CREATED: 572 case content::NOTIFICATION_CHILD_INSTANCE_CREATED:
(...skipping 787 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

Powered by Google App Engine
This is Rietveld 408576698