Index: base/message_loop.h |
diff --git a/base/message_loop.h b/base/message_loop.h |
index d23899784b3a27d33d166a118d6e579d96e400af..43babb21da8f460fbe43d06df5f0e1671610baf6 100644 |
--- a/base/message_loop.h |
+++ b/base/message_loop.h |
@@ -10,6 +10,7 @@ |
#include <string> |
#include "base/basictypes.h" |
+#include "base/callback.h" |
#include "base/message_pump.h" |
#include "base/observer_list.h" |
#include "base/ref_counted.h" |
@@ -161,6 +162,22 @@ class MessageLoop : public base::MessagePump::Delegate { |
void PostNonNestableDelayedTask( |
const tracked_objects::Location& from_here, Task* task, int64 delay_ms); |
+ void PostClosure( |
+ const tracked_objects::Location& from_here, |
+ const base::Closure& closure); |
+ |
+ void PostDelayedClosure( |
+ const tracked_objects::Location& from_here, |
+ const base::Closure& closure, int64 delay_ms); |
+ |
+ void PostNonNestableClosure( |
+ const tracked_objects::Location& from_here, |
+ const base::Closure& closure); |
+ |
+ void PostNonNestableDelayedClosure( |
+ const tracked_objects::Location& from_here, |
+ const base::Closure& closure, int64 delay_ms); |
+ |
// A variant on PostTask that deletes the given object. This is useful |
// if the object needs to live until the next run of the MessageLoop (for |
// example, deleting a RenderProcessHost from within an IPC callback is not |
@@ -344,14 +361,22 @@ class MessageLoop : public base::MessagePump::Delegate { |
// This structure is copied around by value. |
struct PendingTask { |
- PendingTask(Task* task, bool nestable) |
- : task(task), sequence_num(0), nestable(nestable) { |
+ PendingTask(Task* task, base::TimeTicks delayed_run_time, bool nestable) |
+ : task(task), delayed_run_time(delayed_run_time), sequence_num(0), |
+ nestable(nestable) { |
+ } |
+ |
+ PendingTask(const base::Closure& closure, base::TimeTicks delayed_run_time, |
+ bool nestable) |
+ : task(NULL), closure(closure), delayed_run_time(delayed_run_time), |
+ sequence_num(0), nestable(nestable) { |
} |
// Used to support sorting. |
bool operator<(const PendingTask& other) const; |
Task* task; // The task to run. |
+ base::Closure closure; // The Closure to run if task == NULL. |
base::TimeTicks delayed_run_time; // The time when the task should be run. |
int sequence_num; // Secondary sort key for run time. |
bool nestable; // OK to dispatch from a nested loop. |
@@ -397,6 +422,9 @@ class MessageLoop : public base::MessagePump::Delegate { |
// Runs the specified task and deletes it. |
void RunTask(Task* task); |
+ // Runs the specified Closure. |
+ void RunClosure(const base::Closure& closure); |
+ |
// Calls RunTask or queues the pending_task on the deferred task list if it |
// cannot be run right now. Returns true if the task was run. |
bool DeferOrRunPendingTask(const PendingTask& pending_task); |
@@ -404,6 +432,9 @@ class MessageLoop : public base::MessagePump::Delegate { |
// Adds the pending task to delayed_work_queue_. |
void AddToDelayedWorkQueue(const PendingTask& pending_task); |
+ // Adds the pending task to our incoming_queue_. |
+ void AddToIncomingQueue(const PendingTask& pending_task); |
+ |
// Load tasks from the incoming_queue_ into work_queue_ if the latter is |
// empty. The former requires a lock to access, while the latter is directly |
// accessible on this thread. |
@@ -414,9 +445,8 @@ class MessageLoop : public base::MessagePump::Delegate { |
// true if some work was done. |
bool DeletePendingTasks(); |
- // Post a task to our incomming queue. |
- void PostTask_Helper(const tracked_objects::Location& from_here, Task* task, |
- int64 delay_ms, bool nestable); |
+ // Calcuates the time at which a PendingTask should run. |
+ base::TimeTicks CalculateDelayedRuntime(int64 delay_ms); |
// Start recording histogram info about events and action IF it was enabled |
// and IF the statistics recorder can accept a registration of our histogram. |