diff options
author | stuartmorgan@chromium.org <stuartmorgan@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2012-03-02 16:04:46 +0000 |
---|---|---|
committer | stuartmorgan@chromium.org <stuartmorgan@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2012-03-02 16:04:46 +0000 |
commit | 39d1002c5fd20a1e5f1653c67fee95db90ba612f (patch) | |
tree | 2a81c4bb70f99009303d09abfeeb92facc89f217 /chrome/browser/metrics | |
parent | 767c9d9900bbc3ccc490d6765c4524026950cfd8 (diff) | |
download | chromium_src-39d1002c5fd20a1e5f1653c67fee95db90ba612f.zip chromium_src-39d1002c5fd20a1e5f1653c67fee95db90ba612f.tar.gz chromium_src-39d1002c5fd20a1e5f1653c67fee95db90ba612f.tar.bz2 |
Switch MetricsReportingScheduler to using an actual timer object
This simplifies the code a bit, and makes it possible to handle Stop() more cleanly.
BUG=None
TEST=Existing metrics all continue to work as normal
Review URL: http://codereview.chromium.org/7001003
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@124656 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'chrome/browser/metrics')
-rw-r--r-- | chrome/browser/metrics/metrics_reporting_scheduler.cc | 16 | ||||
-rw-r--r-- | chrome/browser/metrics/metrics_reporting_scheduler.h | 9 |
2 files changed, 8 insertions, 17 deletions
diff --git a/chrome/browser/metrics/metrics_reporting_scheduler.cc b/chrome/browser/metrics/metrics_reporting_scheduler.cc index 05ff108..67caa73 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() { diff --git a/chrome/browser/metrics/metrics_reporting_scheduler.h b/chrome/browser/metrics/metrics_reporting_scheduler.h index 7040bbb..063f61f 100644 --- a/chrome/browser/metrics/metrics_reporting_scheduler.h +++ b/chrome/browser/metrics/metrics_reporting_scheduler.h @@ -1,4 +1,4 @@ -// Copyright (c) 2011 The Chromium Authors. All rights reserved. +// Copyright (c) 2012 The Chromium Authors. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. @@ -10,6 +10,7 @@ #include "base/callback.h" #include "base/memory/weak_ptr.h" #include "base/time.h" +#include "base/timer.h" // Scheduler task to drive a MetricsService object's uploading. class MetricsReportingScheduler { @@ -46,7 +47,7 @@ class MetricsReportingScheduler { // The MetricsService method to call when uploading should happen. base::Closure upload_callback_; - base::WeakPtrFactory<MetricsReportingScheduler> weak_ptr_factory_; + base::OneShotTimer<MetricsReportingScheduler> upload_timer_; // The interval between being told an upload is done and starting the next // upload. @@ -56,10 +57,6 @@ class MetricsReportingScheduler { // more recently than Stop). bool running_; - // Indicates that a timer for triggering the next upload has already been - // started. - bool timer_pending_; - // Indicates that the last triggered upload hasn't resolved yet. bool callback_pending_; |