| Index: base/test/test_mock_time_task_runner.cc
|
| diff --git a/base/test/test_mock_time_task_runner.cc b/base/test/test_mock_time_task_runner.cc
|
| index 8cc2e6d5ff1f1366cb4574f5dc3608efd62fcb57..f2e18a3503379588194ca005b27f4da3013663f4 100644
|
| --- a/base/test/test_mock_time_task_runner.cc
|
| +++ b/base/test/test_mock_time_task_runner.cc
|
| @@ -67,15 +67,55 @@ Time MockClock::Now() {
|
|
|
| } // namespace
|
|
|
| +// TestMockTimeTaskRunner::TestOrderedPendingTask -----------------------------
|
| +
|
| +// Subclass of TestPendingTask which has a strictly monotonically increasing ID
|
| +// for every task, so that tasks posted with the same 'time to run' can be run
|
| +// in the order of being posted.
|
| +struct TestMockTimeTaskRunner::TestOrderedPendingTask
|
| + : public base::TestPendingTask {
|
| + TestOrderedPendingTask();
|
| + TestOrderedPendingTask(const tracked_objects::Location& location,
|
| + const Closure& task,
|
| + TimeTicks post_time,
|
| + TimeDelta delay,
|
| + size_t ordinal,
|
| + TestNestability nestability);
|
| + ~TestOrderedPendingTask();
|
| +
|
| + size_t ordinal;
|
| +};
|
| +
|
| +TestMockTimeTaskRunner::TestOrderedPendingTask::TestOrderedPendingTask()
|
| + : ordinal(0) {
|
| +}
|
| +
|
| +TestMockTimeTaskRunner::TestOrderedPendingTask::TestOrderedPendingTask(
|
| + const tracked_objects::Location& location,
|
| + const Closure& task,
|
| + TimeTicks post_time,
|
| + TimeDelta delay,
|
| + size_t ordinal,
|
| + TestNestability nestability)
|
| + : base::TestPendingTask(location, task, post_time, delay, nestability),
|
| + ordinal(ordinal) {
|
| +}
|
| +
|
| +TestMockTimeTaskRunner::TestOrderedPendingTask::~TestOrderedPendingTask() {
|
| +}
|
| +
|
| // TestMockTimeTaskRunner -----------------------------------------------------
|
|
|
| bool TestMockTimeTaskRunner::TemporalOrder::operator()(
|
| - const TestPendingTask& first_task,
|
| - const TestPendingTask& second_task) const {
|
| + const TestOrderedPendingTask& first_task,
|
| + const TestOrderedPendingTask& second_task) const {
|
| + if (first_task.GetTimeToRun() == second_task.GetTimeToRun())
|
| + return first_task.ordinal > second_task.ordinal;
|
| return first_task.GetTimeToRun() > second_task.GetTimeToRun();
|
| }
|
|
|
| -TestMockTimeTaskRunner::TestMockTimeTaskRunner() : now_(Time::UnixEpoch()) {
|
| +TestMockTimeTaskRunner::TestMockTimeTaskRunner()
|
| + : now_(Time::UnixEpoch()), next_task_ordinal_(0) {
|
| }
|
|
|
| TestMockTimeTaskRunner::~TestMockTimeTaskRunner() {
|
| @@ -152,8 +192,9 @@ bool TestMockTimeTaskRunner::PostDelayedTask(
|
| const Closure& task,
|
| TimeDelta delay) {
|
| AutoLock scoped_lock(tasks_lock_);
|
| - tasks_.push(TestPendingTask(from_here, task, now_ticks_, delay,
|
| - TestPendingTask::NESTABLE));
|
| + tasks_.push(TestOrderedPendingTask(from_here, task, now_ticks_, delay,
|
| + next_task_ordinal_++,
|
| + TestPendingTask::NESTABLE));
|
| return true;
|
| }
|
|
|
|
|