summaryrefslogtreecommitdiffstats
path: root/base/timer.h
diff options
context:
space:
mode:
authordarin@google.com <darin@google.com@0039d316-1c4b-4281-b951-d872f2087c98>2008-09-07 08:08:29 +0000
committerdarin@google.com <darin@google.com@0039d316-1c4b-4281-b951-d872f2087c98>2008-09-07 08:08:29 +0000
commit752578567cc199568f0522fd0a95589d5cc822fc (patch)
treed716dac10bc6718da7ebd006d9eac39720cf3e2a /base/timer.h
parent8c3f250cd0044b40992a1926cb257baa1318fe75 (diff)
downloadchromium_src-752578567cc199568f0522fd0a95589d5cc822fc.zip
chromium_src-752578567cc199568f0522fd0a95589d5cc822fc.tar.gz
chromium_src-752578567cc199568f0522fd0a95589d5cc822fc.tar.bz2
Eliminate the TimerManager by pulling its priority queue into MessageLoop. This CL also eliminates TaskBase by creating a simple PendingTask struct that is allocated inline within a std::queue used to implement the queues in the MessageLoop class.
R=jar Review URL: http://codereview.chromium.org/483 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@1825 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'base/timer.h')
-rw-r--r--base/timer.h197
1 files changed, 0 insertions, 197 deletions
diff --git a/base/timer.h b/base/timer.h
index e1a77e2..32adbf1 100644
--- a/base/timer.h
+++ b/base/timer.h
@@ -37,210 +37,17 @@
// calling Reset on timer_ would postpone DoStuff by another 1 second. In
// other words, Reset is shorthand for calling Stop and then Start again with
// the same arguments.
-//
-// NOTE: The older TimerManager / Timer API is deprecated. New code should
-// use OneShotTimer or RepeatingTimer.
#ifndef BASE_TIMER_H_
#define BASE_TIMER_H_
-#include <queue>
-#include <vector>
-
-#include "base/basictypes.h"
#include "base/task.h"
#include "base/time.h"
-//-----------------------------------------------------------------------------
-// Timer/TimerManager are objects designed to help setting timers.
-// Goals of TimerManager:
-// - have only one system timer for all app timer functionality
-// - work around bugs with timers firing arbitrarily earlier than specified
-// - provide the ability to run timers even if the application is in a
-// windows modal app loop.
-//-----------------------------------------------------------------------------
-
class MessageLoop;
namespace base {
-class TimerManager;
-
-//-----------------------------------------------------------------------------
-// The core timer object. Use TimerManager to create and control timers.
-//
-// NOTE: This class is DEPRECATED. Do not use!
-class Timer {
- public:
- Timer(int delay, Task* task, bool repeating);
-
- // For one-shot timers, you can also specify the exact fire time.
- Timer(Time fire_time, Task* task);
-
- // The task to be run when the timer fires.
- Task* task() const { return task_; }
- void set_task(Task* task) { task_ = task; }
-
- // Returns the absolute time at which the timer should fire.
- const Time &fire_time() const { return fire_time_; }
-
- // A repeating timer is a timer that is automatically scheduled to fire again
- // after it fires.
- bool repeating() const { return repeating_; }
-
- // Update (or fill in) creation_time_, and calculate future fire_time_ based
- // on current time plus delay_.
- void Reset();
-
- // A unique identifier for this timer.
- int id() const { return timer_id_; }
-
- protected:
- // Protected (rather than private) so that we can access from unit tests.
-
- // The time when the timer should fire.
- Time fire_time_;
-
- private:
- // The task that is run when this timer fires.
- Task* task_;
-
- // Timer delay in milliseconds.
- int delay_;
-
- // A monotonically increasing timer id. Used for ordering two timers which
- // have the same timestamp in a FIFO manner.
- int timer_id_;
-
- // Whether or not this timer repeats.
- const bool repeating_;
-
- // The tick count when the timer was "created". (i.e. when its current
- // iteration started.)
- Time creation_time_;
-
- DISALLOW_COPY_AND_ASSIGN(Timer);
-};
-
-//-----------------------------------------------------------------------------
-// Used to implement TimerPQueue
-//
-// NOTE: This class is DEPRECATED. Do not use!
-class TimerComparison {
- public:
- bool operator() (const Timer* t1, const Timer* t2) const {
- const Time& f1 = t1->fire_time();
- const Time& f2 = t2->fire_time();
- // If the two timers have the same delay, revert to using
- // the timer_id to maintain FIFO ordering.
- if (f1 == f2) {
- // Gracefully handle wrap as we try to return (t1->id() > t2->id());
- int delta = t1->id() - t2->id();
- // Assuming the delta is smaller than 2**31, we'll always get the right
- // answer (in terms of sign of delta).
- return delta > 0;
- }
- return f1 > f2;
- }
-};
-
-//-----------------------------------------------------------------------------
-// Subclass priority_queue to provide convenient access to removal from this
-// list.
-//
-// Terminology: The "pending" timer is the timer at the top of the queue,
-// i.e. the timer whose task needs to be Run next.
-//
-// NOTE: This class is DEPRECATED. Do not use!
-class TimerPQueue :
- public std::priority_queue<Timer*, std::vector<Timer*>, TimerComparison> {
- public:
- // Removes |timer| from the queue.
- void RemoveTimer(Timer* timer);
-
- // Returns true if the queue contains |timer|.
- bool ContainsTimer(const Timer* timer) const;
-};
-
-//-----------------------------------------------------------------------------
-// There is one TimerManager per thread, owned by the MessageLoop. Timers can
-// either be fired by the MessageLoop from within its run loop or via a system
-// timer event that the MesssageLoop constructs. The advantage of the former
-// is that we can make timers fire significantly faster than the granularity
-// provided by the system. The advantage of a system timer is that modal
-// message loops which don't run our MessageLoop code will still be able to
-// process system timer events.
-//
-// NOTE: TimerManager is not thread safe. You cannot set timers onto a thread
-// other than your own.
-//
-// NOTE: This class is DEPRECATED. Do not use!
-class TimerManager {
- public:
- explicit TimerManager(MessageLoop* message_loop);
- ~TimerManager();
-
- // Create and start a new timer. |task| is owned by the caller, as is the
- // timer object that is returned.
- Timer* StartTimer(int delay, Task* task, bool repeating);
-
- // Starts a timer. This is a no-op if the timer is already started.
- void StartTimer(Timer* timer);
-
- // Stop a timer. This is a no-op if the timer is already stopped.
- void StopTimer(Timer* timer);
-
- // Reset an existing timer, which may or may not be currently in the queue of
- // upcoming timers. The timer's parameters are unchanged; it simply begins
- // counting down again as if it was just created.
- void ResetTimer(Timer* timer);
-
- // Returns true if |timer| is in the queue of upcoming timers.
- bool IsTimerRunning(const Timer* timer) const;
-
- // Run some small number of timers.
- // Returns true if it runs a task, false otherwise.
- bool RunSomePendingTimers();
-
- // The absolute time at which the next timer is to fire. If there is not a
- // next timer to run, then the is_null property of the returned Time object
- // will be true. NOTE: This could be a time in the past!
- Time GetNextFireTime() const;
-
-#ifdef UNIT_TEST
- // For testing only, used to simulate broken early-firing WM_TIMER
- // notifications by setting arbitrarily small delays in SetTimer.
- void set_use_broken_delay(bool use_broken_delay) {
- use_broken_delay_ = use_broken_delay;
- }
-#endif // UNIT_TEST
-
- bool use_broken_delay() const {
- return use_broken_delay_;
- }
-
- protected:
- // Peek at the timer which will fire soonest.
- Timer* PeekTopTimer();
-
- private:
- void DidChangeNextTimer();
-
- // A cached value that indicates the time when we think the next timer is to
- // fire. We use this to determine if we should call DidChangeNextTimerExpiry
- // on the MessageLoop.
- Time next_timer_expiry_;
-
- TimerPQueue timers_;
-
- bool use_broken_delay_;
-
- // A lazily cached copy of MessageLoop::current.
- MessageLoop* message_loop_;
-
- DISALLOW_COPY_AND_ASSIGN(TimerManager);
-};
-
//-----------------------------------------------------------------------------
// This class is an implementation detail of OneShotTimer and RepeatingTimer.
// Please do not use this class directly.
@@ -353,8 +160,4 @@ class RepeatingTimer : public BaseTimer<Receiver, true> {};
} // namespace base
-// TODO(darin): b/1346553: Remove these once Timer and TimerManager are unused.
-using base::Timer;
-using base::TimerManager;
-
#endif // BASE_TIMER_H_