| 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( | 
|  1372                                       base::TerminationStatus status, |  1371     content::RenderProcessHost* host, | 
|  1373                                       bool was_alive) { |  1372     const content::RenderProcessHost::RendererClosedDetails& details) { | 
|  1374   Profile* profile = Profile::FromBrowserContext(host->GetBrowserContext()); |  1373   Profile* profile = Profile::FromBrowserContext(host->GetBrowserContext()); | 
|  1375   ExtensionService* service = profile->GetExtensionService(); |  1374   ExtensionService* service = profile->GetExtensionService(); | 
|  1376   bool was_extension_process = |  1375   bool was_extension_process = | 
|  1377       service && service->process_map()->Contains(host->GetID()); |  1376       service && service->process_map()->Contains(host->GetID()); | 
|  1378   if (status == base::TERMINATION_STATUS_PROCESS_CRASHED || |  1377   if (details.status == base::TERMINATION_STATUS_PROCESS_CRASHED || | 
|  1379       status == base::TERMINATION_STATUS_ABNORMAL_TERMINATION) { |  1378       details.status == base::TERMINATION_STATUS_ABNORMAL_TERMINATION) { | 
|  1380     if (was_extension_process) |  1379     if (was_extension_process) { | 
|  1381       IncrementPrefValue(prefs::kStabilityExtensionRendererCrashCount); |  1380       IncrementPrefValue(prefs::kStabilityExtensionRendererCrashCount); | 
|  1382     else |  1381     } else { | 
|  1383       IncrementPrefValue(prefs::kStabilityRendererCrashCount); |  1382       IncrementPrefValue(prefs::kStabilityRendererCrashCount); | 
|  1384  |  1383  | 
 |  1384 #if defined(OS_WIN) | 
 |  1385       if (details.have_process_times) { | 
 |  1386         if (details.status == base::TERMINATION_STATUS_PROCESS_CRASHED) { | 
 |  1387           UMA_HISTOGRAM_TIMES("BrowserRenderProcessHost.CrashedDuration", | 
 |  1388                               details.run_duration); | 
 |  1389           UMA_HISTOGRAM_TIMES("BrowserRenderProcessHost.CrashedKernelTime", | 
 |  1390                               details.kernel_duration); | 
 |  1391           UMA_HISTOGRAM_TIMES("BrowserRenderProcessHost.CrashedUserTime", | 
 |  1392                               details.user_duration); | 
 |  1393         } else { | 
 |  1394           DCHECK(details.status == | 
 |  1395                  base::TERMINATION_STATUS_ABNORMAL_TERMINATION); | 
 |  1396           UMA_HISTOGRAM_TIMES("BrowserRenderProcessHost.AbnormalTermDuration", | 
 |  1397                               details.run_duration); | 
 |  1398           UMA_HISTOGRAM_TIMES("BrowserRenderProcessHost.AbnormalTermKernelTime", | 
 |  1399                               details.kernel_duration); | 
 |  1400           UMA_HISTOGRAM_TIMES("BrowserRenderProcessHost.AbnormalTermUserTime", | 
 |  1401                               details.user_duration); | 
 |  1402         } | 
 |  1403       } | 
 |  1404 #endif  // OS_WIN | 
 |  1405     } | 
 |  1406  | 
 |  1407     // TODO(jar): These histograms should be small enumerated histograms. | 
|  1385     UMA_HISTOGRAM_PERCENTAGE("BrowserRenderProcessHost.ChildCrashes", |  1408     UMA_HISTOGRAM_PERCENTAGE("BrowserRenderProcessHost.ChildCrashes", | 
|  1386                              was_extension_process ? 2 : 1); |  1409                              was_extension_process ? 2 : 1); | 
|  1387     if (was_alive) { |  1410     if (details.was_alive) { | 
|  1388       UMA_HISTOGRAM_PERCENTAGE("BrowserRenderProcessHost.ChildCrashesWasAlive", |  1411       UMA_HISTOGRAM_PERCENTAGE("BrowserRenderProcessHost.ChildCrashesWasAlive", | 
|  1389                                was_extension_process ? 2 : 1); |  1412                                was_extension_process ? 2 : 1); | 
|  1390     } |  1413     } | 
|  1391   } else if (status == base::TERMINATION_STATUS_PROCESS_WAS_KILLED) { |  1414   } else if (details.status == base::TERMINATION_STATUS_PROCESS_WAS_KILLED) { | 
|  1392     UMA_HISTOGRAM_PERCENTAGE("BrowserRenderProcessHost.ChildKills", |  1415     UMA_HISTOGRAM_PERCENTAGE("BrowserRenderProcessHost.ChildKills", | 
|  1393                              was_extension_process ? 2 : 1); |  1416                              was_extension_process ? 2 : 1); | 
|  1394     if (was_alive) { |  1417     if (details.was_alive) { | 
|  1395       UMA_HISTOGRAM_PERCENTAGE("BrowserRenderProcessHost.ChildKillsWasAlive", |  1418       UMA_HISTOGRAM_PERCENTAGE("BrowserRenderProcessHost.ChildKillsWasAlive", | 
|  1396                                was_extension_process ? 2 : 1); |  1419                                was_extension_process ? 2 : 1); | 
|  1397     } |  1420     } | 
|  1398   } |  1421   } | 
 |  1422  | 
 |  1423 #if defined(OS_WIN) | 
 |  1424   if (details.have_process_times && !was_extension_process && | 
 |  1425       details.status != base::TERMINATION_STATUS_PROCESS_CRASHED && | 
 |  1426       details.status != base::TERMINATION_STATUS_ABNORMAL_TERMINATION) { | 
 |  1427     UMA_HISTOGRAM_TIMES("BrowserRenderProcessHost.NormalTermDuration", | 
 |  1428                         details.run_duration); | 
 |  1429     UMA_HISTOGRAM_TIMES("BrowserRenderProcessHost.NormalTermKernelTime", | 
 |  1430                         details.kernel_duration); | 
 |  1431     UMA_HISTOGRAM_TIMES("BrowserRenderProcessHost.NormalTermUserTime", | 
 |  1432                         details.user_duration); | 
 |  1433   } | 
 |  1434 #endif  // OS_WIN | 
|  1399 } |  1435 } | 
|  1400  |  1436  | 
|  1401 void MetricsService::LogRendererHang() { |  1437 void MetricsService::LogRendererHang() { | 
|  1402   IncrementPrefValue(prefs::kStabilityRendererHangCount); |  1438   IncrementPrefValue(prefs::kStabilityRendererHangCount); | 
|  1403 } |  1439 } | 
|  1404  |  1440  | 
|  1405 void MetricsService::LogNeedForCleanShutdown() { |  1441 void MetricsService::LogNeedForCleanShutdown() { | 
|  1406   PrefService* pref = g_browser_process->local_state(); |  1442   PrefService* pref = g_browser_process->local_state(); | 
|  1407   pref->SetBoolean(prefs::kStabilityExitedCleanly, false); |  1443   pref->SetBoolean(prefs::kStabilityExitedCleanly, false); | 
|  1408   // Redundant setting to be sure we call for a clean shutdown. |  1444   // 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) { |  1700   if (local_state) { | 
|  1665     const PrefService::Preference* uma_pref = |  1701     const PrefService::Preference* uma_pref = | 
|  1666         local_state->FindPreference(prefs::kMetricsReportingEnabled); |  1702         local_state->FindPreference(prefs::kMetricsReportingEnabled); | 
|  1667     if (uma_pref) { |  1703     if (uma_pref) { | 
|  1668       bool success = uma_pref->GetValue()->GetAsBoolean(&result); |  1704       bool success = uma_pref->GetValue()->GetAsBoolean(&result); | 
|  1669       DCHECK(success); |  1705       DCHECK(success); | 
|  1670     } |  1706     } | 
|  1671   } |  1707   } | 
|  1672   return result; |  1708   return result; | 
|  1673 } |  1709 } | 
| OLD | NEW |