Chromium Code Reviews| Index: chrome/browser/metrics/metrics_service.cc |
| =================================================================== |
| --- chrome/browser/metrics/metrics_service.cc (revision 127735) |
| +++ chrome/browser/metrics/metrics_service.cc (working copy) |
| @@ -559,8 +559,7 @@ |
| details).ptr(); |
| content::RenderProcessHost* host = |
| content::Source<content::RenderProcessHost>(source).ptr(); |
| - LogRendererCrash( |
| - host, process_details->status, process_details->was_alive); |
| + LogRendererCrash(host, *process_details); |
| } |
| break; |
| @@ -1369,33 +1368,69 @@ |
| } |
| 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.
|
| - base::TerminationStatus status, |
| - bool was_alive) { |
| + const content::RenderProcessHost::RendererClosedDetails& details) { |
| Profile* profile = Profile::FromBrowserContext(host->GetBrowserContext()); |
| ExtensionService* service = profile->GetExtensionService(); |
| bool was_extension_process = |
| service && service->process_map()->Contains(host->GetID()); |
| - if (status == base::TERMINATION_STATUS_PROCESS_CRASHED || |
| - status == base::TERMINATION_STATUS_ABNORMAL_TERMINATION) { |
| - if (was_extension_process) |
| + if (details.status == base::TERMINATION_STATUS_PROCESS_CRASHED || |
| + details.status == base::TERMINATION_STATUS_ABNORMAL_TERMINATION) { |
| + if (was_extension_process) { |
| IncrementPrefValue(prefs::kStabilityExtensionRendererCrashCount); |
| - else |
| + } else { |
| IncrementPrefValue(prefs::kStabilityRendererCrashCount); |
| +#if defined(OS_WIN) |
| + if (details.have_process_times) { |
| + if (details.status == base::TERMINATION_STATUS_PROCESS_CRASHED) { |
| + UMA_HISTOGRAM_TIMES("BrowserRenderProcessHost.CrashedDuration", |
| + details.run_duration); |
| + UMA_HISTOGRAM_TIMES("BrowserRenderProcessHost.CrashedKernelTime", |
| + details.kernel_duration); |
| + UMA_HISTOGRAM_TIMES("BrowserRenderProcessHost.CrashedUserTime", |
| + details.user_duration); |
| + } else { |
| + DCHECK(details.status == |
| + base::TERMINATION_STATUS_ABNORMAL_TERMINATION); |
| + UMA_HISTOGRAM_TIMES("BrowserRenderProcessHost.AbnormalTermDuration", |
| + details.run_duration); |
| + UMA_HISTOGRAM_TIMES("BrowserRenderProcessHost.AbnormalTermKernelTime", |
| + details.kernel_duration); |
| + UMA_HISTOGRAM_TIMES("BrowserRenderProcessHost.AbnormalTermUserTime", |
| + details.user_duration); |
| + } |
| + } |
| +#endif // OS_WIN |
| + } |
| + |
| + // TODO(jar): These histograms should be small enumerated histograms. |
| UMA_HISTOGRAM_PERCENTAGE("BrowserRenderProcessHost.ChildCrashes", |
| was_extension_process ? 2 : 1); |
| - if (was_alive) { |
| + if (details.was_alive) { |
| UMA_HISTOGRAM_PERCENTAGE("BrowserRenderProcessHost.ChildCrashesWasAlive", |
| was_extension_process ? 2 : 1); |
| } |
| - } else if (status == base::TERMINATION_STATUS_PROCESS_WAS_KILLED) { |
| + } else if (details.status == base::TERMINATION_STATUS_PROCESS_WAS_KILLED) { |
| UMA_HISTOGRAM_PERCENTAGE("BrowserRenderProcessHost.ChildKills", |
| was_extension_process ? 2 : 1); |
| - if (was_alive) { |
| + if (details.was_alive) { |
| UMA_HISTOGRAM_PERCENTAGE("BrowserRenderProcessHost.ChildKillsWasAlive", |
| was_extension_process ? 2 : 1); |
| } |
| } |
| + |
| +#if defined(OS_WIN) |
| + if (details.have_process_times && !was_extension_process && |
| + details.status != base::TERMINATION_STATUS_PROCESS_CRASHED && |
| + details.status != base::TERMINATION_STATUS_ABNORMAL_TERMINATION) { |
| + UMA_HISTOGRAM_TIMES("BrowserRenderProcessHost.NormalTermDuration", |
| + details.run_duration); |
| + UMA_HISTOGRAM_TIMES("BrowserRenderProcessHost.NormalTermKernelTime", |
| + details.kernel_duration); |
| + UMA_HISTOGRAM_TIMES("BrowserRenderProcessHost.NormalTermUserTime", |
| + details.user_duration); |
| + } |
| +#endif // OS_WIN |
| } |
| void MetricsService::LogRendererHang() { |