Save execution phase of the browser to prefs file whenever we
set the execution_phase.
Minor cleanup: Added SHUTDOWN_COMPLETE to the execution_phase.
Renamed CLEAN_SHUTDOWN to UNINITIALIZED_PHASE.
Added Chrome.Browser.CrashedExecutionPhase histogram to
reflect changes to execution phase enums.
Retired Chrome.Browser.ExecutionPhase histogram.
[email protected],
Review URL: https://codereview.chromium.org/69953008
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@235118 0039d316-1c4b-4281-b951-d872f2087c98
diff --git a/chrome/browser/metrics/metrics_service.cc b/chrome/browser/metrics/metrics_service.cc
index dcfda14..79c213e 100644
--- a/chrome/browser/metrics/metrics_service.cc
+++ b/chrome/browser/metrics/metrics_service.cc
@@ -330,7 +330,7 @@
PrefService* pref = g_browser_process->local_state();
pref->SetBoolean(prefs::kStabilityExitedCleanly, true);
pref->SetInteger(prefs::kStabilityExecutionPhase,
- MetricsService::CLEAN_SHUTDOWN);
+ MetricsService::SHUTDOWN_COMPLETE);
// Start writing right away (write happens on a different thread).
pref->CommitPendingWrite();
}
@@ -342,7 +342,7 @@
MetricsService::CLEANLY_SHUTDOWN;
MetricsService::ExecutionPhase MetricsService::execution_phase_ =
- MetricsService::CLEAN_SHUTDOWN;
+ MetricsService::UNINITIALIZED_PHASE;
// This is used to quickly log stats from child process related notifications in
// MetricsService::child_stats_buffer_. The buffer's contents are transferred
@@ -415,7 +415,7 @@
registry->RegisterInt64Pref(prefs::kStabilityStatsBuildTime, 0);
registry->RegisterBooleanPref(prefs::kStabilityExitedCleanly, true);
registry->RegisterIntegerPref(prefs::kStabilityExecutionPhase,
- CLEAN_SHUTDOWN);
+ UNINITIALIZED_PHASE);
registry->RegisterBooleanPref(prefs::kStabilitySessionEndCompleted, true);
registry->RegisterIntegerPref(prefs::kMetricsSessionID, -1);
registry->RegisterIntegerPref(prefs::kStabilityLaunchCount, 0);
@@ -452,7 +452,7 @@
// static
void MetricsService::DiscardOldStabilityStats(PrefService* local_state) {
local_state->SetBoolean(prefs::kStabilityExitedCleanly, true);
- local_state->SetInteger(prefs::kStabilityExecutionPhase, CLEAN_SHUTDOWN);
+ local_state->SetInteger(prefs::kStabilityExecutionPhase, UNINITIALIZED_PHASE);
local_state->SetBoolean(prefs::kStabilitySessionEndCompleted, true);
local_state->SetInteger(prefs::kStabilityIncompleteSessionEndCount, 0);
@@ -781,7 +781,6 @@
void MetricsService::OnAppEnterForeground() {
PrefService* pref = g_browser_process->local_state();
pref->SetBoolean(prefs::kStabilityExitedCleanly, false);
- pref->SetInteger(prefs::kStabilityExecutionPhase, execution_phase_);
StartSchedulerIfNecessary();
}
@@ -789,12 +788,18 @@
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;
}
#endif // defined(OS_ANDROID) || defined(OS_IOS)
+// static
+void MetricsService::SetExecutionPhase(ExecutionPhase execution_phase) {
+ execution_phase_ = execution_phase;
+ PrefService* pref = g_browser_process->local_state();
+ pref->SetInteger(prefs::kStabilityExecutionPhase, execution_phase_);
+}
+
void MetricsService::RecordBreakpadRegistration(bool success) {
if (!success)
IncrementPrefValue(prefs::kStabilityBreakpadRegistrationFail);
@@ -912,10 +917,11 @@
// 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",
+ UMA_HISTOGRAM_SPARSE_SLOWLY("Chrome.Browser.CrashedExecutionPhase",
execution_phase);
- pref->SetInteger(prefs::kStabilityExecutionPhase, CLEAN_SHUTDOWN);
}
+ DCHECK_EQ(UNINITIALIZED_PHASE, execution_phase_);
+ SetExecutionPhase(START_METRICS_RECORDING);
#if defined(OS_WIN)
CountBrowserCrashDumpAttempts();
@@ -1689,7 +1695,7 @@
RecordBooleanPrefValue(prefs::kStabilityExitedCleanly, true);
PrefService* pref = g_browser_process->local_state();
pref->SetInteger(prefs::kStabilityExecutionPhase,
- MetricsService::CLEAN_SHUTDOWN);
+ MetricsService::SHUTDOWN_COMPLETE);
}
#if defined(OS_CHROMEOS)