Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(1036)

Unified Diff: components/metrics/metrics_service.cc

Issue 558683002: Extract the handling of the clean exit beacon from MetricsService. The extracted implementation sup… (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Review comments. Created 6 years, 3 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « components/metrics/metrics_service.h ('k') | components/metrics/metrics_service_client.h » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: components/metrics/metrics_service.cc
diff --git a/components/metrics/metrics_service.cc b/components/metrics/metrics_service.cc
index cdcb1f55d8dbbcf2a2146ce2126e17a7451b52fa..371eac6ea33ef55a2bdff965d5078a4a1c70ca1e 100644
--- a/components/metrics/metrics_service.cc
+++ b/components/metrics/metrics_service.cc
@@ -254,8 +254,9 @@ ResponseStatus ResponseCodeToStatus(int response_code) {
}
}
-void MarkAppCleanShutdownAndCommit(PrefService* local_state) {
- local_state->SetBoolean(metrics::prefs::kStabilityExitedCleanly, true);
+void MarkAppCleanShutdownAndCommit(CleanExitBeacon* clean_exit_beacon,
+ PrefService* local_state) {
+ clean_exit_beacon->WriteBeaconValue(true);
local_state->SetInteger(metrics::prefs::kStabilityExecutionPhase,
MetricsService::SHUTDOWN_COMPLETE);
// Start writing right away (write happens on a different thread).
@@ -315,6 +316,7 @@ MetricsService::MetricsService(metrics::MetricsStateManager* state_manager,
state_manager_(state_manager),
client_(client),
local_state_(local_state),
+ clean_exit_beacon_(client->GetRegistryBackupKey(), local_state),
recording_active_(false),
reporting_active_(false),
test_mode_active_(false),
@@ -498,7 +500,7 @@ void MetricsService::RecordCompletedSessionEnd() {
void MetricsService::OnAppEnterBackground() {
scheduler_->Stop();
- MarkAppCleanShutdownAndCommit(local_state_);
+ MarkAppCleanShutdownAndCommit(&clean_exit_beacon_, local_state_);
// At this point, there's no way of knowing when the process will be
// killed, so this has to be treated similar to a shutdown, closing and
@@ -514,12 +516,12 @@ void MetricsService::OnAppEnterBackground() {
}
void MetricsService::OnAppEnterForeground() {
- local_state_->SetBoolean(metrics::prefs::kStabilityExitedCleanly, false);
+ clean_exit_beacon_.WriteBeaconValue(false);
StartSchedulerIfNecessary();
}
#else
void MetricsService::LogNeedForCleanShutdown() {
- local_state_->SetBoolean(metrics::prefs::kStabilityExitedCleanly, false);
+ clean_exit_beacon_.WriteBeaconValue(false);
// Redundant setting to be sure we call for a clean shutdown.
clean_shutdown_status_ = NEED_TO_SHUTDOWN;
}
@@ -564,16 +566,15 @@ void MetricsService::InitializeMetricsState() {
log_manager_.LoadPersistedUnsentLogs();
session_id_ = local_state_->GetInteger(metrics::prefs::kMetricsSessionID);
- bool exited_cleanly = true;
- if (!local_state_->GetBoolean(metrics::prefs::kStabilityExitedCleanly)) {
+
+ if (!clean_exit_beacon_.exited_cleanly()) {
IncrementPrefValue(metrics::prefs::kStabilityCrashCount);
// Reset flag, and wait until we call LogNeedForCleanShutdown() before
// monitoring.
- local_state_->SetBoolean(metrics::prefs::kStabilityExitedCleanly, true);
- exited_cleanly = false;
+ clean_exit_beacon_.WriteBeaconValue(true);
}
- if (!exited_cleanly || ProvidersHaveStabilityMetrics()) {
+ if (!clean_exit_beacon_.exited_cleanly() || ProvidersHaveStabilityMetrics()) {
// TODO(rtenneti): On windows, consider saving/getting execution_phase from
// the registry.
int execution_phase =
@@ -1166,13 +1167,14 @@ void MetricsService::RecordCurrentStabilityHistograms() {
void MetricsService::LogCleanShutdown() {
// Redundant hack to write pref ASAP.
- MarkAppCleanShutdownAndCommit(local_state_);
+ MarkAppCleanShutdownAndCommit(&clean_exit_beacon_, local_state_);
// Redundant setting to assure that we always reset this value at shutdown
// (and that we don't use some alternate path, and not call LogCleanShutdown).
clean_shutdown_status_ = CLEANLY_SHUTDOWN;
- RecordBooleanPrefValue(metrics::prefs::kStabilityExitedCleanly, true);
+ clean_exit_beacon_.WriteBeaconValue(true);
+ RecordCurrentState(local_state_);
local_state_->SetInteger(metrics::prefs::kStabilityExecutionPhase,
MetricsService::SHUTDOWN_COMPLETE);
}
« no previous file with comments | « components/metrics/metrics_service.h ('k') | components/metrics/metrics_service_client.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698