summaryrefslogtreecommitdiffstats
path: root/chrome/browser/metrics
diff options
context:
space:
mode:
authorstuartmorgan@chromium.org <stuartmorgan@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2012-03-02 16:04:46 +0000
committerstuartmorgan@chromium.org <stuartmorgan@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2012-03-02 16:04:46 +0000
commit39d1002c5fd20a1e5f1653c67fee95db90ba612f (patch)
tree2a81c4bb70f99009303d09abfeeb92facc89f217 /chrome/browser/metrics
parent767c9d9900bbc3ccc490d6765c4524026950cfd8 (diff)
downloadchromium_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.cc16
-rw-r--r--chrome/browser/metrics/metrics_reporting_scheduler.h9
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_;