| Index: mojo/public/cpp/utility/run_loop.h
|
| diff --git a/mojo/public/cpp/utility/run_loop.h b/mojo/public/cpp/utility/run_loop.h
|
| index 74f870abc577eeca708b5134b87856eba7b81e61..e02f6455e9a95e6e3b69060bd14c0bd3a8b0e423 100644
|
| --- a/mojo/public/cpp/utility/run_loop.h
|
| +++ b/mojo/public/cpp/utility/run_loop.h
|
| @@ -6,7 +6,9 @@
|
| #define MOJO_PUBLIC_CPP_UTILITY_RUN_LOOP_H_
|
|
|
| #include <map>
|
| +#include <queue>
|
|
|
| +#include "mojo/public/cpp/bindings/callback.h"
|
| #include "mojo/public/cpp/system/core.h"
|
|
|
| namespace mojo {
|
| @@ -49,6 +51,10 @@ class RunLoop {
|
|
|
| void Quit();
|
|
|
| + // Adds a task to be performed after delay has elapsed. Must be posted to the
|
| + // current thread's RunLoop.
|
| + void PostDelayedTask(const Closure& task, MojoTimeTicks delay);
|
| +
|
| private:
|
| struct RunState;
|
| struct WaitState;
|
| @@ -70,6 +76,9 @@ class RunLoop {
|
|
|
| typedef std::map<Handle, HandlerData> HandleToHandlerData;
|
|
|
| + // Do one unit of delayed work, if eligible.
|
| + void DoDelayedWork();
|
| +
|
| // Waits for a handle to be ready. Returns after servicing at least one
|
| // handle (or there are no more handles) unless |non_blocking| is true,
|
| // in which case it will also return if servicing at least one handle
|
| @@ -100,6 +109,24 @@ class RunLoop {
|
| // notify it.
|
| int next_handler_id_;
|
|
|
| + struct PendingTask {
|
| + PendingTask(const Closure& task,
|
| + MojoTimeTicks runtime,
|
| + uint64_t sequence_number);
|
| + ~PendingTask();
|
| +
|
| + bool operator<(const PendingTask& other) const;
|
| +
|
| + Closure task;
|
| + MojoTimeTicks run_time;
|
| + uint64_t sequence_number;
|
| + };
|
| + // An ever increasing sequence number attached to each pending task in order
|
| + // to preserve relative order of tasks posted at the 'same' time.
|
| + uint64_t next_sequence_number_;
|
| + typedef std::priority_queue<PendingTask> DelayedTaskQueue;
|
| + DelayedTaskQueue delayed_tasks_;
|
| +
|
| MOJO_DISALLOW_COPY_AND_ASSIGN(RunLoop);
|
| };
|
|
|
|
|