diff --git a/base/test/test_mock_time_task_runner.cc b/base/test/test_mock_time_task_runner.cc index 8a889c5fe55ba..c74d14e008eec 100644 --- a/base/test/test_mock_time_task_runner.cc +++ b/base/test/test_mock_time_task_runner.cc @@ -196,6 +196,10 @@ void TestMockTimeTaskRunner::FastForwardBy(TimeDelta delta) { ForwardClocksUntilTickTime(original_now_ticks + delta); } +void TestMockTimeTaskRunner::AdvanceMockTickClock(TimeDelta delta) { + ForwardClocksUntilTickTime(NowTicks() + delta); +} + void TestMockTimeTaskRunner::RunUntilIdle() { DCHECK(thread_checker_.CalledOnValidThread()); ProcessAllTasksNoLaterThan(TimeDelta()); diff --git a/base/test/test_mock_time_task_runner.h b/base/test/test_mock_time_task_runner.h index a7654318c0824..23dbb2ff401fd 100644 --- a/base/test/test_mock_time_task_runner.h +++ b/base/test/test_mock_time_task_runner.h @@ -140,6 +140,9 @@ class TestMockTimeTaskRunner : public SingleThreadTaskRunner, // non-negative. void FastForwardBy(TimeDelta delta); + // Fast-forwards virtual time by |delta| but not causing any task execution. + void AdvanceMockTickClock(TimeDelta delta); + // Fast-forwards virtual time just until all tasks are executed. void FastForwardUntilNoTasksRemain(); diff --git a/base/test/test_mock_time_task_runner_unittest.cc b/base/test/test_mock_time_task_runner_unittest.cc index e149f650cfcbe..04be46638a327 100644 --- a/base/test/test_mock_time_task_runner_unittest.cc +++ b/base/test/test_mock_time_task_runner_unittest.cc @@ -247,4 +247,16 @@ TEST(TestMockTimeTaskRunnerTest, NoFastForwardToCancelledTask) { EXPECT_EQ(start_time, task_runner->NowTicks()); } +TEST(TestMockTimeTaskRunnerTest, AdvanceMockTickClockDoesNotRunTasks) { + auto task_runner = MakeRefCounted<TestMockTimeTaskRunner>(); + TimeTicks start_time = task_runner->NowTicks(); + task_runner->PostTask(FROM_HERE, BindOnce([]() { ADD_FAILURE(); })); + task_runner->PostDelayedTask(FROM_HERE, BindOnce([]() { ADD_FAILURE(); }), + TimeDelta::FromSeconds(1)); + + task_runner->AdvanceMockTickClock(TimeDelta::FromSeconds(3)); + EXPECT_EQ(start_time + TimeDelta::FromSeconds(3), task_runner->NowTicks()); + EXPECT_EQ(2u, task_runner->GetPendingTaskCount()); +} + } // namespace base diff --git a/third_party/blink/renderer/platform/scheduler/base/DEPS b/third_party/blink/renderer/platform/scheduler/base/DEPS deleted file mode 100644 index 53701134c2ec0..0000000000000 --- a/third_party/blink/renderer/platform/scheduler/base/DEPS +++ /dev/null @@ -1,5 +0,0 @@ -specific_include_rules = { - ".*test\.cc": [ - "+components/viz/test", - ], -} diff --git a/third_party/blink/renderer/platform/scheduler/base/task_queue_manager_impl_unittest.cc b/third_party/blink/renderer/platform/scheduler/base/task_queue_manager_impl_unittest.cc index ab5aefeae1b14..41968d9dcc0d4 100644 --- a/third_party/blink/renderer/platform/scheduler/base/task_queue_manager_impl_unittest.cc +++ b/third_party/blink/renderer/platform/scheduler/base/task_queue_manager_impl_unittest.cc @@ -12,15 +12,17 @@ #include "base/memory/ref_counted_memory.h" #include "base/message_loop/message_loop.h" #include "base/message_loop/message_loop_current.h" +#include "base/optional.h" #include "base/run_loop.h" #include "base/single_thread_task_runner.h" #include "base/synchronization/waitable_event.h" #include "base/test/simple_test_tick_clock.h" +#include "base/test/test_mock_time_task_runner.h" +#include "base/test/test_simple_task_runner.h" #include "base/test/trace_event_analyzer.h" #include "base/threading/thread.h" #include "base/threading/thread_task_runner_handle.h" #include "base/trace_event/blame_context.h" -#include "components/viz/test/ordered_simple_task_runner.h" #include "testing/gmock/include/gmock/gmock.h" #include "third_party/blink/renderer/platform/scheduler/base/real_time_domain.h" #include "third_party/blink/renderer/platform/scheduler/base/task_queue_impl.h" @@ -69,24 +71,36 @@ class TaskQueueManagerTestBase : public testing::Test { TestTaskTimeObserver test_task_time_observer_; }; -// TaskQueueManagerImpl uses deprecated cc::OrderedSimpleTaskRunner. -// TODO(kraynov): Land https://chromium-review.googlesource.com/1037144 to -// replace it with TestMockTimeTaskRunner. +// TaskQueueManagerImpl uses TestMockTimeTaskRunner which controls +// both task execution and mock clock. class TaskQueueManagerTest : public TaskQueueManagerTestBase { public: void DeleteTaskQueueManagerTask() { manager_.reset(); } protected: void SetUp() override { + test_task_runner_ = base::WrapRefCounted(new base::TestMockTimeTaskRunner( + base::TestMockTimeTaskRunner::Type::kBoundToThread)); // A null clock triggers some assertions. - now_src_.Advance(base::TimeDelta::FromMilliseconds(1)); - start_time_ = now_src_.NowTicks(); + test_task_runner_->AdvanceMockTickClock( + base::TimeDelta::FromMilliseconds(1)); + start_time_ = GetTickClock()->NowTicks(); - test_task_runner_ = - base::WrapRefCounted(new cc::OrderedSimpleTaskRunner(&now_src_, false)); + manager_ = TaskQueueManagerForTest::Create( + nullptr, base::ThreadTaskRunnerHandle::Get(), + test_task_runner_->GetMockTickClock()); + } - manager_ = - TaskQueueManagerForTest::Create(nullptr, test_task_runner_, &now_src_); + const base::TickClock* GetTickClock() { + return test_task_runner_->GetMockTickClock(); + } + + void RunPendingTasks() { + // We should only run tasks already posted by that moment. + base::RunLoop run_loop; + test_task_runner_->PostTask(FROM_HERE, run_loop.QuitClosure()); + // TestMockTimeTaskRunner will fast-forward mock clock if necessary. + run_loop.Run(); } // Runs all immediate tasks until there is no more work to do and advances @@ -102,21 +116,18 @@ class TaskQueueManagerTest : public TaskQueueManagerTestBase { if (!manager_->HasImmediateWork()) { base::TimeTicks run_time; if (manager_->GetRealTimeDomain()->NextScheduledRunTime(&run_time)) { - now_src_.SetNowTicks(run_time); + test_task_runner_->AdvanceMockTickClock(run_time - + GetTickClock()->NowTicks()); per_run_time_callback.Run(); } else { break; } } - test_task_runner_->RunPendingTasks(); + RunPendingTasks(); } } - scoped_refptr<cc::OrderedSimpleTaskRunner> test_task_runner_; - - // TODO(kraynov): Remove after switching to TestMockTimeTaskRunner because - // it has their own mock tick clock. - base::SimpleTestTickClock now_src_; + scoped_refptr<base::TestMockTimeTaskRunner> test_task_runner_; }; // TaskQueueManagerImpl is being initialized with real MessageLoop @@ -126,15 +137,17 @@ class TaskQueueManagerTestWithMessageLoop : public TaskQueueManagerTestBase { void SetUp() override { message_loop_.reset(new base::MessageLoop()); // A null clock triggers some assertions. - now_src_.Advance(base::TimeDelta::FromMilliseconds(1)); - start_time_ = now_src_.NowTicks(); + mock_clock_.Advance(base::TimeDelta::FromMilliseconds(1)); + start_time_ = mock_clock_.NowTicks(); manager_ = TaskQueueManagerForTest::Create( - message_loop_.get(), base::ThreadTaskRunnerHandle::Get(), &now_src_); + message_loop_.get(), base::ThreadTaskRunnerHandle::Get(), &mock_clock_); } + const base::TickClock* GetTickClock() { return &mock_clock_; } + std::unique_ptr<base::MessageLoop> message_loop_; - base::SimpleTestTickClock now_src_; + base::SimpleTestTickClock mock_clock_; }; class TaskQueueManagerTestWithCustomInitialization @@ -242,7 +255,7 @@ TEST_F(TaskQueueManagerTest, SingleQueuePosting) { runners_[0]->PostTask(FROM_HERE, base::BindOnce(&TestTask, 2, &run_order)); runners_[0]->PostTask(FROM_HERE, base::BindOnce(&TestTask, 3, &run_order)); - test_task_runner_->RunUntilIdle(); + base::RunLoop().RunUntilIdle(); EXPECT_THAT(run_order, ElementsAre(1, 2, 3)); } @@ -257,7 +270,7 @@ TEST_F(TaskQueueManagerTest, MultiQueuePosting) { runners_[2]->PostTask(FROM_HERE, base::BindOnce(&TestTask, 5, &run_order)); runners_[2]->PostTask(FROM_HERE, base::BindOnce(&TestTask, 6, &run_order)); - test_task_runner_->RunUntilIdle(); + base::RunLoop().RunUntilIdle(); EXPECT_THAT(run_order, ElementsAre(1, 2, 3, 4, 5, 6)); } @@ -377,14 +390,14 @@ TEST_F(TaskQueueManagerTest, HasPendingImmediateWork_ImmediateTask) { std::unique_ptr<TaskQueue::QueueEnabledVoter> voter = runners_[0]->CreateQueueEnabledVoter(); voter->SetQueueEnabled(false); - test_task_runner_->RunUntilIdle(); + base::RunLoop().RunUntilIdle(); EXPECT_FALSE( runners_[0]->GetTaskQueueImpl()->immediate_work_queue()->Empty()); EXPECT_TRUE(runners_[0]->HasTaskToRunImmediately()); // Run the task, making the queue empty. voter->SetQueueEnabled(true); - test_task_runner_->RunUntilIdle(); + base::RunLoop().RunUntilIdle(); EXPECT_FALSE(runners_[0]->HasTaskToRunImmediately()); } @@ -396,17 +409,17 @@ TEST_F(TaskQueueManagerTest, HasPendingImmediateWork_DelayedTask) { runners_[0]->PostDelayedTask(FROM_HERE, base::BindOnce(&TestTask, 1, &run_order), delay); EXPECT_FALSE(runners_[0]->HasTaskToRunImmediately()); - now_src_.Advance(delay); + test_task_runner_->AdvanceMockTickClock(delay); EXPECT_TRUE(runners_[0]->HasTaskToRunImmediately()); // Move the task into the |delayed_work_queue|. - LazyNow lazy_now(&now_src_); + LazyNow lazy_now(GetTickClock()); manager_->WakeUpReadyDelayedQueues(&lazy_now); EXPECT_FALSE(runners_[0]->GetTaskQueueImpl()->delayed_work_queue()->Empty()); EXPECT_TRUE(runners_[0]->HasTaskToRunImmediately()); // Run the task, making the queue empty. - test_task_runner_->RunUntilIdle(); + base::RunLoop().RunUntilIdle(); EXPECT_FALSE(runners_[0]->HasTaskToRunImmediately()); } @@ -417,35 +430,30 @@ TEST_F(TaskQueueManagerTest, DelayedTaskPosting) { base::TimeDelta delay(base::TimeDelta::FromMilliseconds(10)); runners_[0]->PostDelayedTask(FROM_HERE, base::BindOnce(&TestTask, 1, &run_order), delay); - EXPECT_EQ(delay, test_task_runner_->DelayToNextTaskTime()); + EXPECT_EQ(base::TimeDelta::FromMilliseconds(10), + test_task_runner_->NextPendingTaskDelay()); EXPECT_FALSE(runners_[0]->HasTaskToRunImmediately()); EXPECT_TRUE(run_order.empty()); // The task doesn't run before the delay has completed. - test_task_runner_->RunForPeriod(base::TimeDelta::FromMilliseconds(9)); + test_task_runner_->FastForwardBy(base::TimeDelta::FromMilliseconds(9)); EXPECT_TRUE(run_order.empty()); // After the delay has completed, the task runs normally. - test_task_runner_->RunForPeriod(base::TimeDelta::FromMilliseconds(1)); + test_task_runner_->FastForwardBy(base::TimeDelta::FromMilliseconds(1)); EXPECT_THAT(run_order, ElementsAre(1)); EXPECT_FALSE(runners_[0]->HasTaskToRunImmediately()); } -bool MessageLoopTaskCounter(size_t* count) { - *count = *count + 1; - return true; -} - TEST_F(TaskQueueManagerTest, DelayedTaskExecutedInOneMessageLoopTask) { CreateTaskQueues(1u); - base::TimeDelta delay(base::TimeDelta::FromMilliseconds(10)); - runners_[0]->PostDelayedTask(FROM_HERE, base::BindOnce(&NopTask), delay); - - size_t task_count = 0; - test_task_runner_->RunTasksWhile( - base::BindRepeating(&MessageLoopTaskCounter, &task_count)); - EXPECT_EQ(1u, task_count); + runners_[0]->PostDelayedTask(FROM_HERE, base::BindOnce(&NopTask), + base::TimeDelta::FromMilliseconds(10)); + base::RunLoop().RunUntilIdle(); + EXPECT_EQ(1u, test_task_runner_->GetPendingTaskCount()); + test_task_runner_->FastForwardUntilNoTasksRemain(); + EXPECT_EQ(0u, test_task_runner_->GetPendingTaskCount()); } TEST_F(TaskQueueManagerTest, DelayedTaskPosting_MultipleTasks_DecendingOrder) { @@ -465,19 +473,19 @@ TEST_F(TaskQueueManagerTest, DelayedTaskPosting_MultipleTasks_DecendingOrder) { base::TimeDelta::FromMilliseconds(5)); EXPECT_EQ(base::TimeDelta::FromMilliseconds(5), - test_task_runner_->DelayToNextTaskTime()); + test_task_runner_->NextPendingTaskDelay()); - test_task_runner_->RunForPeriod(base::TimeDelta::FromMilliseconds(5)); + test_task_runner_->FastForwardBy(base::TimeDelta::FromMilliseconds(5)); EXPECT_THAT(run_order, ElementsAre(3)); EXPECT_EQ(base::TimeDelta::FromMilliseconds(3), - test_task_runner_->DelayToNextTaskTime()); + test_task_runner_->NextPendingTaskDelay()); - test_task_runner_->RunForPeriod(base::TimeDelta::FromMilliseconds(3)); + test_task_runner_->FastForwardBy(base::TimeDelta::FromMilliseconds(3)); EXPECT_THAT(run_order, ElementsAre(3, 2)); EXPECT_EQ(base::TimeDelta::FromMilliseconds(2), - test_task_runner_->DelayToNextTaskTime()); + test_task_runner_->NextPendingTaskDelay()); - test_task_runner_->RunForPeriod(base::TimeDelta::FromMilliseconds(2)); + test_task_runner_->FastForwardBy(base::TimeDelta::FromMilliseconds(2)); EXPECT_THAT(run_order, ElementsAre(3, 2, 1)); } @@ -498,19 +506,19 @@ TEST_F(TaskQueueManagerTest, DelayedTaskPosting_MultipleTasks_AscendingOrder) { base::TimeDelta::FromMilliseconds(10)); EXPECT_EQ(base::TimeDelta::FromMilliseconds(1), - test_task_runner_->DelayToNextTaskTime()); + test_task_runner_->NextPendingTaskDelay()); - test_task_runner_->RunForPeriod(base::TimeDelta::FromMilliseconds(1)); + test_task_runner_->FastForwardBy(base::TimeDelta::FromMilliseconds(1)); EXPECT_THAT(run_order, ElementsAre(1)); EXPECT_EQ(base::TimeDelta::FromMilliseconds(4), - test_task_runner_->DelayToNextTaskTime()); + test_task_runner_->NextPendingTaskDelay()); - test_task_runner_->RunForPeriod(base::TimeDelta::FromMilliseconds(4)); + test_task_runner_->FastForwardBy(base::TimeDelta::FromMilliseconds(4)); EXPECT_THAT(run_order, ElementsAre(1, 2)); EXPECT_EQ(base::TimeDelta::FromMilliseconds(5), - test_task_runner_->DelayToNextTaskTime()); + test_task_runner_->NextPendingTaskDelay()); - test_task_runner_->RunForPeriod(base::TimeDelta::FromMilliseconds(5)); + test_task_runner_->FastForwardBy(base::TimeDelta::FromMilliseconds(5)); EXPECT_THAT(run_order, ElementsAre(1, 2, 3)); } @@ -526,7 +534,7 @@ TEST_F(TaskQueueManagerTest, PostDelayedTask_SharesUnderlyingDelayedTasks) { runners_[0]->PostDelayedTask(FROM_HERE, base::BindOnce(&TestTask, 3, &run_order), delay); - EXPECT_EQ(1u, test_task_runner_->NumPendingTasks()); + EXPECT_EQ(1u, test_task_runner_->GetPendingTaskCount()); } class TestObject { @@ -566,15 +574,15 @@ TEST_F(TaskQueueManagerTest, InsertAndRemoveFence) { // Posting a task when pumping is disabled doesn't result in work getting // posted. runners_[0]->PostTask(FROM_HERE, base::BindOnce(&TestTask, 1, &run_order)); - EXPECT_FALSE(test_task_runner_->HasPendingTasks()); + EXPECT_FALSE(test_task_runner_->HasPendingTask()); // However polling still works. EXPECT_TRUE(runners_[0]->HasTaskToRunImmediately()); // After removing the fence the task runs normally. runners_[0]->RemoveFence(); - EXPECT_TRUE(test_task_runner_->HasPendingTasks()); - test_task_runner_->RunUntilIdle(); + EXPECT_TRUE(test_task_runner_->HasPendingTask()); + base::RunLoop().RunUntilIdle(); EXPECT_THAT(run_order, ElementsAre(1)); } @@ -589,7 +597,7 @@ TEST_F(TaskQueueManagerTest, RemovingFenceForDisabledQueueDoesNotPostDoWork) { runners_[0]->PostTask(FROM_HERE, base::BindOnce(&TestTask, 1, &run_order)); runners_[0]->RemoveFence(); - EXPECT_FALSE(test_task_runner_->HasPendingTasks()); + EXPECT_FALSE(test_task_runner_->HasPendingTask()); } TEST_F(TaskQueueManagerTest, EnablingFencedQueueDoesNotPostDoWork) { @@ -603,7 +611,7 @@ TEST_F(TaskQueueManagerTest, EnablingFencedQueueDoesNotPostDoWork) { runners_[0]->PostTask(FROM_HERE, base::BindOnce(&TestTask, 1, &run_order)); voter->SetQueueEnabled(true); - EXPECT_FALSE(test_task_runner_->HasPendingTasks()); + EXPECT_FALSE(test_task_runner_->HasPendingTask()); } TEST_F(TaskQueueManagerTest, DenyRunning_BeforePosting) { @@ -614,13 +622,13 @@ TEST_F(TaskQueueManagerTest, DenyRunning_BeforePosting) { runners_[0]->CreateQueueEnabledVoter(); voter->SetQueueEnabled(false); runners_[0]->PostTask(FROM_HERE, base::BindOnce(&TestTask, 1, &run_order)); - EXPECT_FALSE(test_task_runner_->HasPendingTasks()); + EXPECT_FALSE(test_task_runner_->HasPendingTask()); - test_task_runner_->RunUntilIdle(); + base::RunLoop().RunUntilIdle(); EXPECT_TRUE(run_order.empty()); voter->SetQueueEnabled(true); - test_task_runner_->RunUntilIdle(); + base::RunLoop().RunUntilIdle(); EXPECT_THAT(run_order, ElementsAre(1)); } @@ -631,14 +639,14 @@ TEST_F(TaskQueueManagerTest, DenyRunning_AfterPosting) { runners_[0]->PostTask(FROM_HERE, base::BindOnce(&TestTask, 1, &run_order)); std::unique_ptr<TaskQueue::QueueEnabledVoter> voter = runners_[0]->CreateQueueEnabledVoter(); - EXPECT_TRUE(test_task_runner_->HasPendingTasks()); + EXPECT_TRUE(test_task_runner_->HasPendingTask()); voter->SetQueueEnabled(false); - test_task_runner_->RunUntilIdle(); + base::RunLoop().RunUntilIdle(); EXPECT_TRUE(run_order.empty()); voter->SetQueueEnabled(true); - test_task_runner_->RunUntilIdle(); + base::RunLoop().RunUntilIdle(); EXPECT_THAT(run_order, ElementsAre(1)); } @@ -652,12 +660,12 @@ TEST_F(TaskQueueManagerTest, DenyRunning_AfterRemovingFence) { voter->SetQueueEnabled(false); runners_[0]->PostTask(FROM_HERE, base::BindOnce(&TestTask, 1, &run_order)); - test_task_runner_->RunUntilIdle(); + base::RunLoop().RunUntilIdle(); EXPECT_TRUE(run_order.empty()); runners_[0]->RemoveFence(); voter->SetQueueEnabled(true); - test_task_runner_->RunUntilIdle(); + base::RunLoop().RunUntilIdle(); EXPECT_THAT(run_order, ElementsAre(1)); } @@ -673,13 +681,13 @@ TEST_F(TaskQueueManagerTest, RemovingFenceWithDelayedTask) { base::BindOnce(&TestTask, 1, &run_order), delay); // The task does not run even though it's delay is up. - test_task_runner_->RunForPeriod(base::TimeDelta::FromMilliseconds(10)); + test_task_runner_->FastForwardBy(base::TimeDelta::FromMilliseconds(10)); EXPECT_TRUE(run_order.empty()); // Removing the fence causes the task to run. runners_[0]->RemoveFence(); - EXPECT_TRUE(test_task_runner_->HasPendingTasks()); - test_task_runner_->RunPendingTasks(); + EXPECT_TRUE(test_task_runner_->HasPendingTask()); + RunPendingTasks(); EXPECT_THAT(run_order, ElementsAre(1)); } @@ -700,13 +708,14 @@ TEST_F(TaskQueueManagerTest, RemovingFenceWithMultipleDelayedTasks) { runners_[0]->PostDelayedTask( FROM_HERE, base::BindOnce(&TestTask, 3, &run_order), delay3); - now_src_.Advance(base::TimeDelta::FromMilliseconds(15)); - test_task_runner_->RunUntilIdle(); + test_task_runner_->AdvanceMockTickClock( + base::TimeDelta::FromMilliseconds(15)); + base::RunLoop().RunUntilIdle(); EXPECT_TRUE(run_order.empty()); // Removing the fence causes the ready tasks to run. runners_[0]->RemoveFence(); - test_task_runner_->RunUntilIdle(); + base::RunLoop().RunUntilIdle(); EXPECT_THAT(run_order, ElementsAre(1, 2)); } @@ -719,7 +728,7 @@ TEST_F(TaskQueueManagerTest, InsertFencePreventsDelayedTasksFromRunning) { runners_[0]->PostDelayedTask(FROM_HERE, base::BindOnce(&TestTask, 1, &run_order), delay); - test_task_runner_->RunForPeriod(base::TimeDelta::FromMilliseconds(10)); + test_task_runner_->FastForwardBy(base::TimeDelta::FromMilliseconds(10)); EXPECT_TRUE(run_order.empty()); } @@ -732,13 +741,13 @@ TEST_F(TaskQueueManagerTest, MultipleFences) { runners_[0]->InsertFence(TaskQueue::InsertFencePosition::kNow); runners_[0]->PostTask(FROM_HERE, base::BindOnce(&TestTask, 3, &run_order)); - test_task_runner_->RunUntilIdle(); + base::RunLoop().RunUntilIdle(); EXPECT_THAT(run_order, ElementsAre(1, 2)); runners_[0]->InsertFence(TaskQueue::InsertFencePosition::kNow); // Subsequent tasks should be blocked. runners_[0]->PostTask(FROM_HERE, base::BindOnce(&TestTask, 4, &run_order)); - test_task_runner_->RunUntilIdle(); + base::RunLoop().RunUntilIdle(); EXPECT_THAT(run_order, ElementsAre(1, 2, 3)); } @@ -751,7 +760,7 @@ TEST_F(TaskQueueManagerTest, InsertFenceThenImmediatlyRemoveDoesNotBlock) { runners_[0]->PostTask(FROM_HERE, base::BindOnce(&TestTask, 1, &run_order)); runners_[0]->PostTask(FROM_HERE, base::BindOnce(&TestTask, 2, &run_order)); - test_task_runner_->RunUntilIdle(); + base::RunLoop().RunUntilIdle(); EXPECT_THAT(run_order, ElementsAre(1, 2)); } @@ -764,7 +773,7 @@ TEST_F(TaskQueueManagerTest, InsertFencePostThenRemoveDoesNotBlock) { runners_[0]->PostTask(FROM_HERE, base::BindOnce(&TestTask, 2, &run_order)); runners_[0]->RemoveFence(); - test_task_runner_->RunUntilIdle(); + base::RunLoop().RunUntilIdle(); EXPECT_THAT(run_order, ElementsAre(1, 2)); } @@ -776,7 +785,8 @@ TEST_F(TaskQueueManagerTest, MultipleFencesWithInitiallyEmptyQueue) { runners_[0]->PostTask(FROM_HERE, base::BindOnce(&TestTask, 1, &run_order)); runners_[0]->InsertFence(TaskQueue::InsertFencePosition::kNow); runners_[0]->PostTask(FROM_HERE, base::BindOnce(&TestTask, 2, &run_order)); - test_task_runner_->RunUntilIdle(); + + base::RunLoop().RunUntilIdle(); EXPECT_THAT(run_order, ElementsAre(1)); } @@ -794,7 +804,7 @@ TEST_F(TaskQueueManagerTest, BlockedByFence) { runners_[0]->InsertFence(TaskQueue::InsertFencePosition::kNow); EXPECT_FALSE(runners_[0]->BlockedByFence()); - test_task_runner_->RunUntilIdle(); + base::RunLoop().RunUntilIdle(); EXPECT_TRUE(runners_[0]->BlockedByFence()); runners_[0]->RemoveFence(); @@ -816,7 +826,7 @@ TEST_F(TaskQueueManagerTest, BlockedByFence_BothTypesOfFence) { namespace { void RecordTimeTask(std::vector<base::TimeTicks>* run_times, - base::SimpleTestTickClock* clock) { + const base::TickClock* clock) { run_times->push_back(clock->NowTicks()); } @@ -824,7 +834,7 @@ void RecordTimeAndQueueTask( std::vector<std::pair<scoped_refptr<TestTaskQueue>, base::TimeTicks>>* run_times, scoped_refptr<TestTaskQueue> task_queue, - base::SimpleTestTickClock* clock) { + const base::TickClock* clock) { run_times->emplace_back(task_queue, clock->NowTicks()); } @@ -832,52 +842,51 @@ void RecordTimeAndQueueTask( TEST_F(TaskQueueManagerTest, DelayedFence_DelayedTasks) { CreateTaskQueues(1u); - test_task_runner_->SetAutoAdvanceNowToPendingTasks(true); std::vector<base::TimeTicks> run_times; runners_[0]->PostDelayedTask( - FROM_HERE, base::BindOnce(&RecordTimeTask, &run_times, &now_src_), + FROM_HERE, base::BindOnce(&RecordTimeTask, &run_times, GetTickClock()), base::TimeDelta::FromMilliseconds(100)); runners_[0]->PostDelayedTask( - FROM_HERE, base::BindOnce(&RecordTimeTask, &run_times, &now_src_), + FROM_HERE, base::BindOnce(&RecordTimeTask, &run_times, GetTickClock()), base::TimeDelta::FromMilliseconds(200)); runners_[0]->PostDelayedTask( - FROM_HERE, base::BindOnce(&RecordTimeTask, &run_times, &now_src_), + FROM_HERE, base::BindOnce(&RecordTimeTask, &run_times, GetTickClock()), base::TimeDelta::FromMilliseconds(300)); - runners_[0]->InsertFenceAt(now_src_.NowTicks() + + runners_[0]->InsertFenceAt(GetTickClock()->NowTicks() + base::TimeDelta::FromMilliseconds(250)); EXPECT_FALSE(runners_[0]->HasActiveFence()); - test_task_runner_->RunUntilIdle(); + test_task_runner_->FastForwardUntilNoTasksRemain(); EXPECT_TRUE(runners_[0]->HasActiveFence()); EXPECT_THAT( run_times, - ElementsAre(base::TimeTicks() + base::TimeDelta::FromMilliseconds(101), - base::TimeTicks() + base::TimeDelta::FromMilliseconds(201))); + ElementsAre(start_time_ + base::TimeDelta::FromMilliseconds(100), + start_time_ + base::TimeDelta::FromMilliseconds(200))); run_times.clear(); runners_[0]->RemoveFence(); - test_task_runner_->RunUntilIdle(); + + test_task_runner_->FastForwardUntilNoTasksRemain(); EXPECT_FALSE(runners_[0]->HasActiveFence()); - EXPECT_THAT(run_times, ElementsAre(base::TimeTicks() + - base::TimeDelta::FromMilliseconds(301))); + EXPECT_THAT(run_times, ElementsAre(start_time_ + + base::TimeDelta::FromMilliseconds(300))); } TEST_F(TaskQueueManagerTest, DelayedFence_ImmediateTasks) { CreateTaskQueues(1u); - test_task_runner_->SetAutoAdvanceNowToPendingTasks(true); std::vector<base::TimeTicks> run_times; - runners_[0]->InsertFenceAt(now_src_.NowTicks() + + runners_[0]->InsertFenceAt(GetTickClock()->NowTicks() + base::TimeDelta::FromMilliseconds(250)); for (int i = 0; i < 5; ++i) { runners_[0]->PostTask( - FROM_HERE, base::BindOnce(&RecordTimeTask, &run_times, &now_src_)); - test_task_runner_->RunForPeriod(base::TimeDelta::FromMilliseconds(100)); + FROM_HERE, base::BindOnce(&RecordTimeTask, &run_times, GetTickClock())); + test_task_runner_->FastForwardBy(base::TimeDelta::FromMilliseconds(100)); if (i < 2) { EXPECT_FALSE(runners_[0]->HasActiveFence()); } else { @@ -887,33 +896,32 @@ TEST_F(TaskQueueManagerTest, DelayedFence_ImmediateTasks) { EXPECT_THAT( run_times, - ElementsAre(base::TimeTicks() + base::TimeDelta::FromMilliseconds(1), - base::TimeTicks() + base::TimeDelta::FromMilliseconds(101), - base::TimeTicks() + base::TimeDelta::FromMilliseconds(201))); + ElementsAre(start_time_, + start_time_ + base::TimeDelta::FromMilliseconds(100), + start_time_ + base::TimeDelta::FromMilliseconds(200))); run_times.clear(); runners_[0]->RemoveFence(); - test_task_runner_->RunUntilIdle(); + test_task_runner_->FastForwardUntilNoTasksRemain(); EXPECT_THAT( run_times, - ElementsAre(base::TimeTicks() + base::TimeDelta::FromMilliseconds(501), - base::TimeTicks() + base::TimeDelta::FromMilliseconds(501))); + ElementsAre(start_time_ + base::TimeDelta::FromMilliseconds(500), + start_time_ + base::TimeDelta::FromMilliseconds(500))); } TEST_F(TaskQueueManagerTest, DelayedFence_RemovedFenceDoesNotActivate) { CreateTaskQueues(1u); - test_task_runner_->SetAutoAdvanceNowToPendingTasks(true); std::vector<base::TimeTicks> run_times; - runners_[0]->InsertFenceAt(now_src_.NowTicks() + + runners_[0]->InsertFenceAt(GetTickClock()->NowTicks() + base::TimeDelta::FromMilliseconds(250)); for (int i = 0; i < 3; ++i) { runners_[0]->PostTask( - FROM_HERE, base::BindOnce(&RecordTimeTask, &run_times, &now_src_)); + FROM_HERE, base::BindOnce(&RecordTimeTask, &run_times, GetTickClock())); EXPECT_FALSE(runners_[0]->HasActiveFence()); - test_task_runner_->RunForPeriod(base::TimeDelta::FromMilliseconds(100)); + test_task_runner_->FastForwardBy(base::TimeDelta::FromMilliseconds(100)); } EXPECT_TRUE(runners_[0]->HasActiveFence()); @@ -921,18 +929,18 @@ TEST_F(TaskQueueManagerTest, DelayedFence_RemovedFenceDoesNotActivate) { for (int i = 0; i < 2; ++i) { runners_[0]->PostTask( - FROM_HERE, base::BindOnce(&RecordTimeTask, &run_times, &now_src_)); - test_task_runner_->RunForPeriod(base::TimeDelta::FromMilliseconds(100)); + FROM_HERE, base::BindOnce(&RecordTimeTask, &run_times, GetTickClock())); + test_task_runner_->FastForwardBy(base::TimeDelta::FromMilliseconds(100)); EXPECT_FALSE(runners_[0]->HasActiveFence()); } EXPECT_THAT( run_times, - ElementsAre(base::TimeTicks() + base::TimeDelta::FromMilliseconds(1), - base::TimeTicks() + base::TimeDelta::FromMilliseconds(101), - base::TimeTicks() + base::TimeDelta::FromMilliseconds(201), - base::TimeTicks() + base::TimeDelta::FromMilliseconds(301), - base::TimeTicks() + base::TimeDelta::FromMilliseconds(401))); + ElementsAre(start_time_, + start_time_ + base::TimeDelta::FromMilliseconds(100), + start_time_ + base::TimeDelta::FromMilliseconds(200), + start_time_ + base::TimeDelta::FromMilliseconds(300), + start_time_ + base::TimeDelta::FromMilliseconds(400))); } TEST_F(TaskQueueManagerTest, DelayedFence_TakeIncomingImmediateQueue) { @@ -940,7 +948,6 @@ TEST_F(TaskQueueManagerTest, DelayedFence_TakeIncomingImmediateQueue) { // is swapped with an immediate incoming queue and a delayed fence // is activated, forcing a different queue to become active. CreateTaskQueues(2u); - test_task_runner_->SetAutoAdvanceNowToPendingTasks(true); scoped_refptr<TestTaskQueue> queue1 = runners_[0]; scoped_refptr<TestTaskQueue> queue2 = runners_[1]; @@ -949,35 +956,39 @@ TEST_F(TaskQueueManagerTest, DelayedFence_TakeIncomingImmediateQueue) { run_times; // Fence ensures that the task posted after advancing time is blocked. - queue1->InsertFenceAt(now_src_.NowTicks() + + queue1->InsertFenceAt(GetTickClock()->NowTicks() + base::TimeDelta::FromMilliseconds(250)); // This task should not be blocked and should run immediately after // advancing time at 301ms. - queue1->PostTask(FROM_HERE, base::BindOnce(&RecordTimeAndQueueTask, - &run_times, queue1, &now_src_)); + queue1->PostTask(FROM_HERE, + base::BindOnce(&RecordTimeAndQueueTask, &run_times, queue1, + GetTickClock())); // Force reload of immediate work queue. In real life the same effect can be // achieved with cross-thread posting. queue1->GetTaskQueueImpl()->ReloadImmediateWorkQueueIfEmpty(); - now_src_.Advance(base::TimeDelta::FromMilliseconds(300)); + test_task_runner_->AdvanceMockTickClock( + base::TimeDelta::FromMilliseconds(300)); // This task should be blocked. - queue1->PostTask(FROM_HERE, base::BindOnce(&RecordTimeAndQueueTask, - &run_times, queue1, &now_src_)); + queue1->PostTask(FROM_HERE, + base::BindOnce(&RecordTimeAndQueueTask, &run_times, queue1, + GetTickClock())); // This task on a different runner should run as expected. - queue2->PostTask(FROM_HERE, base::BindOnce(&RecordTimeAndQueueTask, - &run_times, queue2, &now_src_)); + queue2->PostTask(FROM_HERE, + base::BindOnce(&RecordTimeAndQueueTask, &run_times, queue2, + GetTickClock())); - test_task_runner_->RunUntilIdle(); + test_task_runner_->FastForwardUntilNoTasksRemain(); EXPECT_THAT( run_times, ElementsAre( - std::make_pair(queue1, base::TimeTicks() + - base::TimeDelta::FromMilliseconds(301)), - std::make_pair(queue2, base::TimeTicks() + - base::TimeDelta::FromMilliseconds(301)))); + std::make_pair(queue1, + start_time_ + base::TimeDelta::FromMilliseconds(300)), + std::make_pair( + queue2, start_time_ + base::TimeDelta::FromMilliseconds(300)))); } namespace { @@ -1001,7 +1012,7 @@ TEST_F(TaskQueueManagerTest, ReentrantPosting) { runners_[0]->PostTask( FROM_HERE, BindOnce(&ReentrantTestTask, runners_[0], 3, &run_order)); - test_task_runner_->RunUntilIdle(); + base::RunLoop().RunUntilIdle(); EXPECT_THAT(run_order, ElementsAre(3, 2, 1)); } @@ -1013,7 +1024,7 @@ TEST_F(TaskQueueManagerTest, NoTasksAfterShutdown) { manager_.reset(); runners_[0]->PostTask(FROM_HERE, base::BindOnce(&TestTask, 1, &run_order)); - test_task_runner_->RunUntilIdle(); + base::RunLoop().RunUntilIdle(); EXPECT_TRUE(run_order.empty()); } @@ -1051,10 +1062,8 @@ TEST_F(TaskQueueManagerTest, DoWorkCantPostItselfMultipleTimes) { runners_[0]->PostTask( FROM_HERE, base::BindOnce(&RePostingTestTask, runners_[0], &run_count)); - test_task_runner_->RunPendingTasks(); - // NOTE without the executing_task_ check in MaybeScheduleDoWork there - // will be two tasks here. - EXPECT_EQ(1u, test_task_runner_->NumPendingTasks()); + RunPendingTasks(); + EXPECT_EQ(1u, test_task_runner_->GetPendingTaskCount()); EXPECT_EQ(1, run_count); } @@ -1092,13 +1101,13 @@ TEST_F(TaskQueueManagerTest, WorkBatching) { // Running one task in the host message loop should cause two posted tasks to // get executed. - EXPECT_EQ(test_task_runner_->NumPendingTasks(), 1u); - test_task_runner_->RunPendingTasks(); + EXPECT_EQ(1u, test_task_runner_->GetPendingTaskCount()); + RunPendingTasks(); EXPECT_THAT(run_order, ElementsAre(1, 2)); // The second task runs the remaining two posted tasks. - EXPECT_EQ(test_task_runner_->NumPendingTasks(), 1u); - test_task_runner_->RunPendingTasks(); + EXPECT_EQ(1u, test_task_runner_->GetPendingTaskCount()); + RunPendingTasks(); EXPECT_THAT(run_order, ElementsAre(1, 2, 3, 4)); } @@ -1136,7 +1145,6 @@ TEST_F(TaskQueueManagerTestWithMessageLoop, TaskObserverRemoving) { EXPECT_CALL(observer, WillProcessTask(_)).Times(0); EXPECT_CALL(observer, DidProcessTask(_)).Times(0); - base::RunLoop().RunUntilIdle(); } @@ -1219,7 +1227,8 @@ TEST_F(TaskQueueManagerTest, ThreadCheckAfterTermination) { TEST_F(TaskQueueManagerTest, TimeDomain_NextScheduledRunTime) { CreateTaskQueues(2u); - now_src_.Advance(base::TimeDelta::FromMicroseconds(10000)); + test_task_runner_->AdvanceMockTickClock( + base::TimeDelta::FromMicroseconds(10000)); // With no delayed tasks. base::TimeTicks run_time; @@ -1234,32 +1243,32 @@ TEST_F(TaskQueueManagerTest, TimeDomain_NextScheduledRunTime) { runners_[0]->PostDelayedTask(FROM_HERE, base::BindOnce(&NopTask), expected_delay); EXPECT_TRUE(manager_->GetRealTimeDomain()->NextScheduledRunTime(&run_time)); - EXPECT_EQ(now_src_.NowTicks() + expected_delay, run_time); + EXPECT_EQ(GetTickClock()->NowTicks() + expected_delay, run_time); // With another delayed task in the same queue with a longer delay. runners_[0]->PostDelayedTask(FROM_HERE, base::BindOnce(&NopTask), base::TimeDelta::FromMilliseconds(100)); EXPECT_TRUE(manager_->GetRealTimeDomain()->NextScheduledRunTime(&run_time)); - EXPECT_EQ(now_src_.NowTicks() + expected_delay, run_time); + EXPECT_EQ(GetTickClock()->NowTicks() + expected_delay, run_time); // With another delayed task in the same queue with a shorter delay. expected_delay = base::TimeDelta::FromMilliseconds(20); runners_[0]->PostDelayedTask(FROM_HERE, base::BindOnce(&NopTask), expected_delay); EXPECT_TRUE(manager_->GetRealTimeDomain()->NextScheduledRunTime(&run_time)); - EXPECT_EQ(now_src_.NowTicks() + expected_delay, run_time); + EXPECT_EQ(GetTickClock()->NowTicks() + expected_delay, run_time); // With another delayed task in a different queue with a shorter delay. expected_delay = base::TimeDelta::FromMilliseconds(10); runners_[1]->PostDelayedTask(FROM_HERE, base::BindOnce(&NopTask), expected_delay); EXPECT_TRUE(manager_->GetRealTimeDomain()->NextScheduledRunTime(&run_time)); - EXPECT_EQ(now_src_.NowTicks() + expected_delay, run_time); + EXPECT_EQ(GetTickClock()->NowTicks() + expected_delay, run_time); // Test it updates as time progresses - now_src_.Advance(expected_delay); + test_task_runner_->AdvanceMockTickClock(expected_delay); EXPECT_TRUE(manager_->GetRealTimeDomain()->NextScheduledRunTime(&run_time)); - EXPECT_EQ(now_src_.NowTicks(), run_time); + EXPECT_EQ(GetTickClock()->NowTicks(), run_time); } TEST_F(TaskQueueManagerTest, TimeDomain_NextScheduledRunTime_MultipleQueues) { @@ -1275,7 +1284,7 @@ TEST_F(TaskQueueManagerTest, TimeDomain_NextScheduledRunTime_MultipleQueues) { base::TimeTicks run_time; EXPECT_TRUE(manager_->GetRealTimeDomain()->NextScheduledRunTime(&run_time)); - EXPECT_EQ(now_src_.NowTicks() + delay2, run_time); + EXPECT_EQ(GetTickClock()->NowTicks() + delay2, run_time); } TEST_F(TaskQueueManagerTest, DeleteTaskQueueManagerInsideATask) { @@ -1288,7 +1297,7 @@ TEST_F(TaskQueueManagerTest, DeleteTaskQueueManagerInsideATask) { // This should not crash, assuming DoWork detects the TaskQueueManager has // been deleted. - test_task_runner_->RunUntilIdle(); + base::RunLoop().RunUntilIdle(); } TEST_F(TaskQueueManagerTest, GetAndClearSystemIsQuiescentBit) { @@ -1303,22 +1312,22 @@ TEST_F(TaskQueueManagerTest, GetAndClearSystemIsQuiescentBit) { EXPECT_TRUE(manager_->GetAndClearSystemIsQuiescentBit()); queue0->PostTask(FROM_HERE, base::BindOnce(&NopTask)); - test_task_runner_->RunUntilIdle(); + base::RunLoop().RunUntilIdle(); EXPECT_FALSE(manager_->GetAndClearSystemIsQuiescentBit()); EXPECT_TRUE(manager_->GetAndClearSystemIsQuiescentBit()); queue1->PostTask(FROM_HERE, base::BindOnce(&NopTask)); - test_task_runner_->RunUntilIdle(); + base::RunLoop().RunUntilIdle(); EXPECT_FALSE(manager_->GetAndClearSystemIsQuiescentBit()); EXPECT_TRUE(manager_->GetAndClearSystemIsQuiescentBit()); queue2->PostTask(FROM_HERE, base::BindOnce(&NopTask)); - test_task_runner_->RunUntilIdle(); + base::RunLoop().RunUntilIdle(); EXPECT_TRUE(manager_->GetAndClearSystemIsQuiescentBit()); queue0->PostTask(FROM_HERE, base::BindOnce(&NopTask)); queue1->PostTask(FROM_HERE, base::BindOnce(&NopTask)); - test_task_runner_->RunUntilIdle(); + base::RunLoop().RunUntilIdle(); EXPECT_FALSE(manager_->GetAndClearSystemIsQuiescentBit()); EXPECT_TRUE(manager_->GetAndClearSystemIsQuiescentBit()); } @@ -1330,7 +1339,7 @@ TEST_F(TaskQueueManagerTest, HasPendingImmediateWork) { runners_[0]->PostTask(FROM_HERE, base::BindOnce(NullTask)); EXPECT_TRUE(runners_[0]->HasTaskToRunImmediately()); - test_task_runner_->RunUntilIdle(); + base::RunLoop().RunUntilIdle(); EXPECT_FALSE(runners_[0]->HasTaskToRunImmediately()); } @@ -1343,26 +1352,28 @@ TEST_F(TaskQueueManagerTest, HasPendingImmediateWork_DelayedTasks) { EXPECT_FALSE(runners_[0]->HasTaskToRunImmediately()); // Move time forwards until just before the delayed task should run. - now_src_.Advance(base::TimeDelta::FromMilliseconds(10)); - LazyNow lazy_now_1(&now_src_); + test_task_runner_->AdvanceMockTickClock( + base::TimeDelta::FromMilliseconds(10)); + LazyNow lazy_now_1(GetTickClock()); manager_->WakeUpReadyDelayedQueues(&lazy_now_1); EXPECT_FALSE(runners_[0]->HasTaskToRunImmediately()); // Force the delayed task onto the work queue. - now_src_.Advance(base::TimeDelta::FromMilliseconds(2)); - LazyNow lazy_now_2(&now_src_); + test_task_runner_->AdvanceMockTickClock(base::TimeDelta::FromMilliseconds(2)); + LazyNow lazy_now_2(GetTickClock()); manager_->WakeUpReadyDelayedQueues(&lazy_now_2); EXPECT_TRUE(runners_[0]->HasTaskToRunImmediately()); - test_task_runner_->RunUntilIdle(); + base::RunLoop().RunUntilIdle(); EXPECT_FALSE(runners_[0]->HasTaskToRunImmediately()); } -void ExpensiveTestTask(int value, - base::SimpleTestTickClock* clock, - std::vector<EnqueueOrder>* out_result) { +void ExpensiveTestTask( + int value, + scoped_refptr<base::TestMockTimeTaskRunner> test_task_runner, + std::vector<EnqueueOrder>* out_result) { out_result->push_back(value); - clock->Advance(base::TimeDelta::FromMilliseconds(1)); + test_task_runner->FastForwardBy(base::TimeDelta::FromMilliseconds(1)); } TEST_F(TaskQueueManagerTest, ImmediateAndDelayedTaskInterleaving) { @@ -1372,19 +1383,20 @@ TEST_F(TaskQueueManagerTest, ImmediateAndDelayedTaskInterleaving) { base::TimeDelta delay = base::TimeDelta::FromMilliseconds(10); for (int i = 10; i < 19; i++) { runners_[0]->PostDelayedTask( - FROM_HERE, base::BindOnce(&ExpensiveTestTask, i, &now_src_, &run_order), + FROM_HERE, + base::BindOnce(&ExpensiveTestTask, i, test_task_runner_, &run_order), delay); } - test_task_runner_->RunForPeriod(delay); + test_task_runner_->FastForwardBy(base::TimeDelta::FromMilliseconds(10)); for (int i = 0; i < 9; i++) { - runners_[0]->PostTask(FROM_HERE, base::BindOnce(&ExpensiveTestTask, i, - &now_src_, &run_order)); + runners_[0]->PostTask( + FROM_HERE, + base::BindOnce(&ExpensiveTestTask, i, test_task_runner_, &run_order)); } - test_task_runner_->SetAutoAdvanceNowToPendingTasks(true); - test_task_runner_->RunUntilIdle(); + test_task_runner_->FastForwardUntilNoTasksRemain(); // Delayed tasks are not allowed to starve out immediate work which is why // some of the immediate tasks run out of order. @@ -1404,8 +1416,8 @@ TEST_F(TaskQueueManagerTest, runners_[0]->PostDelayedTask(FROM_HERE, base::BindOnce(&TestTask, 1, &run_order), delay); - now_src_.Advance(delay * 2); - test_task_runner_->RunUntilIdle(); + test_task_runner_->AdvanceMockTickClock(delay * 2); + base::RunLoop().RunUntilIdle(); EXPECT_THAT(run_order, ElementsAre(2, 3, 1)); } @@ -1421,8 +1433,8 @@ TEST_F(TaskQueueManagerTest, runners_[0]->PostDelayedTask(FROM_HERE, base::BindOnce(&TestTask, 1, &run_order), delay); - now_src_.Advance(delay * 2); - test_task_runner_->RunUntilIdle(); + test_task_runner_->AdvanceMockTickClock(delay * 2); + base::RunLoop().RunUntilIdle(); EXPECT_THAT(run_order, ElementsAre(2, 3, 1)); } @@ -1438,8 +1450,8 @@ TEST_F(TaskQueueManagerTest, DelayedTaskDoesNotSkipAHeadOfShorterDelayedTask) { runners_[1]->PostDelayedTask( FROM_HERE, base::BindOnce(&TestTask, 2, &run_order), delay2); - now_src_.Advance(delay1 * 2); - test_task_runner_->RunUntilIdle(); + test_task_runner_->AdvanceMockTickClock(delay1 * 2); + base::RunLoop().RunUntilIdle(); EXPECT_THAT(run_order, ElementsAre(2, 1)); } @@ -1510,7 +1522,7 @@ TEST_F(TaskQueueManagerTest, SequenceNumSetWhenTaskIsPosted) { base::TimeDelta::FromMilliseconds(10)); runners_[0]->PostTask(FROM_HERE, base::BindOnce(&TestTask, 4, &run_order)); - test_task_runner_->RunForPeriod(base::TimeDelta::FromMilliseconds(40)); + test_task_runner_->FastForwardBy(base::TimeDelta::FromMilliseconds(40)); ASSERT_THAT(run_order, ElementsAre(4, 3, 2, 1)); // The sequence numbers are a one-based monotonically incrememting counter @@ -1536,7 +1548,7 @@ TEST_F(TaskQueueManagerTest, NewTaskQueues) { queue1->PostTask(FROM_HERE, base::BindOnce(&TestTask, 1, &run_order)); queue2->PostTask(FROM_HERE, base::BindOnce(&TestTask, 2, &run_order)); queue3->PostTask(FROM_HERE, base::BindOnce(&TestTask, 3, &run_order)); - test_task_runner_->RunUntilIdle(); + base::RunLoop().RunUntilIdle(); EXPECT_THAT(run_order, ElementsAre(1, 2, 3)); } @@ -1558,7 +1570,7 @@ TEST_F(TaskQueueManagerTest, ShutdownTaskQueue) { queue3->PostTask(FROM_HERE, base::BindOnce(&TestTask, 3, &run_order)); queue2->ShutdownTaskQueue(); - test_task_runner_->RunUntilIdle(); + base::RunLoop().RunUntilIdle(); EXPECT_THAT(run_order, ElementsAre(1, 3)); } @@ -1579,9 +1591,9 @@ TEST_F(TaskQueueManagerTest, ShutdownTaskQueue_WithDelayedTasks) { base::TimeDelta::FromMilliseconds(30)); runners_[1]->ShutdownTaskQueue(); - test_task_runner_->RunUntilIdle(); + base::RunLoop().RunUntilIdle(); - test_task_runner_->RunForPeriod(base::TimeDelta::FromMilliseconds(40)); + test_task_runner_->FastForwardBy(base::TimeDelta::FromMilliseconds(40)); ASSERT_THAT(run_order, ElementsAre(1, 3)); } @@ -1601,7 +1613,7 @@ TEST_F(TaskQueueManagerTest, ShutdownTaskQueue_InTasks) { runners_[1]->PostTask(FROM_HERE, base::BindOnce(&TestTask, 2, &run_order)); runners_[2]->PostTask(FROM_HERE, base::BindOnce(&TestTask, 3, &run_order)); - test_task_runner_->RunUntilIdle(); + base::RunLoop().RunUntilIdle(); ASSERT_THAT(run_order, ElementsAre(1)); } @@ -1686,14 +1698,14 @@ TEST_F(TaskQueueManagerTest, TimeDomainsAreIndependant) { base::TimeDelta::FromMilliseconds(50)); manager_->MaybeScheduleImmediateWork(FROM_HERE); - test_task_runner_->RunUntilIdle(); + base::RunLoop().RunUntilIdle(); EXPECT_THAT(run_order, ElementsAre(4, 5, 6)); domain_a->AdvanceNowTo(start_time_ticks + base::TimeDelta::FromMilliseconds(50)); manager_->MaybeScheduleImmediateWork(FROM_HERE); - test_task_runner_->RunUntilIdle(); + base::RunLoop().RunUntilIdle(); EXPECT_THAT(run_order, ElementsAre(4, 5, 6, 1, 2, 3)); runners_[0]->ShutdownTaskQueue(); @@ -1729,7 +1741,7 @@ TEST_F(TaskQueueManagerTest, TimeDomainMigration) { domain_a->AdvanceNowTo(start_time_ticks + base::TimeDelta::FromMilliseconds(20)); manager_->MaybeScheduleImmediateWork(FROM_HERE); - test_task_runner_->RunUntilIdle(); + base::RunLoop().RunUntilIdle(); EXPECT_THAT(run_order, ElementsAre(1, 2)); std::unique_ptr<VirtualTimeDomain> domain_b( @@ -1741,7 +1753,7 @@ TEST_F(TaskQueueManagerTest, TimeDomainMigration) { base::TimeDelta::FromMilliseconds(50)); manager_->MaybeScheduleImmediateWork(FROM_HERE); - test_task_runner_->RunUntilIdle(); + base::RunLoop().RunUntilIdle(); EXPECT_THAT(run_order, ElementsAre(1, 2, 3, 4)); runners_[0]->ShutdownTaskQueue(); @@ -1766,7 +1778,7 @@ TEST_F(TaskQueueManagerTest, TimeDomainMigrationWithIncomingImmediateTasks) { runners_[0]->PostTask(FROM_HERE, base::BindOnce(&TestTask, 1, &run_order)); runners_[0]->SetTimeDomain(domain_b.get()); - test_task_runner_->RunUntilIdle(); + base::RunLoop().RunUntilIdle(); EXPECT_THAT(run_order, ElementsAre(1)); runners_[0]->ShutdownTaskQueue(); @@ -1806,7 +1818,7 @@ TEST_F(TaskQueueManagerTest, base::BindOnce(&TestTask, 4, &run_order), base::TimeDelta::FromMilliseconds(10)); - test_task_runner_->RunForPeriod(base::TimeDelta::FromMilliseconds(40)); + test_task_runner_->FastForwardBy(base::TimeDelta::FromMilliseconds(40)); EXPECT_THAT(run_order, ElementsAre(4, 3, 2, 1)); runners_[0]->ShutdownTaskQueue(); @@ -1976,7 +1988,7 @@ TEST_F(TaskQueueManagerTest, TaskQueueObserver_DelayedWorkWhichCanRunNow) { std::make_unique<RealTimeDomain>(); manager_->RegisterTimeDomain(mock_time_domain.get()); - now_src_.Advance(delay10s); + test_task_runner_->AdvanceMockTickClock(delay10s); EXPECT_CALL(observer, OnQueueNextWakeUpChanged(_, _)); runners_[0]->SetTimeDomain(mock_time_domain.get()); @@ -2013,8 +2025,8 @@ TEST_F(TaskQueueManagerTest, TaskQueueObserver_SweepCanceledDelayedTasks) { OnQueueNextWakeUpChanged(runners_[0].get(), start_time + delay1)) .Times(1); - CancelableTask task1(&now_src_); - CancelableTask task2(&now_src_); + CancelableTask task1(GetTickClock()); + CancelableTask task2(GetTickClock()); std::vector<base::TimeTicks> run_times; runners_[0]->PostDelayedTask( FROM_HERE, @@ -2038,8 +2050,9 @@ TEST_F(TaskQueueManagerTest, TaskQueueObserver_SweepCanceledDelayedTasks) { namespace { void ChromiumRunloopInspectionTask( - scoped_refptr<cc::OrderedSimpleTaskRunner> test_task_runner) { - EXPECT_EQ(1u, test_task_runner->NumPendingTasks()); + scoped_refptr<base::TestMockTimeTaskRunner> test_task_runner) { + // We don't expect more than 1 pending task at any time. + EXPECT_GE(1u, test_task_runner->GetPendingTaskCount()); } } // namespace @@ -2050,14 +2063,13 @@ TEST_F(TaskQueueManagerTest, NumberOfPendingTasksOnChromiumRunLoop) { // will end up with a lot more tasks posted if the delayed tasks were posted // in the reverse order. // TODO(alexclarke): Consider talking to the message pump directly. - test_task_runner_->SetAutoAdvanceNowToPendingTasks(true); for (int i = 1; i < 100; i++) { runners_[0]->PostDelayedTask( FROM_HERE, base::BindOnce(&ChromiumRunloopInspectionTask, test_task_runner_), base::TimeDelta::FromMilliseconds(i)); } - test_task_runner_->RunUntilIdle(); + test_task_runner_->FastForwardUntilNoTasksRemain(); } namespace { @@ -2066,8 +2078,11 @@ class QuadraticTask { public: QuadraticTask(scoped_refptr<TaskQueue> task_queue, base::TimeDelta delay, - base::SimpleTestTickClock* now_src) - : count_(0), task_queue_(task_queue), delay_(delay), now_src_(now_src) {} + scoped_refptr<base::TestMockTimeTaskRunner> test_task_runner) + : count_(0), + task_queue_(task_queue), + delay_(delay), + test_task_runner_(test_task_runner) {} void SetShouldExit(base::RepeatingCallback<bool()> should_exit) { should_exit_ = should_exit; @@ -2083,7 +2098,7 @@ class QuadraticTask { task_queue_->PostDelayedTask( FROM_HERE, base::BindOnce(&QuadraticTask::Run, base::Unretained(this)), delay_); - now_src_->Advance(base::TimeDelta::FromMilliseconds(5)); + test_task_runner_->FastForwardBy(base::TimeDelta::FromMilliseconds(5)); } int Count() const { return count_; } @@ -2093,15 +2108,18 @@ class QuadraticTask { scoped_refptr<TaskQueue> task_queue_; base::TimeDelta delay_; base::RepeatingCallback<bool()> should_exit_; - base::SimpleTestTickClock* now_src_; + scoped_refptr<base::TestMockTimeTaskRunner> test_task_runner_; }; class LinearTask { public: LinearTask(scoped_refptr<TaskQueue> task_queue, base::TimeDelta delay, - base::SimpleTestTickClock* now_src) - : count_(0), task_queue_(task_queue), delay_(delay), now_src_(now_src) {} + scoped_refptr<base::TestMockTimeTaskRunner> test_task_runner) + : count_(0), + task_queue_(task_queue), + delay_(delay), + test_task_runner_(test_task_runner) {} void SetShouldExit(base::RepeatingCallback<bool()> should_exit) { should_exit_ = should_exit; @@ -2114,7 +2132,7 @@ class LinearTask { task_queue_->PostDelayedTask( FROM_HERE, base::BindOnce(&LinearTask::Run, base::Unretained(this)), delay_); - now_src_->Advance(base::TimeDelta::FromMilliseconds(5)); + test_task_runner_->FastForwardBy(base::TimeDelta::FromMilliseconds(5)); } int Count() const { return count_; } @@ -2124,7 +2142,7 @@ class LinearTask { scoped_refptr<TaskQueue> task_queue_; base::TimeDelta delay_; base::RepeatingCallback<bool()> should_exit_; - base::SimpleTestTickClock* now_src_; + scoped_refptr<base::TestMockTimeTaskRunner> test_task_runner_; }; bool ShouldExit(QuadraticTask* quadratic_task, LinearTask* linear_task) { @@ -2138,8 +2156,9 @@ TEST_F(TaskQueueManagerTest, CreateTaskQueues(1u); QuadraticTask quadratic_delayed_task( - runners_[0], base::TimeDelta::FromMilliseconds(10), &now_src_); - LinearTask linear_immediate_task(runners_[0], base::TimeDelta(), &now_src_); + runners_[0], base::TimeDelta::FromMilliseconds(10), test_task_runner_); + LinearTask linear_immediate_task(runners_[0], base::TimeDelta(), + test_task_runner_); base::RepeatingCallback<bool()> should_exit = base::BindRepeating( ShouldExit, &quadratic_delayed_task, &linear_immediate_task); quadratic_delayed_task.SetShouldExit(should_exit); @@ -2148,8 +2167,7 @@ TEST_F(TaskQueueManagerTest, quadratic_delayed_task.Run(); linear_immediate_task.Run(); - test_task_runner_->SetAutoAdvanceNowToPendingTasks(true); - test_task_runner_->RunUntilIdle(); + test_task_runner_->FastForwardUntilNoTasksRemain(); double ratio = static_cast<double>(linear_immediate_task.Count()) / static_cast<double>(quadratic_delayed_task.Count()); @@ -2162,9 +2180,9 @@ TEST_F(TaskQueueManagerTest, ImmediateWorkCanStarveDelayedTasks_SameQueue) { CreateTaskQueues(1u); QuadraticTask quadratic_immediate_task(runners_[0], base::TimeDelta(), - &now_src_); + test_task_runner_); LinearTask linear_delayed_task( - runners_[0], base::TimeDelta::FromMilliseconds(10), &now_src_); + runners_[0], base::TimeDelta::FromMilliseconds(10), test_task_runner_); base::RepeatingCallback<bool()> should_exit = base::BindRepeating( &ShouldExit, &quadratic_immediate_task, &linear_delayed_task); @@ -2174,8 +2192,7 @@ TEST_F(TaskQueueManagerTest, ImmediateWorkCanStarveDelayedTasks_SameQueue) { quadratic_immediate_task.Run(); linear_delayed_task.Run(); - test_task_runner_->SetAutoAdvanceNowToPendingTasks(true); - test_task_runner_->RunUntilIdle(); + test_task_runner_->FastForwardUntilNoTasksRemain(); double ratio = static_cast<double>(linear_delayed_task.Count()) / static_cast<double>(quadratic_immediate_task.Count()); @@ -2191,8 +2208,9 @@ TEST_F(TaskQueueManagerTest, CreateTaskQueues(2u); QuadraticTask quadratic_delayed_task( - runners_[0], base::TimeDelta::FromMilliseconds(10), &now_src_); - LinearTask linear_immediate_task(runners_[1], base::TimeDelta(), &now_src_); + runners_[0], base::TimeDelta::FromMilliseconds(10), test_task_runner_); + LinearTask linear_immediate_task(runners_[1], base::TimeDelta(), + test_task_runner_); base::RepeatingCallback<bool()> should_exit = base::BindRepeating( ShouldExit, &quadratic_delayed_task, &linear_immediate_task); quadratic_delayed_task.SetShouldExit(should_exit); @@ -2201,8 +2219,7 @@ TEST_F(TaskQueueManagerTest, quadratic_delayed_task.Run(); linear_immediate_task.Run(); - test_task_runner_->SetAutoAdvanceNowToPendingTasks(true); - test_task_runner_->RunUntilIdle(); + test_task_runner_->FastForwardUntilNoTasksRemain(); double ratio = static_cast<double>(linear_immediate_task.Count()) / static_cast<double>(quadratic_delayed_task.Count()); @@ -2216,9 +2233,9 @@ TEST_F(TaskQueueManagerTest, CreateTaskQueues(2u); QuadraticTask quadratic_immediate_task(runners_[0], base::TimeDelta(), - &now_src_); + test_task_runner_); LinearTask linear_delayed_task( - runners_[1], base::TimeDelta::FromMilliseconds(10), &now_src_); + runners_[1], base::TimeDelta::FromMilliseconds(10), test_task_runner_); base::RepeatingCallback<bool()> should_exit = base::BindRepeating( &ShouldExit, &quadratic_immediate_task, &linear_delayed_task); @@ -2228,8 +2245,7 @@ TEST_F(TaskQueueManagerTest, quadratic_immediate_task.Run(); linear_delayed_task.Run(); - test_task_runner_->SetAutoAdvanceNowToPendingTasks(true); - test_task_runner_->RunUntilIdle(); + test_task_runner_->FastForwardUntilNoTasksRemain(); double ratio = static_cast<double>(linear_delayed_task.Count()) / static_cast<double>(quadratic_immediate_task.Count()); @@ -2267,7 +2283,7 @@ TEST_F(TaskQueueManagerTest, CurrentlyExecutingTaskQueue_TaskRunning) { queue1->PostTask(FROM_HERE, base::BindOnce(&CurrentlyExecutingTaskQueueTestTask, manager_.get(), &task_sources)); - test_task_runner_->RunUntilIdle(); + base::RunLoop().RunUntilIdle(); EXPECT_THAT(task_sources, ElementsAre(queue0->GetTaskQueueImpl(), queue1->GetTaskQueueImpl())); @@ -2353,10 +2369,10 @@ TEST_F(TaskQueueManagerTest, NoWakeUpsForCanceledDelayedTasks) { base::TimeTicks start_time = manager_->NowTicks(); - CancelableTask task1(&now_src_); - CancelableTask task2(&now_src_); - CancelableTask task3(&now_src_); - CancelableTask task4(&now_src_); + CancelableTask task1(GetTickClock()); + CancelableTask task2(GetTickClock()); + CancelableTask task3(GetTickClock()); + CancelableTask task4(GetTickClock()); base::TimeDelta delay1(base::TimeDelta::FromSeconds(5)); base::TimeDelta delay2(base::TimeDelta::FromSeconds(10)); base::TimeDelta delay3(base::TimeDelta::FromSeconds(15)); @@ -2390,10 +2406,10 @@ TEST_F(TaskQueueManagerTest, NoWakeUpsForCanceledDelayedTasks) { RunUntilManagerIsIdle(base::BindRepeating( [](std::set<base::TimeTicks>* wake_up_times, - base::SimpleTestTickClock* clock) { + const base::TickClock* clock) { wake_up_times->insert(clock->NowTicks()); }, - &wake_up_times, &now_src_)); + &wake_up_times, GetTickClock())); EXPECT_THAT(wake_up_times, ElementsAre(start_time + delay1, start_time + delay4)); @@ -2405,10 +2421,10 @@ TEST_F(TaskQueueManagerTest, NoWakeUpsForCanceledDelayedTasksReversePostOrder) { base::TimeTicks start_time = manager_->NowTicks(); - CancelableTask task1(&now_src_); - CancelableTask task2(&now_src_); - CancelableTask task3(&now_src_); - CancelableTask task4(&now_src_); + CancelableTask task1(GetTickClock()); + CancelableTask task2(GetTickClock()); + CancelableTask task3(GetTickClock()); + CancelableTask task4(GetTickClock()); base::TimeDelta delay1(base::TimeDelta::FromSeconds(5)); base::TimeDelta delay2(base::TimeDelta::FromSeconds(10)); base::TimeDelta delay3(base::TimeDelta::FromSeconds(15)); @@ -2442,10 +2458,10 @@ TEST_F(TaskQueueManagerTest, NoWakeUpsForCanceledDelayedTasksReversePostOrder) { RunUntilManagerIsIdle(base::BindRepeating( [](std::set<base::TimeTicks>* wake_up_times, - base::SimpleTestTickClock* clock) { + const base::TickClock* clock) { wake_up_times->insert(clock->NowTicks()); }, - &wake_up_times, &now_src_)); + &wake_up_times, GetTickClock())); EXPECT_THAT(wake_up_times, ElementsAre(start_time + delay1, start_time + delay4)); @@ -2457,10 +2473,10 @@ TEST_F(TaskQueueManagerTest, TimeDomainWakeUpOnlyCancelledIfAllUsesCancelled) { base::TimeTicks start_time = manager_->NowTicks(); - CancelableTask task1(&now_src_); - CancelableTask task2(&now_src_); - CancelableTask task3(&now_src_); - CancelableTask task4(&now_src_); + CancelableTask task1(GetTickClock()); + CancelableTask task2(GetTickClock()); + CancelableTask task3(GetTickClock()); + CancelableTask task4(GetTickClock()); base::TimeDelta delay1(base::TimeDelta::FromSeconds(5)); base::TimeDelta delay2(base::TimeDelta::FromSeconds(10)); base::TimeDelta delay3(base::TimeDelta::FromSeconds(15)); @@ -2503,10 +2519,10 @@ TEST_F(TaskQueueManagerTest, TimeDomainWakeUpOnlyCancelledIfAllUsesCancelled) { RunUntilManagerIsIdle(base::BindRepeating( [](std::set<base::TimeTicks>* wake_up_times, - base::SimpleTestTickClock* clock) { + const base::TickClock* clock) { wake_up_times->insert(clock->NowTicks()); }, - &wake_up_times, &now_src_)); + &wake_up_times, GetTickClock())); EXPECT_THAT(wake_up_times, ElementsAre(start_time + delay1, start_time + delay3, @@ -2594,10 +2610,10 @@ TEST_F(TaskQueueManagerTest, ShutdownQueueBeforeDisabledVoterDeleted) { TEST_F(TaskQueueManagerTest, SweepCanceledDelayedTasks) { CreateTaskQueues(1u); - CancelableTask task1(&now_src_); - CancelableTask task2(&now_src_); - CancelableTask task3(&now_src_); - CancelableTask task4(&now_src_); + CancelableTask task1(GetTickClock()); + CancelableTask task2(GetTickClock()); + CancelableTask task3(GetTickClock()); + CancelableTask task4(GetTickClock()); base::TimeDelta delay1(base::TimeDelta::FromSeconds(5)); base::TimeDelta delay2(base::TimeDelta::FromSeconds(10)); base::TimeDelta delay3(base::TimeDelta::FromSeconds(15)); @@ -2642,7 +2658,7 @@ TEST_F(TaskQueueManagerTest, SweepCanceledDelayedTasks) { TEST_F(TaskQueueManagerTest, DelayTillNextTask) { CreateTaskQueues(2u); - LazyNow lazy_now(&now_src_); + LazyNow lazy_now(GetTickClock()); EXPECT_EQ(base::TimeDelta::Max(), manager_->DelayTillNextTask(&lazy_now)); runners_[0]->PostDelayedTask(FROM_HERE, base::BindOnce(&NopTask), @@ -2676,7 +2692,7 @@ TEST_F(TaskQueueManagerTest, DelayTillNextTask_Disabled) { voter->SetQueueEnabled(false); runners_[0]->PostTask(FROM_HERE, base::BindOnce(&NopTask)); - LazyNow lazy_now(&now_src_); + LazyNow lazy_now(GetTickClock()); EXPECT_EQ(base::TimeDelta::Max(), manager_->DelayTillNextTask(&lazy_now)); } @@ -2686,7 +2702,7 @@ TEST_F(TaskQueueManagerTest, DelayTillNextTask_Fence) { runners_[0]->InsertFence(TaskQueue::InsertFencePosition::kNow); runners_[0]->PostTask(FROM_HERE, base::BindOnce(&NopTask)); - LazyNow lazy_now(&now_src_); + LazyNow lazy_now(GetTickClock()); EXPECT_EQ(base::TimeDelta::Max(), manager_->DelayTillNextTask(&lazy_now)); } @@ -2697,7 +2713,7 @@ TEST_F(TaskQueueManagerTest, DelayTillNextTask_FenceUnblocking) { runners_[0]->PostTask(FROM_HERE, base::BindOnce(&NopTask)); runners_[0]->InsertFence(TaskQueue::InsertFencePosition::kNow); - LazyNow lazy_now(&now_src_); + LazyNow lazy_now(GetTickClock()); EXPECT_EQ(base::TimeDelta(), manager_->DelayTillNextTask(&lazy_now)); } @@ -2707,9 +2723,9 @@ TEST_F(TaskQueueManagerTest, DelayTillNextTask_DelayedTaskReady) { runners_[0]->PostDelayedTask(FROM_HERE, base::BindOnce(&NopTask), base::TimeDelta::FromSeconds(1)); - now_src_.Advance(base::TimeDelta::FromSeconds(10)); + test_task_runner_->AdvanceMockTickClock(base::TimeDelta::FromSeconds(10)); - LazyNow lazy_now(&now_src_); + LazyNow lazy_now(GetTickClock()); EXPECT_EQ(base::TimeDelta(), manager_->DelayTillNextTask(&lazy_now)); } @@ -2729,7 +2745,7 @@ TEST_F(TaskQueueManagerTestWithMessageLoop, CreateTaskQueues(1u); base::RunLoop run_loop; runners_[0]->PostTask( - FROM_HERE, base::BindOnce(&MessageLoopTaskWithDelayedQuit, &now_src_, + FROM_HERE, base::BindOnce(&MessageLoopTaskWithDelayedQuit, &mock_clock_, base::RetainedRef(runners_[0]))); run_loop.RunUntilIdle(); } @@ -2757,7 +2773,7 @@ TEST_F(TaskQueueManagerTestWithMessageLoop, base::RetainedRef(runners_[0])), base::TimeDelta::FromMilliseconds(100)); - now_src_.Advance(base::TimeDelta::FromMilliseconds(200)); + mock_clock_.Advance(base::TimeDelta::FromMilliseconds(200)); run_loop.Run(); } @@ -2809,22 +2825,19 @@ TEST_F(TaskQueueManagerTest, DelayedDoWorkNotPostedForDisabledQueue) { runners_[0]->PostDelayedTask(FROM_HERE, base::BindOnce(&NopTask), base::TimeDelta::FromMilliseconds(1)); - ASSERT_TRUE(test_task_runner_->HasPendingTasks()); + ASSERT_TRUE(test_task_runner_->HasPendingTask()); EXPECT_EQ(base::TimeDelta::FromMilliseconds(1), - test_task_runner_->DelayToNextTaskTime()); + test_task_runner_->NextPendingTaskDelay()); std::unique_ptr<TaskQueue::QueueEnabledVoter> voter = runners_[0]->CreateQueueEnabledVoter(); voter->SetQueueEnabled(false); - - EXPECT_TRUE(test_task_runner_->HasPendingTasks()); - test_task_runner_->RemoveCancelledTasks(); - EXPECT_FALSE(test_task_runner_->HasPendingTasks()); + EXPECT_FALSE(test_task_runner_->HasPendingTask()); voter->SetQueueEnabled(true); - ASSERT_TRUE(test_task_runner_->HasPendingTasks()); + ASSERT_TRUE(test_task_runner_->HasPendingTask()); EXPECT_EQ(base::TimeDelta::FromMilliseconds(1), - test_task_runner_->DelayToNextTaskTime()); + test_task_runner_->NextPendingTaskDelay()); } TEST_F(TaskQueueManagerTest, DisablingQueuesChangesDelayTillNextDoWork) { @@ -2843,25 +2856,22 @@ TEST_F(TaskQueueManagerTest, DisablingQueuesChangesDelayTillNextDoWork) { std::unique_ptr<TaskQueue::QueueEnabledVoter> voter2 = runners_[2]->CreateQueueEnabledVoter(); - ASSERT_TRUE(test_task_runner_->HasPendingTasks()); + ASSERT_TRUE(test_task_runner_->HasPendingTask()); EXPECT_EQ(base::TimeDelta::FromMilliseconds(1), - test_task_runner_->DelayToNextTaskTime()); + test_task_runner_->NextPendingTaskDelay()); voter0->SetQueueEnabled(false); - test_task_runner_->RemoveCancelledTasks(); - ASSERT_TRUE(test_task_runner_->HasPendingTasks()); + ASSERT_TRUE(test_task_runner_->HasPendingTask()); EXPECT_EQ(base::TimeDelta::FromMilliseconds(10), - test_task_runner_->DelayToNextTaskTime()); + test_task_runner_->NextPendingTaskDelay()); voter1->SetQueueEnabled(false); - test_task_runner_->RemoveCancelledTasks(); - ASSERT_TRUE(test_task_runner_->HasPendingTasks()); + ASSERT_TRUE(test_task_runner_->HasPendingTask()); EXPECT_EQ(base::TimeDelta::FromMilliseconds(100), - test_task_runner_->DelayToNextTaskTime()); + test_task_runner_->NextPendingTaskDelay()); voter2->SetQueueEnabled(false); - test_task_runner_->RemoveCancelledTasks(); - EXPECT_FALSE(test_task_runner_->HasPendingTasks()); + EXPECT_FALSE(test_task_runner_->HasPendingTask()); } TEST_F(TaskQueueManagerTest, GetNextScheduledWakeUp) { @@ -2959,7 +2969,8 @@ TEST_F(TaskQueueManagerTest, ProcessTasksWithoutTaskTimeObservers) { runners_[0]->PostTask(FROM_HERE, base::BindOnce(&TestTask, 1, &run_order)); runners_[0]->PostTask(FROM_HERE, base::BindOnce(&TestTask, 2, &run_order)); runners_[0]->PostTask(FROM_HERE, base::BindOnce(&TestTask, 3, &run_order)); - test_task_runner_->RunUntilIdle(); + + base::RunLoop().RunUntilIdle(); EXPECT_EQ(start_counter, 3); EXPECT_EQ(complete_counter, 3); EXPECT_THAT(run_order, ElementsAre(1, 2, 3)); @@ -2969,7 +2980,8 @@ TEST_F(TaskQueueManagerTest, ProcessTasksWithoutTaskTimeObservers) { runners_[0]->PostTask(FROM_HERE, base::BindOnce(&TestTask, 4, &run_order)); runners_[0]->PostTask(FROM_HERE, base::BindOnce(&TestTask, 5, &run_order)); runners_[0]->PostTask(FROM_HERE, base::BindOnce(&TestTask, 6, &run_order)); - test_task_runner_->RunUntilIdle(); + + base::RunLoop().RunUntilIdle(); EXPECT_EQ(start_counter, 3); EXPECT_EQ(complete_counter, 3); EXPECT_THAT(run_order, ElementsAre(1, 2, 3, 4, 5, 6)); @@ -2986,7 +2998,8 @@ TEST_F(TaskQueueManagerTest, ProcessTasksWithTaskTimeObservers) { std::vector<EnqueueOrder> run_order; runners_[0]->PostTask(FROM_HERE, base::BindOnce(&TestTask, 1, &run_order)); runners_[0]->PostTask(FROM_HERE, base::BindOnce(&TestTask, 2, &run_order)); - test_task_runner_->RunUntilIdle(); + + base::RunLoop().RunUntilIdle(); EXPECT_EQ(start_counter, 2); EXPECT_EQ(complete_counter, 2); EXPECT_THAT(run_order, ElementsAre(1, 2)); @@ -2995,7 +3008,8 @@ TEST_F(TaskQueueManagerTest, ProcessTasksWithTaskTimeObservers) { EXPECT_FALSE(runners_[0]->GetTaskQueueImpl()->RequiresTaskTiming()); runners_[0]->PostTask(FROM_HERE, base::BindOnce(&TestTask, 3, &run_order)); runners_[0]->PostTask(FROM_HERE, base::BindOnce(&TestTask, 4, &run_order)); - test_task_runner_->RunUntilIdle(); + + base::RunLoop().RunUntilIdle(); EXPECT_EQ(start_counter, 2); EXPECT_EQ(complete_counter, 2); EXPECT_THAT(run_order, ElementsAre(1, 2, 3, 4)); @@ -3003,7 +3017,8 @@ TEST_F(TaskQueueManagerTest, ProcessTasksWithTaskTimeObservers) { manager_->RemoveTaskTimeObserver(&test_task_time_observer_); runners_[0]->PostTask(FROM_HERE, base::BindOnce(&TestTask, 5, &run_order)); runners_[0]->PostTask(FROM_HERE, base::BindOnce(&TestTask, 6, &run_order)); - test_task_runner_->RunUntilIdle(); + + base::RunLoop().RunUntilIdle(); EXPECT_EQ(start_counter, 2); EXPECT_EQ(complete_counter, 2); EXPECT_FALSE(runners_[0]->GetTaskQueueImpl()->RequiresTaskTiming()); @@ -3012,7 +3027,8 @@ TEST_F(TaskQueueManagerTest, ProcessTasksWithTaskTimeObservers) { SetOnTaskHandlers(runners_[0], &start_counter, &complete_counter); runners_[0]->PostTask(FROM_HERE, base::BindOnce(&TestTask, 7, &run_order)); runners_[0]->PostTask(FROM_HERE, base::BindOnce(&TestTask, 8, &run_order)); - test_task_runner_->RunUntilIdle(); + + base::RunLoop().RunUntilIdle(); EXPECT_EQ(start_counter, 4); EXPECT_EQ(complete_counter, 4); EXPECT_TRUE(runners_[0]->GetTaskQueueImpl()->RequiresTaskTiming()); @@ -3021,8 +3037,6 @@ TEST_F(TaskQueueManagerTest, ProcessTasksWithTaskTimeObservers) { } TEST_F(TaskQueueManagerTest, GracefulShutdown) { - test_task_runner_->SetAutoAdvanceNowToPendingTasks(true); - std::vector<base::TimeTicks> run_times; scoped_refptr<TestTaskQueue> main_tq = CreateTaskQueue(); base::WeakPtr<TestTaskQueue> main_tq_weak_ptr = main_tq->GetWeakPtr(); @@ -3033,31 +3047,31 @@ TEST_F(TaskQueueManagerTest, GracefulShutdown) { for (int i = 1; i <= 5; ++i) { main_tq->PostDelayedTask( - FROM_HERE, base::BindOnce(&RecordTimeTask, &run_times, &now_src_), + FROM_HERE, base::BindOnce(&RecordTimeTask, &run_times, GetTickClock()), base::TimeDelta::FromMilliseconds(i * 100)); } - test_task_runner_->RunForPeriod(base::TimeDelta::FromMilliseconds(250)); + test_task_runner_->FastForwardBy(base::TimeDelta::FromMilliseconds(250)); main_tq = nullptr; // Ensure that task queue went away. EXPECT_FALSE(main_tq_weak_ptr.get()); - test_task_runner_->RunForPeriod(base::TimeDelta::FromMilliseconds(1)); + test_task_runner_->FastForwardBy(base::TimeDelta::FromMilliseconds(1)); EXPECT_EQ(1u, manager_->ActiveQueuesCount()); EXPECT_EQ(1u, manager_->QueuesToShutdownCount()); EXPECT_EQ(0u, manager_->QueuesToDeleteCount()); - test_task_runner_->RunUntilIdle(); + test_task_runner_->FastForwardUntilNoTasksRemain(); // Even with TaskQueue gone, tasks are executed. EXPECT_THAT( run_times, - ElementsAre(base::TimeTicks() + base::TimeDelta::FromMilliseconds(101), - base::TimeTicks() + base::TimeDelta::FromMilliseconds(201), - base::TimeTicks() + base::TimeDelta::FromMilliseconds(301), - base::TimeTicks() + base::TimeDelta::FromMilliseconds(401), - base::TimeTicks() + base::TimeDelta::FromMilliseconds(501))); + ElementsAre(start_time_ + base::TimeDelta::FromMilliseconds(100), + start_time_ + base::TimeDelta::FromMilliseconds(200), + start_time_ + base::TimeDelta::FromMilliseconds(300), + start_time_ + base::TimeDelta::FromMilliseconds(400), + start_time_ + base::TimeDelta::FromMilliseconds(500))); EXPECT_EQ(0u, manager_->ActiveQueuesCount()); EXPECT_EQ(0u, manager_->QueuesToShutdownCount()); @@ -3065,8 +3079,6 @@ TEST_F(TaskQueueManagerTest, GracefulShutdown) { } TEST_F(TaskQueueManagerTest, GracefulShutdown_ManagerDeletedInFlight) { - test_task_runner_->SetAutoAdvanceNowToPendingTasks(true); - std::vector<base::TimeTicks> run_times; scoped_refptr<TestTaskQueue> control_tq = CreateTaskQueue(); std::vector<scoped_refptr<TestTaskQueue>> main_tqs; @@ -3087,10 +3099,10 @@ TEST_F(TaskQueueManagerTest, GracefulShutdown_ManagerDeletedInFlight) { for (int i = 1; i <= 5; ++i) { main_tqs[0]->PostDelayedTask( - FROM_HERE, base::BindOnce(&RecordTimeTask, &run_times, &now_src_), + FROM_HERE, base::BindOnce(&RecordTimeTask, &run_times, GetTickClock()), base::TimeDelta::FromMilliseconds(i * 100)); } - test_task_runner_->RunForPeriod(base::TimeDelta::FromMilliseconds(250)); + test_task_runner_->FastForwardBy(base::TimeDelta::FromMilliseconds(250)); main_tqs.clear(); // Ensure that task queues went away. @@ -3103,18 +3115,16 @@ TEST_F(TaskQueueManagerTest, GracefulShutdown_ManagerDeletedInFlight) { // thread. manager_.reset(); - test_task_runner_->RunUntilIdle(); + test_task_runner_->FastForwardUntilNoTasksRemain(); EXPECT_THAT( run_times, - ElementsAre(base::TimeTicks() + base::TimeDelta::FromMilliseconds(101), - base::TimeTicks() + base::TimeDelta::FromMilliseconds(201))); + ElementsAre(start_time_ + base::TimeDelta::FromMilliseconds(100), + start_time_ + base::TimeDelta::FromMilliseconds(200))); } TEST_F(TaskQueueManagerTest, GracefulShutdown_ManagerDeletedWithQueuesToShutdown) { - test_task_runner_->SetAutoAdvanceNowToPendingTasks(true); - std::vector<base::TimeTicks> run_times; scoped_refptr<TestTaskQueue> main_tq = CreateTaskQueue(); base::WeakPtr<TestTaskQueue> main_tq_weak_ptr = main_tq->GetWeakPtr(); @@ -3125,16 +3135,16 @@ TEST_F(TaskQueueManagerTest, for (int i = 1; i <= 5; ++i) { main_tq->PostDelayedTask( - FROM_HERE, base::BindOnce(&RecordTimeTask, &run_times, &now_src_), + FROM_HERE, base::BindOnce(&RecordTimeTask, &run_times, GetTickClock()), base::TimeDelta::FromMilliseconds(i * 100)); } - test_task_runner_->RunForPeriod(base::TimeDelta::FromMilliseconds(250)); + test_task_runner_->FastForwardBy(base::TimeDelta::FromMilliseconds(250)); main_tq = nullptr; // Ensure that task queue went away. EXPECT_FALSE(main_tq_weak_ptr.get()); - test_task_runner_->RunForPeriod(base::TimeDelta::FromMilliseconds(1)); + test_task_runner_->FastForwardBy(base::TimeDelta::FromMilliseconds(1)); EXPECT_EQ(1u, manager_->ActiveQueuesCount()); EXPECT_EQ(1u, manager_->QueuesToShutdownCount()); @@ -3143,12 +3153,12 @@ TEST_F(TaskQueueManagerTest, // Ensure that all queues-to-gracefully-shutdown are properly unregistered. manager_.reset(); - test_task_runner_->RunUntilIdle(); + test_task_runner_->FastForwardUntilNoTasksRemain(); EXPECT_THAT( run_times, - ElementsAre(base::TimeTicks() + base::TimeDelta::FromMilliseconds(101), - base::TimeTicks() + base::TimeDelta::FromMilliseconds(201))); + ElementsAre(start_time_ + base::TimeDelta::FromMilliseconds(100), + start_time_ + base::TimeDelta::FromMilliseconds(200))); } TEST_F(TaskQueueManagerTestWithCustomInitialization, DefaultTaskRunnerSupport) { @@ -3170,8 +3180,8 @@ TEST_F(TaskQueueManagerTestWithCustomInitialization, DefaultTaskRunnerSupport) { TEST_F(TaskQueueManagerTest, CanceledTasksInQueueCantMakeOtherTasksSkipAhead) { CreateTaskQueues(2u); - CancelableTask task1(&now_src_); - CancelableTask task2(&now_src_); + CancelableTask task1(GetTickClock()); + CancelableTask task2(GetTickClock()); std::vector<base::TimeTicks> run_times; runners_[0]->PostTask( @@ -3188,14 +3198,12 @@ TEST_F(TaskQueueManagerTest, CanceledTasksInQueueCantMakeOtherTasksSkipAhead) { task1.weak_factory_.InvalidateWeakPtrs(); task2.weak_factory_.InvalidateWeakPtrs(); - test_task_runner_->RunUntilIdle(); + base::RunLoop().RunUntilIdle(); EXPECT_THAT(run_order, ElementsAre(1, 2)); } TEST_F(TaskQueueManagerTest, TaskQueueDeletedOnAnotherThread) { - test_task_runner_->SetAutoAdvanceNowToPendingTasks(true); - std::vector<base::TimeTicks> run_times; scoped_refptr<TestTaskQueue> main_tq = CreateTaskQueue(); @@ -3209,7 +3217,7 @@ TEST_F(TaskQueueManagerTest, TaskQueueDeletedOnAnotherThread) { for (int i = 1; i <= 5; ++i) { main_tq->PostDelayedTask( - FROM_HERE, base::BindOnce(&RecordTimeTask, &run_times, &now_src_), + FROM_HERE, base::BindOnce(&RecordTimeTask, &run_times, GetTickClock()), base::TimeDelta::FromMilliseconds(i * 100)); } @@ -3238,16 +3246,16 @@ TEST_F(TaskQueueManagerTest, TaskQueueDeletedOnAnotherThread) { EXPECT_EQ(1u, manager_->QueuesToShutdownCount()); EXPECT_EQ(0u, manager_->QueuesToDeleteCount()); - test_task_runner_->RunUntilIdle(); + test_task_runner_->FastForwardUntilNoTasksRemain(); // Even with TaskQueue gone, tasks are executed. EXPECT_THAT( run_times, - ElementsAre(base::TimeTicks() + base::TimeDelta::FromMilliseconds(101), - base::TimeTicks() + base::TimeDelta::FromMilliseconds(201), - base::TimeTicks() + base::TimeDelta::FromMilliseconds(301), - base::TimeTicks() + base::TimeDelta::FromMilliseconds(401), - base::TimeTicks() + base::TimeDelta::FromMilliseconds(501))); + ElementsAre(start_time_ + base::TimeDelta::FromMilliseconds(100), + start_time_ + base::TimeDelta::FromMilliseconds(200), + start_time_ + base::TimeDelta::FromMilliseconds(300), + start_time_ + base::TimeDelta::FromMilliseconds(400), + start_time_ + base::TimeDelta::FromMilliseconds(500))); EXPECT_EQ(0u, manager_->ActiveQueuesCount()); EXPECT_EQ(0u, manager_->QueuesToShutdownCount()); @@ -3280,8 +3288,6 @@ class PostTaskInDestructor { TEST_F(TaskQueueManagerTest, TaskQueueUsedInTaskDestructorAfterShutdown) { // This test checks that when a task is posted to a shutdown queue and // destroyed, it can try to post a task to the same queue without deadlocks. - test_task_runner_->SetAutoAdvanceNowToPendingTasks(true); - scoped_refptr<TestTaskQueue> main_tq = CreateTaskQueue(); base::WaitableEvent test_executed( diff --git a/third_party/blink/renderer/platform/scheduler/base/time_domain_unittest.cc b/third_party/blink/renderer/platform/scheduler/base/time_domain_unittest.cc index 9ab36ebab2543..645979c7c49e3 100644 --- a/third_party/blink/renderer/platform/scheduler/base/time_domain_unittest.cc +++ b/third_party/blink/renderer/platform/scheduler/base/time_domain_unittest.cc @@ -8,7 +8,6 @@ #include "base/macros.h" #include "base/memory/ptr_util.h" #include "base/test/simple_test_tick_clock.h" -#include "components/viz/test/ordered_simple_task_runner.h" #include "testing/gmock/include/gmock/gmock.h" #include "third_party/blink/renderer/platform/scheduler/base/task_queue_impl.h" #include "third_party/blink/renderer/platform/scheduler/base/task_queue_manager.h"