Chromium Code Reviews| Index: chrome/browser/metrics/metrics_service.cc |
| diff --git a/chrome/browser/metrics/metrics_service.cc b/chrome/browser/metrics/metrics_service.cc |
| index 66f68d5aeec60f788dc8c6875e1a546719128ddd..ec31270d05cc48317220f9096aec4db83cea7ae7 100644 |
| --- a/chrome/browser/metrics/metrics_service.cc |
| +++ b/chrome/browser/metrics/metrics_service.cc |
| @@ -325,6 +325,8 @@ int MapCrashExitCodeForHistogram(int exit_code) { |
| void MarkAppCleanShutdownAndCommit() { |
| PrefService* pref = g_browser_process->local_state(); |
| pref->SetBoolean(prefs::kStabilityExitedCleanly, true); |
| + pref->SetInteger(prefs::kStabilityExecutionPhase, |
| + MetricsService::CLEAN_SHUTDOWN); |
| // Start writing right away (write happens on a different thread). |
| pref->CommitPendingWrite(); |
| } |
| @@ -335,6 +337,9 @@ void MarkAppCleanShutdownAndCommit() { |
| MetricsService::ShutdownCleanliness MetricsService::clean_shutdown_status_ = |
| MetricsService::CLEANLY_SHUTDOWN; |
| +MetricsService::ExecutionPhase MetricsService::execution_phase_ = |
| + MetricsService::CLEAN_SHUTDOWN; |
| + |
| // This is used to quickly log stats from child process related notifications in |
| // MetricsService::child_stats_buffer_. The buffer's contents are transferred |
| // out when Local State is periodically saved. The information is then |
| @@ -405,6 +410,8 @@ void MetricsService::RegisterPrefs(PrefRegistrySimple* registry) { |
| registry->RegisterStringPref(prefs::kStabilityStatsVersion, std::string()); |
| registry->RegisterInt64Pref(prefs::kStabilityStatsBuildTime, 0); |
| registry->RegisterBooleanPref(prefs::kStabilityExitedCleanly, true); |
| + registry->RegisterIntegerPref(prefs::kStabilityExecutionPhase, |
| + CLEAN_SHUTDOWN); |
| registry->RegisterBooleanPref(prefs::kStabilitySessionEndCompleted, true); |
| registry->RegisterIntegerPref(prefs::kMetricsSessionID, -1); |
| registry->RegisterIntegerPref(prefs::kStabilityLaunchCount, 0); |
| @@ -441,6 +448,7 @@ void MetricsService::RegisterPrefs(PrefRegistrySimple* registry) { |
| // static |
| void MetricsService::DiscardOldStabilityStats(PrefService* local_state) { |
| local_state->SetBoolean(prefs::kStabilityExitedCleanly, true); |
| + local_state->SetInteger(prefs::kStabilityExecutionPhase, CLEAN_SHUTDOWN); |
| local_state->SetBoolean(prefs::kStabilitySessionEndCompleted, true); |
| local_state->SetInteger(prefs::kStabilityIncompleteSessionEndCount, 0); |
| @@ -768,6 +776,7 @@ void MetricsService::OnAppEnterBackground() { |
| void MetricsService::OnAppEnterForeground() { |
| PrefService* pref = g_browser_process->local_state(); |
| pref->SetBoolean(prefs::kStabilityExitedCleanly, false); |
| + pref->SetInteger(prefs::kStabilityExecutionPhase, execution_phase_); |
| StartSchedulerIfNecessary(); |
| } |
| @@ -775,6 +784,7 @@ void MetricsService::OnAppEnterForeground() { |
| void MetricsService::LogNeedForCleanShutdown() { |
| PrefService* pref = g_browser_process->local_state(); |
| pref->SetBoolean(prefs::kStabilityExitedCleanly, false); |
| + pref->SetInteger(prefs::kStabilityExecutionPhase, execution_phase_); |
| // Redundant setting to be sure we call for a clean shutdown. |
| clean_shutdown_status_ = NEED_TO_SHUTDOWN; |
| } |
| @@ -895,6 +905,12 @@ void MetricsService::InitializeMetricsState() { |
| pref->SetBoolean(prefs::kStabilityExitedCleanly, true); |
| } |
| + // TODO(rtenneti): On windows, consider saving/getting execution_phase from |
| + // the registry. |
| + int execution_phase = pref->GetInteger(prefs::kStabilityExecutionPhase); |
| + UMA_HISTOGRAM_SPARSE_SLOWLY("Chrome.Browser.ExecutionPhase", execution_phase); |
| + pref->SetInteger(prefs::kStabilityExecutionPhase, CLEAN_SHUTDOWN); |
|
jar (doing other things)
2013/10/26 02:09:21
Perhaps this block from lines 908 to 912 should be
ramant (doing other things)
2013/10/26 03:29:35
Done.
|
| + |
| #if defined(OS_WIN) |
| CountBrowserCrashDumpAttempts(); |
| #endif // defined(OS_WIN) |
| @@ -1635,6 +1651,9 @@ void MetricsService::LogCleanShutdown() { |
| clean_shutdown_status_ = CLEANLY_SHUTDOWN; |
| RecordBooleanPrefValue(prefs::kStabilityExitedCleanly, true); |
| + PrefService* pref = g_browser_process->local_state(); |
| + pref->SetInteger(prefs::kStabilityExecutionPhase, |
| + MetricsService::CLEAN_SHUTDOWN); |
| } |
| #if defined(OS_CHROMEOS) |