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

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(content::RenderProcessHost* host,
rvargas (doing something else) 2012/03/22 01:59:32 same here
jar (doing other things) 2012/03/22 02:06:44 Done.
1372 base::TerminationStatus status, 1371 const content::RenderProcessHost::RendererClosedDetails& details) {
1373 bool was_alive) {
1374 Profile* profile = Profile::FromBrowserContext(host->GetBrowserContext()); 1372 Profile* profile = Profile::FromBrowserContext(host->GetBrowserContext());
1375 ExtensionService* service = profile->GetExtensionService(); 1373 ExtensionService* service = profile->GetExtensionService();
1376 bool was_extension_process = 1374 bool was_extension_process =
1377 service && service->process_map()->Contains(host->GetID()); 1375 service && service->process_map()->Contains(host->GetID());
1378 if (status == base::TERMINATION_STATUS_PROCESS_CRASHED || 1376 if (details.status == base::TERMINATION_STATUS_PROCESS_CRASHED ||
1379 status == base::TERMINATION_STATUS_ABNORMAL_TERMINATION) { 1377 details.status == base::TERMINATION_STATUS_ABNORMAL_TERMINATION) {
1380 if (was_extension_process) 1378 if (was_extension_process) {
1381 IncrementPrefValue(prefs::kStabilityExtensionRendererCrashCount); 1379 IncrementPrefValue(prefs::kStabilityExtensionRendererCrashCount);
1382 else 1380 } else {
1383 IncrementPrefValue(prefs::kStabilityRendererCrashCount); 1381 IncrementPrefValue(prefs::kStabilityRendererCrashCount);
1384 1382
1383 #if defined(OS_WIN)
1384 if (details.have_process_times) {
1385 if (details.status == base::TERMINATION_STATUS_PROCESS_CRASHED) {
1386 UMA_HISTOGRAM_TIMES("BrowserRenderProcessHost.CrashedDuration",
1387 details.run_duration);
1388 UMA_HISTOGRAM_TIMES("BrowserRenderProcessHost.CrashedKernelTime",
1389 details.kernel_duration);
1390 UMA_HISTOGRAM_TIMES("BrowserRenderProcessHost.CrashedUserTime",
1391 details.user_duration);
1392 } else {
1393 DCHECK(details.status ==
1394 base::TERMINATION_STATUS_ABNORMAL_TERMINATION);
1395 UMA_HISTOGRAM_TIMES("BrowserRenderProcessHost.AbnormalTermDuration",
1396 details.run_duration);
1397 UMA_HISTOGRAM_TIMES("BrowserRenderProcessHost.AbnormalTermKernelTime",
1398 details.kernel_duration);
1399 UMA_HISTOGRAM_TIMES("BrowserRenderProcessHost.AbnormalTermUserTime",
1400 details.user_duration);
1401 }
1402 }
1403 #endif // OS_WIN
1404 }
1405
1406 // TODO(jar): These histograms should be small enumerated histograms.
1385 UMA_HISTOGRAM_PERCENTAGE("BrowserRenderProcessHost.ChildCrashes", 1407 UMA_HISTOGRAM_PERCENTAGE("BrowserRenderProcessHost.ChildCrashes",
1386 was_extension_process ? 2 : 1); 1408 was_extension_process ? 2 : 1);
1387 if (was_alive) { 1409 if (details.was_alive) {
1388 UMA_HISTOGRAM_PERCENTAGE("BrowserRenderProcessHost.ChildCrashesWasAlive", 1410 UMA_HISTOGRAM_PERCENTAGE("BrowserRenderProcessHost.ChildCrashesWasAlive",
1389 was_extension_process ? 2 : 1); 1411 was_extension_process ? 2 : 1);
1390 } 1412 }
1391 } else if (status == base::TERMINATION_STATUS_PROCESS_WAS_KILLED) { 1413 } else if (details.status == base::TERMINATION_STATUS_PROCESS_WAS_KILLED) {
1392 UMA_HISTOGRAM_PERCENTAGE("BrowserRenderProcessHost.ChildKills", 1414 UMA_HISTOGRAM_PERCENTAGE("BrowserRenderProcessHost.ChildKills",
1393 was_extension_process ? 2 : 1); 1415 was_extension_process ? 2 : 1);
1394 if (was_alive) { 1416 if (details.was_alive) {
1395 UMA_HISTOGRAM_PERCENTAGE("BrowserRenderProcessHost.ChildKillsWasAlive", 1417 UMA_HISTOGRAM_PERCENTAGE("BrowserRenderProcessHost.ChildKillsWasAlive",
1396 was_extension_process ? 2 : 1); 1418 was_extension_process ? 2 : 1);
1397 } 1419 }
1398 } 1420 }
1421
1422 #if defined(OS_WIN)
1423 if (details.have_process_times && !was_extension_process &&
1424 details.status != base::TERMINATION_STATUS_PROCESS_CRASHED &&
1425 details.status != base::TERMINATION_STATUS_ABNORMAL_TERMINATION) {
1426 UMA_HISTOGRAM_TIMES("BrowserRenderProcessHost.NormalTermDuration",
1427 details.run_duration);
1428 UMA_HISTOGRAM_TIMES("BrowserRenderProcessHost.NormalTermKernelTime",
1429 details.kernel_duration);
1430 UMA_HISTOGRAM_TIMES("BrowserRenderProcessHost.NormalTermUserTime",
1431 details.user_duration);
1432 }
1433 #endif // OS_WIN
1399 } 1434 }
1400 1435
1401 void MetricsService::LogRendererHang() { 1436 void MetricsService::LogRendererHang() {
1402 IncrementPrefValue(prefs::kStabilityRendererHangCount); 1437 IncrementPrefValue(prefs::kStabilityRendererHangCount);
1403 } 1438 }
1404 1439
1405 void MetricsService::LogNeedForCleanShutdown() { 1440 void MetricsService::LogNeedForCleanShutdown() {
1406 PrefService* pref = g_browser_process->local_state(); 1441 PrefService* pref = g_browser_process->local_state();
1407 pref->SetBoolean(prefs::kStabilityExitedCleanly, false); 1442 pref->SetBoolean(prefs::kStabilityExitedCleanly, false);
1408 // Redundant setting to be sure we call for a clean shutdown. 1443 // 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) { 1699 if (local_state) {
1665 const PrefService::Preference* uma_pref = 1700 const PrefService::Preference* uma_pref =
1666 local_state->FindPreference(prefs::kMetricsReportingEnabled); 1701 local_state->FindPreference(prefs::kMetricsReportingEnabled);
1667 if (uma_pref) { 1702 if (uma_pref) {
1668 bool success = uma_pref->GetValue()->GetAsBoolean(&result); 1703 bool success = uma_pref->GetValue()->GetAsBoolean(&result);
1669 DCHECK(success); 1704 DCHECK(success);
1670 } 1705 }
1671 } 1706 }
1672 return result; 1707 return result;
1673 } 1708 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698