Chromium Code Reviews| Index: base/timer.h |
| diff --git a/base/timer.h b/base/timer.h |
| index 2e21582a9a0ab8404bc981c6db2f120f6f31ed6b..a8011ee97e1a0cd0900124a31a728e4f27dd0bc6 100644 |
| --- a/base/timer.h |
| +++ b/base/timer.h |
| @@ -87,11 +87,16 @@ 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) { |
| + explicit TimerTask(TimeDelta delay, |
| + const tracked_objects::Location& posted_from) |
| + : timer_(NULL), |
| + delay_(delay), |
| + posted_from_(posted_from) { |
| } |
| virtual ~TimerTask() {} |
| BaseTimer_Helper* timer_; |
| TimeDelta delay_; |
| + tracked_objects::Location posted_from_; |
| }; |
| // Used to orphan delayed_task_ so that when it runs it does nothing. |
| @@ -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(TimeDelta delay, |
|
darin (slow to review)
2011/08/31 21:27:38
consistency nit: it'd be nice to place the Locati
jbates
2011/08/31 23:01:59
Done.
|
| + Receiver* receiver, |
| + ReceiverMethod method, |
| + const tracked_objects::Location& posted_from) { |
| DCHECK(!IsRunning()); |
| - InitiateDelayedTask(new TimerTask(delay, receiver, method)); |
| + InitiateDelayedTask(new TimerTask(delay, receiver, method, posted_from)); |
| } |
| // 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(TimeDelta delay, |
| + Receiver* receiver, |
| + ReceiverMethod method, |
| + const tracked_objects::Location& posted_from) |
| + : BaseTimer_Helper::TimerTask(delay, posted_from), |
| 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(delay_, receiver_, method_, posted_from_); |
| } |
| private: |
| @@ -221,10 +232,14 @@ class DelayTimer { |
| public: |
| typedef void (Receiver::*ReceiverMethod)(); |
| - DelayTimer(TimeDelta delay, Receiver* receiver, ReceiverMethod method) |
| + DelayTimer(TimeDelta delay, |
| + Receiver* receiver, |
| + ReceiverMethod method, |
| + const tracked_objects::Location& posted_from) |
| : receiver_(receiver), |
| method_(method), |
| - delay_(delay) { |
| + delay_(delay), |
| + posted_from_(posted_from) { |
| } |
| void Reset() { |
| @@ -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(delay, this, &DelayTimer<Receiver>::Check, posted_from_); |
| } |
| void Check() { |
| @@ -262,6 +277,7 @@ class DelayTimer { |
| Receiver *const receiver_; |
| const ReceiverMethod method_; |
| const TimeDelta delay_; |
| + tracked_objects::Location posted_from_; |
| OneShotTimer<DelayTimer<Receiver> > timer_; |
| TimeTicks trigger_time_; |