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

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

Issue 9837026: Histogram times surrounding render crashes (Closed) Base URL: svn://svn.chromium.org/chrome/branches/1025/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 521 matching lines...) Expand 10 before | Expand all | Expand 10 after
532 LogLoadStarted(); 532 LogLoadStarted();
533 break; 533 break;
534 534
535 case content::NOTIFICATION_RENDERER_PROCESS_CLOSED: { 535 case content::NOTIFICATION_RENDERER_PROCESS_CLOSED: {
536 content::RenderProcessHost::RendererClosedDetails* process_details = 536 content::RenderProcessHost::RendererClosedDetails* process_details =
537 content::Details< 537 content::Details<
538 content::RenderProcessHost::RendererClosedDetails>( 538 content::RenderProcessHost::RendererClosedDetails>(
539 details).ptr(); 539 details).ptr();
540 content::RenderProcessHost* host = 540 content::RenderProcessHost* host =
541 content::Source<content::RenderProcessHost>(source).ptr(); 541 content::Source<content::RenderProcessHost>(source).ptr();
542 LogRendererCrash( 542 LogRendererCrash(host, *process_details);
543 host, process_details->status, process_details->was_alive);
544 } 543 }
545 break; 544 break;
546 545
547 case content::NOTIFICATION_RENDERER_PROCESS_HANG: 546 case content::NOTIFICATION_RENDERER_PROCESS_HANG:
548 LogRendererHang(); 547 LogRendererHang();
549 break; 548 break;
550 549
551 case content::NOTIFICATION_CHILD_PROCESS_HOST_CONNECTED: 550 case content::NOTIFICATION_CHILD_PROCESS_HOST_CONNECTED:
552 case content::NOTIFICATION_CHILD_PROCESS_CRASHED: 551 case content::NOTIFICATION_CHILD_PROCESS_CRASHED:
553 case content::NOTIFICATION_CHILD_INSTANCE_CREATED: 552 case content::NOTIFICATION_CHILD_INSTANCE_CREATED:
(...skipping 689 matching lines...) Expand 10 before | Expand all | Expand 10 after
1243 } 1242 }
1244 1243
1245 void MetricsService::LogLoadStarted() { 1244 void MetricsService::LogLoadStarted() {
1246 HISTOGRAM_ENUMERATION("Chrome.UmaPageloadCounter", 1, 2); 1245 HISTOGRAM_ENUMERATION("Chrome.UmaPageloadCounter", 1, 2);
1247 IncrementPrefValue(prefs::kStabilityPageLoadCount); 1246 IncrementPrefValue(prefs::kStabilityPageLoadCount);
1248 IncrementLongPrefsValue(prefs::kUninstallMetricsPageLoadCount); 1247 IncrementLongPrefsValue(prefs::kUninstallMetricsPageLoadCount);
1249 // We need to save the prefs, as page load count is a critical stat, and it 1248 // We need to save the prefs, as page load count is a critical stat, and it
1250 // might be lost due to a crash :-(. 1249 // might be lost due to a crash :-(.
1251 } 1250 }
1252 1251
1253 void MetricsService::LogRendererCrash(content::RenderProcessHost* host, 1252 void MetricsService::LogRendererCrash(
1254 base::TerminationStatus status, 1253 content::RenderProcessHost* host,
1255 bool was_alive) { 1254 const content::RenderProcessHost::RendererClosedDetails& details) {
1256 Profile* profile = Profile::FromBrowserContext(host->GetBrowserContext()); 1255 Profile* profile = Profile::FromBrowserContext(host->GetBrowserContext());
1257 ExtensionService* service = profile->GetExtensionService(); 1256 ExtensionService* service = profile->GetExtensionService();
1258 bool was_extension_process = 1257 bool was_extension_process =
1259 service && service->process_map()->Contains(host->GetID()); 1258 service && service->process_map()->Contains(host->GetID());
1260 if (status == base::TERMINATION_STATUS_PROCESS_CRASHED || 1259 if (details.status == base::TERMINATION_STATUS_PROCESS_CRASHED ||
1261 status == base::TERMINATION_STATUS_ABNORMAL_TERMINATION) { 1260 details.status == base::TERMINATION_STATUS_ABNORMAL_TERMINATION) {
1262 if (was_extension_process) 1261 if (was_extension_process) {
1263 IncrementPrefValue(prefs::kStabilityExtensionRendererCrashCount); 1262 IncrementPrefValue(prefs::kStabilityExtensionRendererCrashCount);
1264 else 1263 } else {
1265 IncrementPrefValue(prefs::kStabilityRendererCrashCount); 1264 IncrementPrefValue(prefs::kStabilityRendererCrashCount);
1266 1265
1266 #if defined(OS_WIN)
1267 if (details.have_process_times) {
1268 if (details.status == base::TERMINATION_STATUS_PROCESS_CRASHED) {
1269 UMA_HISTOGRAM_TIMES("BrowserRenderProcessHost.CrashedDuration",
1270 details.run_duration);
1271 UMA_HISTOGRAM_TIMES("BrowserRenderProcessHost.CrashedKernelTime",
1272 details.kernel_duration);
1273 UMA_HISTOGRAM_TIMES("BrowserRenderProcessHost.CrashedUserTime",
1274 details.user_duration);
1275 } else {
1276 DCHECK(details.status ==
1277 base::TERMINATION_STATUS_ABNORMAL_TERMINATION);
1278 UMA_HISTOGRAM_TIMES("BrowserRenderProcessHost.AbnormalTermDuration",
1279 details.run_duration);
1280 UMA_HISTOGRAM_TIMES("BrowserRenderProcessHost.AbnormalTermKernelTime",
1281 details.kernel_duration);
1282 UMA_HISTOGRAM_TIMES("BrowserRenderProcessHost.AbnormalTermUserTime",
1283 details.user_duration);
1284 }
1285 }
1286 #endif // OS_WIN
1287 }
1288
1289 // TODO(jar): These histograms should be small enumerated histograms.
1267 UMA_HISTOGRAM_PERCENTAGE("BrowserRenderProcessHost.ChildCrashes", 1290 UMA_HISTOGRAM_PERCENTAGE("BrowserRenderProcessHost.ChildCrashes",
1268 was_extension_process ? 2 : 1); 1291 was_extension_process ? 2 : 1);
1269 if (was_alive) { 1292 if (details.was_alive) {
1270 UMA_HISTOGRAM_PERCENTAGE("BrowserRenderProcessHost.ChildCrashesWasAlive", 1293 UMA_HISTOGRAM_PERCENTAGE("BrowserRenderProcessHost.ChildCrashesWasAlive",
1271 was_extension_process ? 2 : 1); 1294 was_extension_process ? 2 : 1);
1272 } 1295 }
1273 } else if (status == base::TERMINATION_STATUS_PROCESS_WAS_KILLED) { 1296 } else if (details.status == base::TERMINATION_STATUS_PROCESS_WAS_KILLED) {
1274 UMA_HISTOGRAM_PERCENTAGE("BrowserRenderProcessHost.ChildKills", 1297 UMA_HISTOGRAM_PERCENTAGE("BrowserRenderProcessHost.ChildKills",
1275 was_extension_process ? 2 : 1); 1298 was_extension_process ? 2 : 1);
1276 if (was_alive) { 1299 if (details.was_alive) {
1277 UMA_HISTOGRAM_PERCENTAGE("BrowserRenderProcessHost.ChildKillsWasAlive", 1300 UMA_HISTOGRAM_PERCENTAGE("BrowserRenderProcessHost.ChildKillsWasAlive",
1278 was_extension_process ? 2 : 1); 1301 was_extension_process ? 2 : 1);
1279 } 1302 }
1280 } 1303 }
1304
1305 #if defined(OS_WIN)
1306 if (details.have_process_times && !was_extension_process &&
1307 details.status != base::TERMINATION_STATUS_PROCESS_CRASHED &&
1308 details.status != base::TERMINATION_STATUS_ABNORMAL_TERMINATION) {
1309 UMA_HISTOGRAM_TIMES("BrowserRenderProcessHost.NormalTermDuration",
1310 details.run_duration);
1311 UMA_HISTOGRAM_TIMES("BrowserRenderProcessHost.NormalTermKernelTime",
1312 details.kernel_duration);
1313 UMA_HISTOGRAM_TIMES("BrowserRenderProcessHost.NormalTermUserTime",
1314 details.user_duration);
1315 }
1316 #endif // OS_WIN
1281 } 1317 }
1282 1318
1283 void MetricsService::LogRendererHang() { 1319 void MetricsService::LogRendererHang() {
1284 IncrementPrefValue(prefs::kStabilityRendererHangCount); 1320 IncrementPrefValue(prefs::kStabilityRendererHangCount);
1285 } 1321 }
1286 1322
1287 void MetricsService::LogNeedForCleanShutdown() { 1323 void MetricsService::LogNeedForCleanShutdown() {
1288 PrefService* pref = g_browser_process->local_state(); 1324 PrefService* pref = g_browser_process->local_state();
1289 pref->SetBoolean(prefs::kStabilityExitedCleanly, false); 1325 pref->SetBoolean(prefs::kStabilityExitedCleanly, false);
1290 // Redundant setting to be sure we call for a clean shutdown. 1326 // Redundant setting to be sure we call for a clean shutdown.
(...skipping 265 matching lines...) Expand 10 before | Expand all | Expand 10 after
1556 if (local_state) { 1592 if (local_state) {
1557 const PrefService::Preference* uma_pref = 1593 const PrefService::Preference* uma_pref =
1558 local_state->FindPreference(prefs::kMetricsReportingEnabled); 1594 local_state->FindPreference(prefs::kMetricsReportingEnabled);
1559 if (uma_pref) { 1595 if (uma_pref) {
1560 bool success = uma_pref->GetValue()->GetAsBoolean(&result); 1596 bool success = uma_pref->GetValue()->GetAsBoolean(&result);
1561 DCHECK(success); 1597 DCHECK(success);
1562 } 1598 }
1563 } 1599 }
1564 return result; 1600 return result;
1565 } 1601 }
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