Index: base/timer/timer.h |
diff --git a/base/timer/timer.h b/base/timer/timer.h |
index 8aac279def647771f7cead12876c2ea06e4fddcf..1fedafd4fca6db39206791246dfb0ac3bdd27fee 100644 |
--- a/base/timer/timer.h |
+++ b/base/timer/timer.h |
@@ -77,20 +77,17 @@ class BASE_EXPORT Timer { |
// user_task is retained or reset when it runs or stops. If |tick_clock| is |
// provided, it is used instead of TimeTicks::Now() to get TimeTicks when |
// scheduling tasks. |
- Timer(bool retain_user_task, bool is_repeating); |
- Timer(bool retain_user_task, bool is_repeating, TickClock* tick_clock); |
+ Timer(bool retain_user_task, |
+ bool is_repeating, |
+ TickClock* tick_clock = nullptr); |
// Construct a timer with retained task info. If |tick_clock| is provided, it |
// is used instead of TimeTicks::Now() to get TimeTicks when scheduling tasks. |
Timer(const tracked_objects::Location& posted_from, |
TimeDelta delay, |
const base::Closure& user_task, |
- bool is_repeating); |
- Timer(const tracked_objects::Location& posted_from, |
- TimeDelta delay, |
- const base::Closure& user_task, |
bool is_repeating, |
- TickClock* tick_clock); |
+ TickClock* tick_clock = nullptr); |
virtual ~Timer(); |
@@ -111,6 +108,18 @@ class BASE_EXPORT Timer { |
TimeDelta delay, |
const base::Closure& user_task); |
+ // Start the timer to run at the given |delay| from now. If the timer is |
+ // already running, it will be replaced to call a task formed from |
+ // |reviewer->*method|. |
+ template <class Receiver> |
+ void Start(const tracked_objects::Location& posted_from, |
+ TimeDelta delay, |
+ Receiver* receiver, |
+ void (Receiver::*method)()) { |
+ Timer::Start(posted_from, delay, |
+ base::Bind(method, base::Unretained(receiver))); |
+ } |
+ |
// Call this method to stop and cancel the timer. It is a no-op if the timer |
// is not running. |
virtual void Stop(); |
@@ -218,50 +227,19 @@ class BASE_EXPORT Timer { |
}; |
//----------------------------------------------------------------------------- |
-// This class is an implementation detail of OneShotTimer and RepeatingTimer. |
-// Please do not use this class directly. |
-class BaseTimerMethodPointer : public Timer { |
- public: |
- // This is here to work around the fact that Timer::Start is "hidden" by the |
- // Start definition below, rather than being overloaded. |
- // TODO(tim): We should remove uses of BaseTimerMethodPointer::Start below |
- // and convert callers to use the base::Closure version in Timer::Start, |
- // see bug 148832. |
- using Timer::Start; |
- |
- enum RepeatMode { ONE_SHOT, REPEATING }; |
- BaseTimerMethodPointer(RepeatMode mode, TickClock* tick_clock) |
- : Timer(mode == REPEATING, mode == REPEATING, tick_clock) {} |
- |
- // Start the timer to run at the given |delay| from now. If the timer is |
- // already running, it will be replaced to call a task formed from |
- // |reviewer->*method|. |
- template <class Receiver> |
- void Start(const tracked_objects::Location& posted_from, |
- TimeDelta delay, |
- Receiver* receiver, |
- void (Receiver::*method)()) { |
- Timer::Start(posted_from, delay, |
- base::Bind(method, base::Unretained(receiver))); |
- } |
-}; |
- |
-//----------------------------------------------------------------------------- |
// A simple, one-shot timer. See usage notes at the top of the file. |
-class OneShotTimer : public BaseTimerMethodPointer { |
+class OneShotTimer : public Timer { |
public: |
- OneShotTimer() : OneShotTimer(nullptr) {} |
- explicit OneShotTimer(TickClock* tick_clock) |
- : BaseTimerMethodPointer(ONE_SHOT, tick_clock) {} |
+ explicit OneShotTimer(TickClock* tick_clock = nullptr) |
+ : Timer(false, false, tick_clock) {} |
}; |
//----------------------------------------------------------------------------- |
// A simple, repeating timer. See usage notes at the top of the file. |
-class RepeatingTimer : public BaseTimerMethodPointer { |
+class RepeatingTimer : public Timer { |
public: |
- RepeatingTimer() : RepeatingTimer(nullptr) {} |
- explicit RepeatingTimer(TickClock* tick_clock) |
- : BaseTimerMethodPointer(REPEATING, tick_clock) {} |
+ explicit RepeatingTimer(TickClock* tick_clock = nullptr) |
+ : Timer(true, true, tick_clock) {} |
}; |
//----------------------------------------------------------------------------- |
@@ -275,37 +253,25 @@ class RepeatingTimer : public BaseTimerMethodPointer { |
// |
// If destroyed, the timeout is canceled and will not occur even if already |
// inflight. |
-class DelayTimer : protected Timer { |
+class DelayTimer { |
public: |
template <class Receiver> |
DelayTimer(const tracked_objects::Location& posted_from, |
TimeDelta delay, |
Receiver* receiver, |
- void (Receiver::*method)()) |
- : DelayTimer(posted_from, delay, receiver, method, nullptr) {} |
- |
- template <class Receiver> |
- DelayTimer(const tracked_objects::Location& posted_from, |
- TimeDelta delay, |
- Receiver* receiver, |
void (Receiver::*method)(), |
- TickClock* tick_clock) |
- : Timer(posted_from, |
- delay, |
- base::Bind(method, base::Unretained(receiver)), |
- false, |
- tick_clock) {} |
- |
- void Reset() override; |
-}; |
+ TickClock* tick_clock = nullptr) |
+ : timer_(posted_from, |
+ delay, |
+ base::Bind(method, base::Unretained(receiver)), |
+ false, |
+ tick_clock) {} |
+ |
+ void Reset() { timer_.Reset(); } |
-// This class has a templated method so it can not be exported without failing |
-// to link in MSVC. But clang-plugin does not allow inline definitions of |
-// virtual methods, so the inline definition lives in the header file here |
-// to satisfy both. |
-inline void DelayTimer::Reset() { |
- Timer::Reset(); |
-} |
+ private: |
+ Timer timer_; |
+}; |
} // namespace base |