Index: components/scheduler/child/task_queue_manager_unittest.cc |
diff --git a/components/scheduler/child/task_queue_manager_unittest.cc b/components/scheduler/child/task_queue_manager_unittest.cc |
index 55f738ff472d094b0e84b44eebe01c6d91c1f1bb..8b6839b20c0052e305944ec3dae313da18055b27 100644 |
--- a/components/scheduler/child/task_queue_manager_unittest.cc |
+++ b/components/scheduler/child/task_queue_manager_unittest.cc |
@@ -11,6 +11,7 @@ |
#include "cc/test/ordered_simple_task_runner.h" |
#include "components/scheduler/child/nestable_task_runner_for_test.h" |
#include "components/scheduler/child/scheduler_message_loop_delegate.h" |
+#include "components/scheduler/child/task_queue.h" |
#include "components/scheduler/child/task_queue_selector.h" |
#include "components/scheduler/child/test_time_source.h" |
#include "components/scheduler/test/test_always_fail_time_source.h" |
@@ -1297,4 +1298,34 @@ TEST_F(TaskQueueManagerTest, DelayedTaskDoesNotSkipAHeadOfShorterDelayedTask) { |
EXPECT_THAT(run_order, ElementsAre(2, 1)); |
} |
+TEST_F(TaskQueueManagerTest, DelayedTaskWithAbsoluteRunTime) { |
+ Initialize(1u, SelectorType::Automatic); |
+ |
+ scoped_refptr<TaskQueue> runner = manager_->TaskRunnerForQueue(0); |
+ |
+ std::vector<int> run_order; |
+ |
+ // One task in the past, two with the exact same run time and one in the |
+ // future. |
+ base::TimeDelta delay = base::TimeDelta::FromMilliseconds(10); |
+ base::TimeTicks runTime1 = now_src_->NowTicks() - delay; |
+ base::TimeTicks runTime2 = now_src_->NowTicks(); |
+ base::TimeTicks runTime3 = now_src_->NowTicks(); |
+ base::TimeTicks runTime4 = now_src_->NowTicks() + delay; |
+ |
+ runner->PostDelayedTaskAt(FROM_HERE, base::Bind(&TestTask, 1, &run_order), |
+ runTime1); |
+ runner->PostDelayedTaskAt(FROM_HERE, base::Bind(&TestTask, 2, &run_order), |
+ runTime2); |
+ runner->PostDelayedTaskAt(FROM_HERE, base::Bind(&TestTask, 3, &run_order), |
+ runTime3); |
+ runner->PostDelayedTaskAt(FROM_HERE, base::Bind(&TestTask, 4, &run_order), |
+ runTime4); |
+ |
+ now_src_->Advance(2 * delay); |
+ test_task_runner_->RunUntilIdle(); |
+ |
+ EXPECT_THAT(run_order, ElementsAre(1, 2, 3, 4)); |
+} |
+ |
} // namespace scheduler |