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

Unified Diff: components/metrics/metrics_service.cc

Issue 993813002: Refactor metrics callback functions (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@states
Patch Set: Created 5 years, 9 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') | no next file » | 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 f86f33ab8b511b4d90afd011da3705426cfe4ba4..bec8dfb01ac570e7a4b4716903e6a8abb0f0098c 100644
--- a/components/metrics/metrics_service.cc
+++ b/components/metrics/metrics_service.cc
@@ -762,6 +762,7 @@ void MetricsService::StartSchedulerIfNecessary() {
}
void MetricsService::StartScheduledUpload() {
+ DCHECK(state_ >= INIT_TASK_DONE);
// If we're getting no notifications, then the log won't have much in it, and
// it's possible the computer is about to go to sleep, so don't upload and
// stop the scheduler.
@@ -781,9 +782,9 @@ void MetricsService::StartScheduledUpload() {
// If there are unsent logs, send the next one. If not, start the asynchronous
// process of finalizing the current log for upload.
if (state_ == SENDING_LOGS && log_manager_.has_unsent_logs()) {
- log_manager_.StageNextLogForUpload();
- SendStagedLog();
+ SendNextLog();
} else {
+ // There are no logs left to send, so start creating a new one.
client_->CollectFinalMetrics(
base::Bind(&MetricsService::OnFinalLogInfoCollectionDone,
self_ptr_factory_.GetWeakPtr()));
@@ -805,54 +806,33 @@ void MetricsService::OnFinalLogInfoCollectionDone() {
return;
}
- StageNewLog();
+ if (state_ == INIT_TASK_DONE) {
+ PrepareInitialMetricsLog();
+ } else {
+ DCHECK_EQ(SENDING_LOGS, state_);
+ CloseCurrentLog();
+ OpenNewLog();
+ }
+ SendNextLog();
+}
- // If logs shouldn't be uploaded, stop here. It's important that this check
- // be after StageNewLog(), otherwise the previous logs will never be loaded,
- // and thus the open log won't be persisted.
- // TODO(stuartmorgan): This is unnecessarily complicated; restructure loading
- // of previous logs to not require running part of the upload logic.
- // http://crbug.com/157337
+void MetricsService::SendNextLog() {
+ DCHECK_EQ(SENDING_LOGS, state_);
if (!reporting_active()) {
scheduler_->Stop();
scheduler_->UploadCancelled();
return;
}
-
- SendStagedLog();
-}
-
-void MetricsService::StageNewLog() {
- if (log_manager_.has_staged_log())
+ if (!log_manager_.has_unsent_logs()) {
+ // Should only get here if serializing the log failed somehow.
+ // Just tell the scheduler it was uploaded and wait for the next log
+ // interval.
+ scheduler_->UploadFinished(true, log_manager_.has_unsent_logs());
return;
-
- switch (state_) {
- case INITIALIZED:
- case INIT_TASK_SCHEDULED: // We should be further along by now.
- NOTREACHED();
- return;
-
- case INIT_TASK_DONE:
- PrepareInitialMetricsLog();
- // Stage the first log, which could be a stability log (either one
- // for created in this session or from a previous session) or the
- // initial metrics log that was just created.
- log_manager_.StageNextLogForUpload();
- state_ = SENDING_LOGS;
- break;
-
- case SENDING_LOGS:
- CloseCurrentLog();
- OpenNewLog();
- log_manager_.StageNextLogForUpload();
- break;
-
- default:
- NOTREACHED();
- return;
}
-
- DCHECK(log_manager_.has_staged_log());
+ if (!log_manager_.has_staged_log())
+ log_manager_.StageNextLogForUpload();
+ SendStagedLog();
}
bool MetricsService::ProvidersHaveStabilityMetrics() {
@@ -926,6 +906,8 @@ void MetricsService::PrepareInitialMetricsLog() {
// Store unsent logs, including the initial log that was just saved, so
// that they're not lost in case of a crash before upload time.
log_manager_.PersistUnsentLogs();
+
+ state_ = SENDING_LOGS;
}
void MetricsService::SendStagedLog() {
« no previous file with comments | « components/metrics/metrics_service.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698