Index: third_party/WebKit/Source/platform/scheduler/base/task_queue_manager_unittest.cc |
diff --git a/third_party/WebKit/Source/platform/scheduler/base/task_queue_manager_unittest.cc b/third_party/WebKit/Source/platform/scheduler/base/task_queue_manager_unittest.cc |
index 4c03d296471113407836d8569137dd3211e4fe4c..0836421bca1ef7dfaae3d26683520ec4e0068e20 100644 |
--- a/third_party/WebKit/Source/platform/scheduler/base/task_queue_manager_unittest.cc |
+++ b/third_party/WebKit/Source/platform/scheduler/base/task_queue_manager_unittest.cc |
@@ -106,6 +106,10 @@ class TaskQueueManagerTest : public testing::Test { |
runners_.push_back(manager_->NewTaskQueue(TaskQueue::Spec("test_queue"))); |
} |
+ void UpdateWorkQueues(LazyNow lazy_now) { |
+ manager_->UpdateWorkQueues(lazy_now); |
+ } |
+ |
std::unique_ptr<base::MessageLoop> message_loop_; |
std::unique_ptr<base::SimpleTestTickClock> now_src_; |
scoped_refptr<TaskQueueManagerDelegateForTest> main_task_runner_; |
@@ -433,44 +437,6 @@ TEST_F(TaskQueueManagerTest, PendingDelayedTasksRemovedOnShutdown) { |
EXPECT_EQ(2, TestObject::destructor_count_); |
} |
-TEST_F(TaskQueueManagerTest, ManualPumping) { |
- Initialize(1u); |
- runners_[0]->SetPumpPolicy(TaskQueue::PumpPolicy::MANUAL); |
- |
- std::vector<EnqueueOrder> run_order; |
- // Posting a task when pumping is disabled doesn't result in work getting |
- // posted. |
- runners_[0]->PostTask(FROM_HERE, base::Bind(&TestTask, 1, &run_order)); |
- EXPECT_FALSE(test_task_runner_->HasPendingTasks()); |
- |
- // However polling still works. |
- EXPECT_TRUE(runners_[0]->HasPendingImmediateWork()); |
- |
- // After pumping the task runs normally. |
- LazyNow lazy_now(now_src_.get()); |
- runners_[0]->PumpQueue(&lazy_now, true); |
- EXPECT_TRUE(test_task_runner_->HasPendingTasks()); |
- test_task_runner_->RunUntilIdle(); |
- EXPECT_THAT(run_order, ElementsAre(1)); |
-} |
- |
-TEST_F(TaskQueueManagerTest, ManualPumpingToggle) { |
- Initialize(1u); |
- runners_[0]->SetPumpPolicy(TaskQueue::PumpPolicy::MANUAL); |
- |
- std::vector<EnqueueOrder> run_order; |
- // Posting a task when pumping is disabled doesn't result in work getting |
- // posted. |
- runners_[0]->PostTask(FROM_HERE, base::Bind(&TestTask, 1, &run_order)); |
- EXPECT_FALSE(test_task_runner_->HasPendingTasks()); |
- |
- // When pumping is enabled the task runs normally. |
- runners_[0]->SetPumpPolicy(TaskQueue::PumpPolicy::AUTO); |
- EXPECT_TRUE(test_task_runner_->HasPendingTasks()); |
- test_task_runner_->RunUntilIdle(); |
- EXPECT_THAT(run_order, ElementsAre(1)); |
-} |
- |
TEST_F(TaskQueueManagerTest, DenyRunning_BeforePosting) { |
Initialize(1u); |
@@ -501,106 +467,6 @@ TEST_F(TaskQueueManagerTest, DenyRunning_AfterPosting) { |
EXPECT_THAT(run_order, ElementsAre(1)); |
} |
-TEST_F(TaskQueueManagerTest, DenyRunning_ManuallyPumpedTransitionsToAuto) { |
- Initialize(1u); |
- |
- std::vector<EnqueueOrder> run_order; |
- runners_[0]->SetPumpPolicy(TaskQueue::PumpPolicy::MANUAL); |
- runners_[0]->SetQueueEnabled(false); |
- runners_[0]->PostTask(FROM_HERE, base::Bind(&TestTask, 1, &run_order)); |
- |
- test_task_runner_->RunUntilIdle(); |
- EXPECT_TRUE(run_order.empty()); |
- |
- runners_[0]->SetPumpPolicy(TaskQueue::PumpPolicy::AUTO); |
- runners_[0]->SetQueueEnabled(true); |
- test_task_runner_->RunUntilIdle(); |
- EXPECT_THAT(run_order, ElementsAre(1)); |
-} |
- |
-TEST_F(TaskQueueManagerTest, ManualPumpingWithDelayedTask) { |
- Initialize(1u); |
- runners_[0]->SetPumpPolicy(TaskQueue::PumpPolicy::MANUAL); |
- |
- std::vector<EnqueueOrder> run_order; |
- // Posting a delayed task when pumping will apply the delay, but won't cause |
- // work to executed afterwards. |
- base::TimeDelta delay(base::TimeDelta::FromMilliseconds(10)); |
- runners_[0]->PostDelayedTask(FROM_HERE, base::Bind(&TestTask, 1, &run_order), |
- delay); |
- |
- // After pumping but before the delay period has expired, task does not run. |
- LazyNow lazy_now1(now_src_.get()); |
- runners_[0]->PumpQueue(&lazy_now1, true); |
- test_task_runner_->RunForPeriod(base::TimeDelta::FromMilliseconds(5)); |
- EXPECT_TRUE(run_order.empty()); |
- |
- // Once the delay has expired, pumping causes the task to run. |
- now_src_->Advance(base::TimeDelta::FromMilliseconds(5)); |
- LazyNow lazy_now2(now_src_.get()); |
- runners_[0]->PumpQueue(&lazy_now2, true); |
- EXPECT_TRUE(test_task_runner_->HasPendingTasks()); |
- test_task_runner_->RunPendingTasks(); |
- EXPECT_THAT(run_order, ElementsAre(1)); |
-} |
- |
-TEST_F(TaskQueueManagerTest, ManualPumpingWithMultipleDelayedTasks) { |
- Initialize(1u); |
- runners_[0]->SetPumpPolicy(TaskQueue::PumpPolicy::MANUAL); |
- |
- std::vector<EnqueueOrder> run_order; |
- // Posting a delayed task when pumping will apply the delay, but won't cause |
- // work to executed afterwards. |
- base::TimeDelta delay1(base::TimeDelta::FromMilliseconds(1)); |
- base::TimeDelta delay2(base::TimeDelta::FromMilliseconds(10)); |
- base::TimeDelta delay3(base::TimeDelta::FromMilliseconds(20)); |
- runners_[0]->PostDelayedTask(FROM_HERE, base::Bind(&TestTask, 1, &run_order), |
- delay1); |
- runners_[0]->PostDelayedTask(FROM_HERE, base::Bind(&TestTask, 2, &run_order), |
- delay2); |
- runners_[0]->PostDelayedTask(FROM_HERE, base::Bind(&TestTask, 3, &run_order), |
- delay3); |
- |
- now_src_->Advance(base::TimeDelta::FromMilliseconds(15)); |
- test_task_runner_->RunUntilIdle(); |
- EXPECT_TRUE(run_order.empty()); |
- |
- // Once the delay has expired, pumping causes the task to run. |
- LazyNow lazy_now(now_src_.get()); |
- runners_[0]->PumpQueue(&lazy_now, true); |
- test_task_runner_->RunUntilIdle(); |
- EXPECT_THAT(run_order, ElementsAre(1, 2)); |
-} |
- |
-TEST_F(TaskQueueManagerTest, DelayedTasksDontAutoRunWithManualPumping) { |
- Initialize(1u); |
- runners_[0]->SetPumpPolicy(TaskQueue::PumpPolicy::MANUAL); |
- |
- std::vector<EnqueueOrder> run_order; |
- base::TimeDelta delay(base::TimeDelta::FromMilliseconds(10)); |
- runners_[0]->PostDelayedTask(FROM_HERE, base::Bind(&TestTask, 1, &run_order), |
- delay); |
- |
- test_task_runner_->RunForPeriod(base::TimeDelta::FromMilliseconds(10)); |
- EXPECT_TRUE(run_order.empty()); |
-} |
- |
-TEST_F(TaskQueueManagerTest, ManualPumpingWithNonEmptyWorkQueue) { |
- Initialize(1u); |
- runners_[0]->SetPumpPolicy(TaskQueue::PumpPolicy::MANUAL); |
- |
- std::vector<EnqueueOrder> run_order; |
- // Posting two tasks and pumping twice should result in two tasks in the work |
- // queue. |
- LazyNow lazy_now(now_src_.get()); |
- runners_[0]->PostTask(FROM_HERE, base::Bind(&TestTask, 1, &run_order)); |
- runners_[0]->PumpQueue(&lazy_now, true); |
- runners_[0]->PostTask(FROM_HERE, base::Bind(&TestTask, 2, &run_order)); |
- runners_[0]->PumpQueue(&lazy_now, true); |
- |
- EXPECT_EQ(2u, runners_[0]->immediate_work_queue()->Size()); |
-} |
- |
void ReentrantTestTask(scoped_refptr<base::SingleThreadTaskRunner> runner, |
int countdown, |
std::vector<EnqueueOrder>* out_result) { |
@@ -717,150 +583,6 @@ TEST_F(TaskQueueManagerTest, WorkBatching) { |
EXPECT_THAT(run_order, ElementsAre(1, 2, 3, 4)); |
} |
-TEST_F(TaskQueueManagerTest, AutoPumpAfterWakeup) { |
- Initialize(2u); |
- runners_[0]->SetPumpPolicy(TaskQueue::PumpPolicy::AFTER_WAKEUP); |
- |
- std::vector<EnqueueOrder> run_order; |
- runners_[0]->PostTask(FROM_HERE, base::Bind(&TestTask, 1, &run_order)); |
- test_task_runner_->RunUntilIdle(); |
- EXPECT_TRUE(run_order.empty()); // Shouldn't run - no other task to wake TQM. |
- |
- runners_[0]->PostTask(FROM_HERE, base::Bind(&TestTask, 2, &run_order)); |
- test_task_runner_->RunUntilIdle(); |
- EXPECT_TRUE(run_order.empty()); // Still shouldn't wake TQM. |
- |
- runners_[1]->PostTask(FROM_HERE, base::Bind(&TestTask, 3, &run_order)); |
- test_task_runner_->RunUntilIdle(); |
- // Executing a task on an auto pumped queue should wake the TQM. |
- EXPECT_THAT(run_order, ElementsAre(3, 1, 2)); |
-} |
- |
-TEST_F(TaskQueueManagerTest, AutoPumpAfterWakeupWhenAlreadyAwake) { |
- Initialize(2u); |
- runners_[0]->SetPumpPolicy(TaskQueue::PumpPolicy::AFTER_WAKEUP); |
- |
- std::vector<EnqueueOrder> run_order; |
- runners_[0]->PostTask(FROM_HERE, base::Bind(&TestTask, 1, &run_order)); |
- runners_[1]->PostTask(FROM_HERE, base::Bind(&TestTask, 2, &run_order)); |
- test_task_runner_->RunUntilIdle(); |
- EXPECT_THAT(run_order, ElementsAre(2, 1)); // TQM was already awake. |
-} |
- |
-TEST_F(TaskQueueManagerTest, |
- AutoPumpAfterWakeupTriggeredByManuallyPumpedQueue) { |
- Initialize(2u); |
- runners_[0]->SetPumpPolicy(TaskQueue::PumpPolicy::AFTER_WAKEUP); |
- runners_[1]->SetPumpPolicy(TaskQueue::PumpPolicy::MANUAL); |
- |
- std::vector<EnqueueOrder> run_order; |
- runners_[0]->PostTask(FROM_HERE, base::Bind(&TestTask, 1, &run_order)); |
- test_task_runner_->RunUntilIdle(); |
- EXPECT_TRUE(run_order.empty()); // Shouldn't run - no other task to wake TQM. |
- |
- runners_[1]->PostTask(FROM_HERE, base::Bind(&TestTask, 2, &run_order)); |
- test_task_runner_->RunUntilIdle(); |
- // This still shouldn't wake TQM as manual queue was not pumped. |
- EXPECT_TRUE(run_order.empty()); |
- |
- LazyNow lazy_now(now_src_.get()); |
- runners_[1]->PumpQueue(&lazy_now, true); |
- test_task_runner_->RunUntilIdle(); |
- // Executing a task on an auto pumped queue should wake the TQM. |
- EXPECT_THAT(run_order, ElementsAre(2, 1)); |
-} |
- |
-void TestPostingTask(scoped_refptr<base::SingleThreadTaskRunner> task_runner, |
- base::Closure task) { |
- task_runner->PostTask(FROM_HERE, task); |
-} |
- |
-TEST_F(TaskQueueManagerTest, AutoPumpAfterWakeupFromTask) { |
- Initialize(2u); |
- runners_[0]->SetPumpPolicy(TaskQueue::PumpPolicy::AFTER_WAKEUP); |
- |
- std::vector<EnqueueOrder> run_order; |
- // Check that a task which posts a task to an auto pump after wakeup queue |
- // doesn't cause the queue to wake up. |
- base::Closure after_wakeup_task = base::Bind(&TestTask, 1, &run_order); |
- runners_[1]->PostTask( |
- FROM_HERE, base::Bind(&TestPostingTask, runners_[0], after_wakeup_task)); |
- test_task_runner_->RunUntilIdle(); |
- EXPECT_TRUE(run_order.empty()); |
- |
- // Wake up the queue. |
- runners_[1]->PostTask(FROM_HERE, base::Bind(&TestTask, 2, &run_order)); |
- test_task_runner_->RunUntilIdle(); |
- EXPECT_THAT(run_order, ElementsAre(2, 1)); |
-} |
- |
-TEST_F(TaskQueueManagerTest, AutoPumpAfterWakeupFromMultipleTasks) { |
- Initialize(2u); |
- runners_[0]->SetPumpPolicy(TaskQueue::PumpPolicy::AFTER_WAKEUP); |
- |
- std::vector<EnqueueOrder> run_order; |
- // Check that a task which posts a task to an auto pump after wakeup queue |
- // doesn't cause the queue to wake up. |
- base::Closure after_wakeup_task_1 = base::Bind(&TestTask, 1, &run_order); |
- base::Closure after_wakeup_task_2 = base::Bind(&TestTask, 2, &run_order); |
- runners_[1]->PostTask(FROM_HERE, base::Bind(&TestPostingTask, runners_[0], |
- after_wakeup_task_1)); |
- runners_[1]->PostTask(FROM_HERE, base::Bind(&TestPostingTask, runners_[0], |
- after_wakeup_task_2)); |
- test_task_runner_->RunUntilIdle(); |
- EXPECT_TRUE(run_order.empty()); |
- |
- // Wake up the queue. |
- runners_[1]->PostTask(FROM_HERE, base::Bind(&TestTask, 3, &run_order)); |
- test_task_runner_->RunUntilIdle(); |
- EXPECT_THAT(run_order, ElementsAre(3, 1, 2)); |
-} |
- |
-TEST_F(TaskQueueManagerTest, AutoPumpAfterWakeupBecomesQuiescent) { |
- Initialize(2u); |
- runners_[0]->SetPumpPolicy(TaskQueue::PumpPolicy::AFTER_WAKEUP); |
- |
- int run_count = 0; |
- // Check that if multiple tasks reposts themselves onto a pump-after-wakeup |
- // queue they don't wake each other and will eventually stop when no other |
- // tasks execute. |
- runners_[0]->PostTask( |
- FROM_HERE, base::Bind(&RePostingTestTask, runners_[0], &run_count)); |
- runners_[0]->PostTask( |
- FROM_HERE, base::Bind(&RePostingTestTask, runners_[0], &run_count)); |
- runners_[1]->PostTask(FROM_HERE, base::Bind(&NopTask)); |
- test_task_runner_->RunUntilIdle(); |
- // The reposting tasks posted to the after wakeup queue shouldn't have woken |
- // each other up. |
- EXPECT_EQ(2, run_count); |
-} |
- |
-TEST_F(TaskQueueManagerTest, AutoPumpAfterWakeupWithDontWakeQueue) { |
- Initialize(1u); |
- |
- scoped_refptr<internal::TaskQueueImpl> queue0 = manager_->NewTaskQueue( |
- TaskQueue::Spec("test_queue 0") |
- .SetPumpPolicy(TaskQueue::PumpPolicy::AFTER_WAKEUP)); |
- scoped_refptr<internal::TaskQueueImpl> queue1 = manager_->NewTaskQueue( |
- TaskQueue::Spec("test_queue 0") |
- .SetWakeupPolicy(TaskQueue::WakeupPolicy::DONT_WAKE_OTHER_QUEUES)); |
- scoped_refptr<internal::TaskQueueImpl> queue2 = runners_[0]; |
- |
- std::vector<EnqueueOrder> run_order; |
- queue0->PostTask(FROM_HERE, base::Bind(&TestTask, 1, &run_order)); |
- queue1->PostTask(FROM_HERE, base::Bind(&TestTask, 2, &run_order)); |
- test_task_runner_->RunUntilIdle(); |
- // Executing a DONT_WAKE_OTHER_QUEUES queue shouldn't wake the autopump after |
- // wakeup queue. |
- EXPECT_THAT(run_order, ElementsAre(2)); |
- |
- queue2->PostTask(FROM_HERE, base::Bind(&TestTask, 3, &run_order)); |
- test_task_runner_->RunUntilIdle(); |
- // Executing a CAN_WAKE_OTHER_QUEUES queue should wake the autopump after |
- // wakeup queue. |
- EXPECT_THAT(run_order, ElementsAre(2, 3, 1)); |
-} |
- |
class MockTaskObserver : public base::MessageLoop::TaskObserver { |
public: |
MOCK_METHOD1(DidProcessTask, void(const base::PendingTask& task)); |
@@ -1079,80 +801,36 @@ TEST_F(TaskQueueManagerTest, GetAndClearSystemIsQuiescentBit) { |
} |
TEST_F(TaskQueueManagerTest, HasPendingImmediateWork) { |
- Initialize(2u); |
- internal::TaskQueueImpl* queue0 = runners_[0].get(); |
- internal::TaskQueueImpl* queue1 = runners_[1].get(); |
- queue0->SetPumpPolicy(TaskQueue::PumpPolicy::AUTO); |
- queue1->SetPumpPolicy(TaskQueue::PumpPolicy::MANUAL); |
- |
- EXPECT_FALSE(queue0->HasPendingImmediateWork()); |
- EXPECT_FALSE(queue1->HasPendingImmediateWork()); |
+ Initialize(1u); |
- queue0->PostTask(FROM_HERE, base::Bind(NullTask)); |
- queue1->PostTask(FROM_HERE, base::Bind(NullTask)); |
- EXPECT_TRUE(queue0->HasPendingImmediateWork()); |
- EXPECT_TRUE(queue1->HasPendingImmediateWork()); |
+ EXPECT_FALSE(runners_[0]->HasPendingImmediateWork()); |
+ runners_[0]->PostTask(FROM_HERE, base::Bind(NullTask)); |
+ EXPECT_TRUE(runners_[0]->HasPendingImmediateWork()); |
test_task_runner_->RunUntilIdle(); |
- EXPECT_FALSE(queue0->HasPendingImmediateWork()); |
- EXPECT_TRUE(queue1->HasPendingImmediateWork()); |
+ EXPECT_FALSE(runners_[0]->HasPendingImmediateWork()); |
+} |
- LazyNow lazy_now(now_src_.get()); |
- queue1->PumpQueue(&lazy_now, true); |
- EXPECT_FALSE(queue0->HasPendingImmediateWork()); |
- EXPECT_TRUE(queue1->HasPendingImmediateWork()); |
+TEST_F(TaskQueueManagerTest, HasPendingImmediateWork_DelayedTasks) { |
+ Initialize(1u); |
- test_task_runner_->RunUntilIdle(); |
- EXPECT_FALSE(queue0->HasPendingImmediateWork()); |
- EXPECT_FALSE(queue1->HasPendingImmediateWork()); |
-} |
+ EXPECT_FALSE(runners_[0]->HasPendingImmediateWork()); |
+ runners_[0]->PostDelayedTask(FROM_HERE, base::Bind(NullTask), |
+ base::TimeDelta::FromMilliseconds(12)); |
+ EXPECT_FALSE(runners_[0]->HasPendingImmediateWork()); |
-TEST_F(TaskQueueManagerTest, HasPendingImmediateWorkAndNeedsPumping) { |
- Initialize(2u); |
- internal::TaskQueueImpl* queue0 = runners_[0].get(); |
- internal::TaskQueueImpl* queue1 = runners_[1].get(); |
- queue0->SetPumpPolicy(TaskQueue::PumpPolicy::AUTO); |
- queue1->SetPumpPolicy(TaskQueue::PumpPolicy::MANUAL); |
- |
- EXPECT_FALSE(queue0->HasPendingImmediateWork()); |
- EXPECT_FALSE(queue0->NeedsPumping()); |
- EXPECT_FALSE(queue1->HasPendingImmediateWork()); |
- EXPECT_FALSE(queue1->NeedsPumping()); |
- |
- queue0->PostTask(FROM_HERE, base::Bind(NullTask)); |
- queue0->PostTask(FROM_HERE, base::Bind(NullTask)); |
- queue1->PostTask(FROM_HERE, base::Bind(NullTask)); |
- EXPECT_TRUE(queue0->HasPendingImmediateWork()); |
- EXPECT_TRUE(queue0->NeedsPumping()); |
- EXPECT_TRUE(queue1->HasPendingImmediateWork()); |
- EXPECT_TRUE(queue1->NeedsPumping()); |
- |
- test_task_runner_->SetRunTaskLimit(1); |
- test_task_runner_->RunPendingTasks(); |
- EXPECT_TRUE(queue0->HasPendingImmediateWork()); |
- EXPECT_FALSE(queue0->NeedsPumping()); |
- EXPECT_TRUE(queue1->HasPendingImmediateWork()); |
- EXPECT_TRUE(queue1->NeedsPumping()); |
+ // Move time forwards until just before the delayed task should run. |
+ now_src_->Advance(base::TimeDelta::FromMilliseconds(10)); |
+ UpdateWorkQueues(LazyNow(now_src_.get())); |
+ EXPECT_FALSE(runners_[0]->HasPendingImmediateWork()); |
- test_task_runner_->ClearRunTaskLimit(); |
- test_task_runner_->RunUntilIdle(); |
- EXPECT_FALSE(queue0->HasPendingImmediateWork()); |
- EXPECT_FALSE(queue0->NeedsPumping()); |
- EXPECT_TRUE(queue1->HasPendingImmediateWork()); |
- EXPECT_TRUE(queue1->NeedsPumping()); |
- |
- LazyNow lazy_now(now_src_.get()); |
- queue1->PumpQueue(&lazy_now, true); |
- EXPECT_FALSE(queue0->HasPendingImmediateWork()); |
- EXPECT_FALSE(queue0->NeedsPumping()); |
- EXPECT_TRUE(queue1->HasPendingImmediateWork()); |
- EXPECT_FALSE(queue1->NeedsPumping()); |
+ // Force the delayed task onto the work queue. |
+ now_src_->Advance(base::TimeDelta::FromMilliseconds(2)); |
+ UpdateWorkQueues(LazyNow(now_src_.get())); |
+ EXPECT_TRUE(runners_[0]->HasPendingImmediateWork()); |
test_task_runner_->RunUntilIdle(); |
- EXPECT_FALSE(queue0->HasPendingImmediateWork()); |
- EXPECT_FALSE(queue0->NeedsPumping()); |
- EXPECT_FALSE(queue1->HasPendingImmediateWork()); |
- EXPECT_FALSE(queue1->NeedsPumping()); |
+ EXPECT_FALSE(runners_[0]->HasPendingImmediateWork()); |
} |
void ExpensiveTestTask(int value, |
@@ -1403,35 +1081,6 @@ TEST_F(TaskQueueManagerTest, UnregisterTaskQueue_InTasks) { |
ASSERT_THAT(run_order, ElementsAre(1)); |
} |
-void PostTestTasksFromNestedMessageLoop( |
- base::MessageLoop* message_loop, |
- scoped_refptr<base::SingleThreadTaskRunner> main_runner, |
- scoped_refptr<base::SingleThreadTaskRunner> wake_up_runner, |
- std::vector<EnqueueOrder>* run_order) { |
- base::MessageLoop::ScopedNestableTaskAllower allow(message_loop); |
- main_runner->PostNonNestableTask(FROM_HERE, |
- base::Bind(&TestTask, 1, run_order)); |
- // The following should never get executed. |
- wake_up_runner->PostTask(FROM_HERE, base::Bind(&TestTask, 2, run_order)); |
- base::RunLoop().RunUntilIdle(); |
-} |
- |
-TEST_F(TaskQueueManagerTest, DeferredNonNestableTaskDoesNotTriggerWakeUp) { |
- // This test checks that running (i.e., deferring) a non-nestable task in a |
- // nested run loop does not trigger the pumping of an on-wakeup queue. |
- InitializeWithRealMessageLoop(2u); |
- runners_[1]->SetPumpPolicy(TaskQueue::PumpPolicy::AFTER_WAKEUP); |
- |
- std::vector<EnqueueOrder> run_order; |
- runners_[0]->PostTask( |
- FROM_HERE, |
- base::Bind(&PostTestTasksFromNestedMessageLoop, message_loop_.get(), |
- runners_[0], runners_[1], base::Unretained(&run_order))); |
- |
- base::RunLoop().RunUntilIdle(); |
- ASSERT_THAT(run_order, ElementsAre(1)); |
-} |
- |
namespace { |
class MockObserver : public TaskQueueManager::Observer { |
@@ -1996,8 +1645,7 @@ TEST_F(TaskQueueManagerTest, PostCancellableTask_AndCancel_OnWorkQueue) { |
EXPECT_TRUE(handle); |
// Force the task onto the work queue. |
- LazyNow lazy_now(now_src_.get()); |
- runners_[0]->PumpQueue(&lazy_now, true); |
+ UpdateWorkQueues(LazyNow(now_src_.get())); |
EXPECT_TRUE(runners_[0]->IsTaskPending(handle)); |
EXPECT_TRUE(runners_[0]->CancelTask(handle)); |
@@ -2021,8 +1669,7 @@ TEST_F(TaskQueueManagerTest, PostThreeTasks_AndCancelOne_OnWorkQueue) { |
FROM_HERE, base::Bind(&TestTask, 3, &run_order), base::TimeDelta()); |
// Force the tasks onto the work queue. |
- LazyNow lazy_now(now_src_.get()); |
- runners_[0]->PumpQueue(&lazy_now, true); |
+ UpdateWorkQueues(LazyNow(now_src_.get())); |
EXPECT_TRUE(runners_[0]->IsTaskPending(handle)); |
EXPECT_TRUE(runners_[0]->CancelTask(handle)); |
@@ -2046,10 +1693,7 @@ TEST_F(TaskQueueManagerTest, PostThreeTasksOnDifferentQueues_AndCancelOne) { |
FROM_HERE, base::Bind(&TestTask, 3, &run_order), base::TimeDelta()); |
// Force the tasks onto the work queues. |
- LazyNow lazy_now(now_src_.get()); |
- runners_[0]->PumpQueue(&lazy_now, true); |
- runners_[1]->PumpQueue(&lazy_now, true); |
- runners_[2]->PumpQueue(&lazy_now, true); |
+ UpdateWorkQueues(LazyNow(now_src_.get())); |
EXPECT_TRUE(runners_[1]->IsTaskPending(handle)); |
EXPECT_TRUE(runners_[1]->CancelTask(handle)); |
@@ -2227,8 +1871,7 @@ TEST_F(TaskQueueManagerTest, PostDelayedCancellableTask_AndCancel_OnWorkQueue) { |
// Force the task onto the work queue. |
now_src_->Advance(base::TimeDelta::FromMilliseconds(10)); |
- LazyNow lazy_now(now_src_.get()); |
- runners_[0]->PumpQueue(&lazy_now, true); |
+ UpdateWorkQueues(LazyNow(now_src_.get())); |
EXPECT_TRUE(runners_[0]->IsTaskPending(handle)); |
EXPECT_TRUE(runners_[0]->CancelTask(handle)); |
@@ -2256,8 +1899,7 @@ TEST_F(TaskQueueManagerTest, PostThreeDelayedTasks_AndCancelOne_OnWorkQueue) { |
// Force the tasks onto the work queue. |
now_src_->Advance(base::TimeDelta::FromMilliseconds(10)); |
- LazyNow lazy_now(now_src_.get()); |
- runners_[0]->PumpQueue(&lazy_now, true); |
+ UpdateWorkQueues(LazyNow(now_src_.get())); |
EXPECT_TRUE(runners_[0]->IsTaskPending(handle)); |
EXPECT_TRUE(runners_[0]->CancelTask(handle)); |
@@ -2284,8 +1926,7 @@ TEST_F(TaskQueueManagerTest, BulkPostingDelayedTasks_AndCancelOnWorkQueue) { |
// Force the tasks onto the work queue. |
now_src_->Advance(base::TimeDelta::FromMilliseconds(2000)); |
- LazyNow lazy_now(now_src_.get()); |
- runners_[0]->PumpQueue(&lazy_now, true); |
+ UpdateWorkQueues(LazyNow(now_src_.get())); |
// Cancel three timers. |
EXPECT_TRUE(runners_[0]->CancelTask(handles[123])); |