Chromium Code Reviews| Index: components/scheduler/base/task_queue_manager_unittest.cc |
| diff --git a/components/scheduler/base/task_queue_manager_unittest.cc b/components/scheduler/base/task_queue_manager_unittest.cc |
| index fcdb8356d20f0719a537f194557394f526a942de..0905bfaec769a6812da40ee16c38726022597054 100644 |
| --- a/components/scheduler/base/task_queue_manager_unittest.cc |
| +++ b/components/scheduler/base/task_queue_manager_unittest.cc |
| @@ -25,8 +25,9 @@ namespace scheduler { |
| class MessageLoopTaskRunner : public NestableTaskRunnerForTest { |
| public: |
| - static scoped_refptr<MessageLoopTaskRunner> Create() { |
| - return make_scoped_refptr(new MessageLoopTaskRunner()); |
| + static scoped_refptr<MessageLoopTaskRunner> Create( |
| + scoped_ptr<base::TickClock> tick_clock) { |
| + return make_scoped_refptr(new MessageLoopTaskRunner(tick_clock.Pass())); |
| } |
| // NestableTaskRunner implementation. |
| @@ -35,9 +36,9 @@ class MessageLoopTaskRunner : public NestableTaskRunnerForTest { |
| } |
| private: |
| - MessageLoopTaskRunner() |
| - : NestableTaskRunnerForTest(base::MessageLoop::current()->task_runner()) { |
| - } |
| + explicit MessageLoopTaskRunner(scoped_ptr<base::TickClock> tick_clock) |
| + : NestableTaskRunnerForTest(base::MessageLoop::current()->task_runner(), |
| + tick_clock.Pass()) {} |
| ~MessageLoopTaskRunner() override {} |
| }; |
| @@ -46,28 +47,34 @@ class TaskQueueManagerTest : public testing::Test { |
| void DeleteTaskQueueManager() { manager_.reset(); } |
| protected: |
| - void Initialize(size_t num_queues) { |
| - now_src_.reset(new base::SimpleTestTickClock()); |
| - now_src_->Advance(base::TimeDelta::FromMicroseconds(1000)); |
| + void InitializeWithClock(size_t num_queues, |
| + scoped_ptr<base::TickClock> test_time_source) { |
| test_task_runner_ = make_scoped_refptr( |
| new cc::OrderedSimpleTaskRunner(now_src_.get(), false)); |
| - main_task_runner_ = |
| - NestableTaskRunnerForTest::Create(test_task_runner_.get()); |
| + main_task_runner_ = NestableTaskRunnerForTest::Create( |
| + test_task_runner_.get(), |
| + make_scoped_ptr(new TestTimeSource(now_src_.get()))); |
| manager_ = make_scoped_ptr(new TaskQueueManager( |
| main_task_runner_, "test.scheduler", "test.scheduler", |
| "test.scheduler.debug")); |
| - manager_->SetTimeSourceForTesting( |
| - make_scoped_ptr(new TestTimeSource(now_src_.get()))); |
| for (size_t i = 0; i < num_queues; i++) |
| runners_.push_back(manager_->NewTaskQueue(TaskQueue::Spec("test_queue"))); |
| } |
| + void Initialize(size_t num_queues) { |
| + now_src_.reset(new base::SimpleTestTickClock()); |
| + now_src_->Advance(base::TimeDelta::FromMicroseconds(1000)); |
| + InitializeWithClock(num_queues, |
| + make_scoped_ptr(new TestTimeSource(now_src_.get()))); |
| + } |
| + |
| void InitializeWithRealMessageLoop(size_t num_queues) { |
| message_loop_.reset(new base::MessageLoop()); |
| - manager_ = make_scoped_ptr( |
| - new TaskQueueManager(MessageLoopTaskRunner::Create(), "test.scheduler", |
| - "test.scheduler", "test.scheduler.debug")); |
| + manager_ = make_scoped_ptr(new TaskQueueManager( |
| + MessageLoopTaskRunner::Create( |
| + make_scoped_ptr(new TestTimeSource(now_src_.get()))), |
| + "test.scheduler", "test.scheduler", "test.scheduler.debug")); |
| for (size_t i = 0; i < num_queues; i++) |
| runners_.push_back(manager_->NewTaskQueue(TaskQueue::Spec("test_queue"))); |
| @@ -128,24 +135,6 @@ TEST_F(TaskQueueManagerTest, MultiQueuePosting) { |
| EXPECT_THAT(run_order, ElementsAre(1, 2, 3, 4, 5, 6)); |
| } |
| -void NopTask() {} |
| - |
| -TEST_F(TaskQueueManagerTest, NowNotCalledWhenThereAreNoDelayedTasks) { |
|
Sami
2015/10/28 20:00:35
Can we still test for this somehow?
alex clarke (OOO till 29th)
2015/10/30 12:12:24
Done.
|
| - Initialize(3u); |
| - |
| - manager_->SetTimeSourceForTesting( |
| - make_scoped_ptr(new TestAlwaysFailTimeSource())); |
| - |
| - runners_[0]->PostTask(FROM_HERE, base::Bind(&NopTask)); |
| - runners_[0]->PostTask(FROM_HERE, base::Bind(&NopTask)); |
| - runners_[1]->PostTask(FROM_HERE, base::Bind(&NopTask)); |
| - runners_[1]->PostTask(FROM_HERE, base::Bind(&NopTask)); |
| - runners_[2]->PostTask(FROM_HERE, base::Bind(&NopTask)); |
| - runners_[2]->PostTask(FROM_HERE, base::Bind(&NopTask)); |
| - |
| - test_task_runner_->RunUntilIdle(); |
| -} |
| - |
| TEST_F(TaskQueueManagerTest, NonNestableTaskPosting) { |
| InitializeWithRealMessageLoop(1u); |
| @@ -234,6 +223,8 @@ bool MessageLoopTaskCounter(size_t* count) { |
| return true; |
| } |
| +void NopTask() {} |
| + |
| TEST_F(TaskQueueManagerTest, DelayedTaskExecutedInOneMessageLoopTask) { |
| Initialize(1u); |
| @@ -886,11 +877,8 @@ TEST_F(TaskQueueManagerTest, ThreadCheckAfterTermination) { |
| } |
| TEST_F(TaskQueueManagerTest, NextPendingDelayedTaskRunTime) { |
| - scoped_ptr<base::SimpleTestTickClock> clock(new base::SimpleTestTickClock()); |
| - clock->Advance(base::TimeDelta::FromMicroseconds(10000)); |
| Initialize(2u); |
| - manager_->SetTimeSourceForTesting( |
| - make_scoped_ptr(new TestTimeSource(clock.get()))); |
| + now_src_->Advance(base::TimeDelta::FromMicroseconds(10000)); |
| // With no delayed tasks. |
| EXPECT_TRUE(manager_->NextPendingDelayedTaskRunTime().is_null()); |
| @@ -902,30 +890,30 @@ TEST_F(TaskQueueManagerTest, NextPendingDelayedTaskRunTime) { |
| // With a delayed task. |
| base::TimeDelta expected_delay = base::TimeDelta::FromMilliseconds(50); |
| runners_[0]->PostDelayedTask(FROM_HERE, base::Bind(&NopTask), expected_delay); |
| - EXPECT_EQ(clock->NowTicks() + expected_delay, |
| + EXPECT_EQ(now_src_->NowTicks() + expected_delay, |
| manager_->NextPendingDelayedTaskRunTime()); |
| // With another delayed task in the same queue with a longer delay. |
| runners_[0]->PostDelayedTask(FROM_HERE, base::Bind(&NopTask), |
| base::TimeDelta::FromMilliseconds(100)); |
| - EXPECT_EQ(clock->NowTicks() + expected_delay, |
| + EXPECT_EQ(now_src_->NowTicks() + 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(&NopTask), expected_delay); |
| - EXPECT_EQ(clock->NowTicks() + expected_delay, |
| + EXPECT_EQ(now_src_->NowTicks() + 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(&NopTask), expected_delay); |
| - EXPECT_EQ(clock->NowTicks() + expected_delay, |
| + EXPECT_EQ(now_src_->NowTicks() + expected_delay, |
| manager_->NextPendingDelayedTaskRunTime()); |
| // Test it updates as time progresses |
| - clock->Advance(expected_delay); |
| - EXPECT_EQ(clock->NowTicks(), manager_->NextPendingDelayedTaskRunTime()); |
| + now_src_->Advance(expected_delay); |
| + EXPECT_EQ(now_src_->NowTicks(), manager_->NextPendingDelayedTaskRunTime()); |
| } |
| TEST_F(TaskQueueManagerTest, NextPendingDelayedTaskRunTime_MultipleQueues) { |