Index: content/renderer/scheduler/task_queue_manager_unittest.cc |
diff --git a/content/renderer/scheduler/task_queue_manager_unittest.cc b/content/renderer/scheduler/task_queue_manager_unittest.cc |
index a6c13478c7f6353cb1899bcd6903bab1be10fe65..34789f2754bc622908a46e96ba27fd16c0e25380 100644 |
--- a/content/renderer/scheduler/task_queue_manager_unittest.cc |
+++ b/content/renderer/scheduler/task_queue_manager_unittest.cc |
@@ -480,5 +480,36 @@ TEST_F(TaskQueueManagerTest, PostFromNestedRunloop) { |
EXPECT_THAT(run_order, ElementsAre(0, 2, 1)); |
} |
+TEST_F(TaskQueueManagerTest, WorkBatching) { |
+ Initialize(1u); |
+ |
+ manager_->SetWorkBatchSize(2); |
+ |
+ std::vector<int> run_order; |
+ scoped_refptr<base::SingleThreadTaskRunner> runner = |
+ manager_->TaskRunnerForQueue(0); |
+ |
+ selector_->AppendQueueToService(0); |
+ selector_->AppendQueueToService(0); |
+ selector_->AppendQueueToService(0); |
+ selector_->AppendQueueToService(0); |
+ |
+ runner->PostTask(FROM_HERE, base::Bind(&TestTask, 1, &run_order)); |
+ runner->PostTask(FROM_HERE, base::Bind(&TestTask, 2, &run_order)); |
+ runner->PostTask(FROM_HERE, base::Bind(&TestTask, 3, &run_order)); |
+ runner->PostTask(FROM_HERE, base::Bind(&TestTask, 4, &run_order)); |
+ |
+ // Running one task in the host message loop should cause two posted tasks to |
+ // get executed. |
+ EXPECT_EQ(test_task_runner_->GetPendingTasks().size(), 1u); |
+ test_task_runner_->RunPendingTasks(); |
+ EXPECT_THAT(run_order, ElementsAre(1, 2)); |
+ |
+ // The second task runs the remaining two posted tasks. |
+ EXPECT_EQ(test_task_runner_->GetPendingTasks().size(), 1u); |
+ test_task_runner_->RunPendingTasks(); |
+ EXPECT_THAT(run_order, ElementsAre(1, 2, 3, 4)); |
+} |
+ |
} // namespace |
} // namespace content |