diff options
author | jbates@chromium.org <jbates@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2011-09-02 18:23:02 +0000 |
---|---|---|
committer | jbates@chromium.org <jbates@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2011-09-02 18:23:02 +0000 |
commit | d323a176fa8c2ef474ce41dd8a1cddacb4fc67ff (patch) | |
tree | 5a6b91bcea70978cbf9b63000ed5f798d532f9b7 /base/timer.h | |
parent | b1bb86d4d58f736fb980b8611ccf43d79e7b5b2b (diff) | |
download | chromium_src-d323a176fa8c2ef474ce41dd8a1cddacb4fc67ff.zip chromium_src-d323a176fa8c2ef474ce41dd8a1cddacb4fc67ff.tar.gz chromium_src-d323a176fa8c2ef474ce41dd8a1cddacb4fc67ff.tar.bz2 |
Update base/timer.h code to pass through Location from call sites. (reland) original CL w/LGTMs: http://codereview.chromium.org/7812036/
Review URL: http://codereview.chromium.org/7824041
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@99409 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'base/timer.h')
-rw-r--r-- | base/timer.h | 34 |
1 files changed, 25 insertions, 9 deletions
diff --git a/base/timer.h b/base/timer.h index 2e21582..30cb109 100644 --- a/base/timer.h +++ b/base/timer.h @@ -87,9 +87,14 @@ class BASE_EXPORT BaseTimer_Helper { // We have access to the timer_ member so we can orphan this task. class TimerTask : public Task { public: - explicit TimerTask(TimeDelta delay) : timer_(NULL), delay_(delay) { + TimerTask(const tracked_objects::Location& posted_from, + TimeDelta delay) + : posted_from_(posted_from), + timer_(NULL), + delay_(delay) { } virtual ~TimerTask() {} + tracked_objects::Location posted_from_; BaseTimer_Helper* timer_; TimeDelta delay_; }; @@ -116,9 +121,12 @@ class BaseTimer : public BaseTimer_Helper { // Call this method to start the timer. It is an error to call this method // while the timer is already running. - void Start(TimeDelta delay, Receiver* receiver, ReceiverMethod method) { + void Start(const tracked_objects::Location& posted_from, + TimeDelta delay, + Receiver* receiver, + ReceiverMethod method) { DCHECK(!IsRunning()); - InitiateDelayedTask(new TimerTask(delay, receiver, method)); + InitiateDelayedTask(new TimerTask(posted_from, delay, receiver, method)); } // Call this method to stop the timer. It is a no-op if the timer is not @@ -138,8 +146,11 @@ class BaseTimer : public BaseTimer_Helper { class TimerTask : public BaseTimer_Helper::TimerTask { public: - TimerTask(TimeDelta delay, Receiver* receiver, ReceiverMethod method) - : BaseTimer_Helper::TimerTask(delay), + TimerTask(const tracked_objects::Location& posted_from, + TimeDelta delay, + Receiver* receiver, + ReceiverMethod method) + : BaseTimer_Helper::TimerTask(posted_from, delay), receiver_(receiver), method_(method) { } @@ -162,7 +173,7 @@ class BaseTimer : public BaseTimer_Helper { } TimerTask* Clone() const { - return new TimerTask(delay_, receiver_, method_); + return new TimerTask(posted_from_, delay_, receiver_, method_); } private: @@ -221,8 +232,12 @@ class DelayTimer { public: typedef void (Receiver::*ReceiverMethod)(); - DelayTimer(TimeDelta delay, Receiver* receiver, ReceiverMethod method) - : receiver_(receiver), + DelayTimer(const tracked_objects::Location& posted_from, + TimeDelta delay, + Receiver* receiver, + ReceiverMethod method) + : posted_from_(posted_from), + receiver_(receiver), method_(method), delay_(delay) { } @@ -242,7 +257,7 @@ class DelayTimer { // The timer isn't running, or will expire too late, so restart it. timer_.Stop(); - timer_.Start(delay, this, &DelayTimer<Receiver>::Check); + timer_.Start(posted_from_, delay, this, &DelayTimer<Receiver>::Check); } void Check() { @@ -259,6 +274,7 @@ class DelayTimer { (receiver_->*method_)(); } + tracked_objects::Location posted_from_; Receiver *const receiver_; const ReceiverMethod method_; const TimeDelta delay_; |