Chromium Code Reviews| OLD | NEW |
|---|---|
| 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 Loading... | |
| 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 Loading... | |
| 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 Loading... | |
| 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 } |
| OLD | NEW |