| Index: chrome/browser/metrics/metrics_service.cc
 | 
| ===================================================================
 | 
| --- chrome/browser/metrics/metrics_service.cc	(revision 128368)
 | 
| +++ chrome/browser/metrics/metrics_service.cc	(working copy)
 | 
| @@ -560,8 +560,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;
 | 
|  
 | 
| @@ -1368,34 +1367,71 @@
 | 
|    // might be lost due to a crash :-(.
 | 
|  }
 | 
|  
 | 
| -void MetricsService::LogRendererCrash(content::RenderProcessHost* host,
 | 
| -                                      base::TerminationStatus status,
 | 
| -                                      bool was_alive) {
 | 
| +void MetricsService::LogRendererCrash(
 | 
| +    content::RenderProcessHost* host,
 | 
| +    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() {
 | 
| 
 |