| Index: components/scheduler/base/task_queue_manager_unittest.cc
|
| diff --git a/components/scheduler/base/task_queue_manager_unittest.cc b/components/scheduler/base/task_queue_manager_unittest.cc
|
| index 6396d36238b0ad4580534d4d77c4f6c8076c8189..34ddc13935e0a1fd78c74a15d71cd61d05727602 100644
|
| --- a/components/scheduler/base/task_queue_manager_unittest.cc
|
| +++ b/components/scheduler/base/task_queue_manager_unittest.cc
|
| @@ -22,6 +22,7 @@
|
| #include "testing/gmock/include/gmock/gmock.h"
|
|
|
| using testing::ElementsAre;
|
| +using testing::ElementsAreArray;
|
| using testing::_;
|
|
|
| namespace scheduler {
|
| @@ -1087,39 +1088,35 @@ void ExpensiveTestTask(int value,
|
| clock->Advance(base::TimeDelta::FromMilliseconds(1));
|
| }
|
|
|
| -TEST_F(TaskQueueManagerTest, ImmediateAndDelayedTaskRoundRobbin) {
|
| +TEST_F(TaskQueueManagerTest, ImmediateAndDelayedTaskInterleaving) {
|
| Initialize(1u);
|
|
|
| std::vector<int> run_order;
|
| base::TimeDelta delay = base::TimeDelta::FromMilliseconds(10);
|
| - runners_[0]->PostDelayedTask(
|
| - FROM_HERE, base::Bind(&ExpensiveTestTask, 10, now_src_.get(), &run_order),
|
| - delay);
|
| - runners_[0]->PostDelayedTask(
|
| - FROM_HERE, base::Bind(&ExpensiveTestTask, 11, now_src_.get(), &run_order),
|
| - delay);
|
| - runners_[0]->PostDelayedTask(
|
| - FROM_HERE, base::Bind(&ExpensiveTestTask, 12, now_src_.get(), &run_order),
|
| - delay);
|
| - runners_[0]->PostDelayedTask(
|
| - FROM_HERE, base::Bind(&ExpensiveTestTask, 13, now_src_.get(), &run_order),
|
| - delay);
|
| + for (int i = 10; i < 19; i++) {
|
| + runners_[0]->PostDelayedTask(
|
| + FROM_HERE,
|
| + base::Bind(&ExpensiveTestTask, i, now_src_.get(), &run_order),
|
| + delay);
|
| + }
|
|
|
| test_task_runner_->RunForPeriod(delay);
|
|
|
| - runners_[0]->PostTask(
|
| - FROM_HERE, base::Bind(&ExpensiveTestTask, 0, now_src_.get(), &run_order));
|
| - runners_[0]->PostTask(
|
| - FROM_HERE, base::Bind(&ExpensiveTestTask, 1, now_src_.get(), &run_order));
|
| - runners_[0]->PostTask(
|
| - FROM_HERE, base::Bind(&ExpensiveTestTask, 2, now_src_.get(), &run_order));
|
| - runners_[0]->PostTask(
|
| - FROM_HERE, base::Bind(&ExpensiveTestTask, 3, now_src_.get(), &run_order));
|
| + for (int i = 0; i < 9; i++) {
|
| + runners_[0]->PostTask(
|
| + FROM_HERE,
|
| + base::Bind(&ExpensiveTestTask, i, now_src_.get(), &run_order));
|
| + }
|
|
|
| test_task_runner_->SetAutoAdvanceNowToPendingTasks(true);
|
| test_task_runner_->RunUntilIdle();
|
|
|
| - EXPECT_THAT(run_order, ElementsAre(10, 0, 11, 1, 12, 2, 13, 3));
|
| + // Delayed tasks are not allowed to starve out immediate work which is why
|
| + // some of the immediate tasks run out of order.
|
| + int expected_run_order[] = {
|
| + 10, 11, 12, 13, 0, 14, 15, 16, 1, 17, 18, 2, 3, 4, 5, 6, 7, 8
|
| + };
|
| + EXPECT_THAT(run_order, ElementsAreArray(expected_run_order));
|
| }
|
|
|
| TEST_F(TaskQueueManagerTest,
|
| @@ -1593,7 +1590,8 @@ bool ShouldExit(QuadraticTask* quadratic_task, LinearTask* linear_task) {
|
|
|
| } // namespace
|
|
|
| -TEST_F(TaskQueueManagerTest, DelayedTasksDontStarveNonDelayedWork_SameQueue) {
|
| +TEST_F(TaskQueueManagerTest,
|
| + DelayedTasksDontBadlyStarveNonDelayedWork_SameQueue) {
|
| Initialize(1u);
|
|
|
| QuadraticTask quadratic_delayed_task(
|
| @@ -1614,7 +1612,7 @@ TEST_F(TaskQueueManagerTest, DelayedTasksDontStarveNonDelayedWork_SameQueue) {
|
| double ratio = static_cast<double>(linear_immediate_task.count()) /
|
| static_cast<double>(quadratic_delayed_task.count());
|
|
|
| - EXPECT_GT(ratio, 0.9);
|
| + EXPECT_GT(ratio, 0.333);
|
| EXPECT_LT(ratio, 1.1);
|
| }
|
|
|
| @@ -1647,7 +1645,7 @@ TEST_F(TaskQueueManagerTest, ImmediateWorkCanStarveDelayedTasks_SameQueue) {
|
| }
|
|
|
| TEST_F(TaskQueueManagerTest,
|
| - DelayedTasksDontStarveNonDelayedWork_DifferentQueue) {
|
| + DelayedTasksDontBadlyStarveNonDelayedWork_DifferentQueue) {
|
| Initialize(2u);
|
|
|
| QuadraticTask quadratic_delayed_task(
|
| @@ -1668,7 +1666,7 @@ TEST_F(TaskQueueManagerTest,
|
| double ratio = static_cast<double>(linear_immediate_task.count()) /
|
| static_cast<double>(quadratic_delayed_task.count());
|
|
|
| - EXPECT_GT(ratio, 0.9);
|
| + EXPECT_GT(ratio, 0.333);
|
| EXPECT_LT(ratio, 1.1);
|
| }
|
|
|
|
|