Index: content/renderer/scheduler/task_queue_manager_unittest.cc |
diff --git a/content/renderer/scheduler/task_queue_manager_unittest.cc b/content/renderer/scheduler/task_queue_manager_unittest.cc |
index 845e9bad2c4e7e1bdb27d819b1c20774483338db..926f30d69752e190889bc1cb0dc66812d8be48c1 100644 |
--- a/content/renderer/scheduler/task_queue_manager_unittest.cc |
+++ b/content/renderer/scheduler/task_queue_manager_unittest.cc |
@@ -840,6 +840,54 @@ TEST_F(TaskQueueManagerTest, ThreadCheckAfterTermination) { |
EXPECT_TRUE(runner->RunsTasksOnCurrentThread()); |
} |
+TEST_F(TaskQueueManagerTest, NextPendingDelayedTaskRunTime) { |
+ scoped_refptr<cc::TestNowSource> clock(cc::TestNowSource::Create()); |
+ Initialize(2u); |
+ manager_->SetTimeSourceForTesting(clock); |
+ |
+ scoped_refptr<base::SingleThreadTaskRunner> runners[2] = { |
+ manager_->TaskRunnerForQueue(0), manager_->TaskRunnerForQueue(1)}; |
+ |
+ // With no delayed tasks. |
+ EXPECT_TRUE(manager_->NextPendingDelayedTaskRunTime().is_null()); |
+ |
+ // With a non-delayed task. |
+ runners[0]->PostTask(FROM_HERE, base::Bind(&NullTestTask)); |
+ EXPECT_TRUE(manager_->NextPendingDelayedTaskRunTime().is_null()); |
+ |
+ // With a delayed task. |
+ base::TimeDelta expected_delay = base::TimeDelta::FromMilliseconds(50); |
+ runners[0]->PostDelayedTask( |
+ FROM_HERE, base::Bind(&NullTestTask), expected_delay); |
+ EXPECT_EQ(clock->Now() + expected_delay, |
+ manager_->NextPendingDelayedTaskRunTime()); |
+ |
+ // With another delayed task in the same queue with a longer delay. |
+ runners[0]->PostDelayedTask( |
+ FROM_HERE, base::Bind(&NullTestTask), |
+ base::TimeDelta::FromMilliseconds(100)); |
+ EXPECT_EQ(clock->Now() + expected_delay, |
+ manager_->NextPendingDelayedTaskRunTime()); |
+ |
+ // With another delayed task in the same queue with a shorter delay. |
+ expected_delay = base::TimeDelta::FromMilliseconds(20); |
+ runners[0]->PostDelayedTask( |
+ FROM_HERE, base::Bind(&NullTestTask), expected_delay); |
+ EXPECT_EQ(clock->Now() + expected_delay, |
+ manager_->NextPendingDelayedTaskRunTime()); |
+ |
+ // With another delayed task in a different queue with a shorter delay. |
+ expected_delay = base::TimeDelta::FromMilliseconds(10); |
+ runners[1]->PostDelayedTask( |
+ FROM_HERE, base::Bind(&NullTestTask), expected_delay); |
+ EXPECT_EQ(clock->Now() + expected_delay, |
+ manager_->NextPendingDelayedTaskRunTime()); |
+ |
+ // Test it updates as time progresses |
+ clock->AdvanceNow(expected_delay); |
+ EXPECT_EQ(clock->Now(), manager_->NextPendingDelayedTaskRunTime()); |
+} |
+ |
} // namespace |
} // namespace content |