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() { |