Index: chrome/browser/metrics/metrics_reporting_scheduler.cc |
diff --git a/chrome/browser/metrics/metrics_reporting_scheduler.cc b/chrome/browser/metrics/metrics_reporting_scheduler.cc |
index 05ff108381b459114fde6848899aa5a04c5e1f64..67caa73bf2bcddc472647c65e98fdd7e816c5f0e 100644 |
--- a/chrome/browser/metrics/metrics_reporting_scheduler.cc |
+++ b/chrome/browser/metrics/metrics_reporting_scheduler.cc |
@@ -33,10 +33,8 @@ static const int kMaxBackoffMultiplier = 10; |
MetricsReportingScheduler::MetricsReportingScheduler( |
const base::Closure& upload_callback) |
: upload_callback_(upload_callback), |
- ALLOW_THIS_IN_INITIALIZER_LIST(weak_ptr_factory_(this)), |
upload_interval_(TimeDelta::FromSeconds(kInitialUploadIntervalSeconds)), |
running_(false), |
- timer_pending_(false), |
callback_pending_(false) { |
} |
@@ -49,6 +47,8 @@ void MetricsReportingScheduler::Start() { |
void MetricsReportingScheduler::Stop() { |
running_ = false; |
+ if (upload_timer_.IsRunning()) |
+ upload_timer_.Stop(); |
} |
void MetricsReportingScheduler::UploadFinished(bool server_is_healthy, |
@@ -78,23 +78,17 @@ void MetricsReportingScheduler::UploadCancelled() { |
} |
void MetricsReportingScheduler::TriggerUpload() { |
- timer_pending_ = false; |
callback_pending_ = true; |
upload_callback_.Run(); |
} |
void MetricsReportingScheduler::ScheduleNextCallback() { |
DCHECK(running_); |
- if (timer_pending_ || callback_pending_) |
+ if (upload_timer_.IsRunning() || callback_pending_) |
return; |
- timer_pending_ = true; |
- |
- MessageLoop::current()->PostDelayedTask( |
- FROM_HERE, |
- base::Bind(&MetricsReportingScheduler::TriggerUpload, |
- weak_ptr_factory_.GetWeakPtr()), |
- upload_interval_); |
+ upload_timer_.Start(FROM_HERE, upload_interval_, this, |
+ &MetricsReportingScheduler::TriggerUpload); |
} |
void MetricsReportingScheduler::BackOffUploadInterval() { |