| OLD | NEW |
| 1 // Copyright 2014 The Chromium Authors. All rights reserved. | 1 // Copyright 2014 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #include "content/child/scheduler/scheduler_helper.h" | 5 #include "content/child/scheduler/scheduler_helper.h" |
| 6 | 6 |
| 7 #include "base/callback.h" | 7 #include "base/callback.h" |
| 8 #include "cc/test/ordered_simple_task_runner.h" | 8 #include "cc/test/ordered_simple_task_runner.h" |
| 9 #include "content/child/scheduler/nestable_task_runner_for_test.h" | 9 #include "content/child/scheduler/nestable_task_runner_for_test.h" |
| 10 #include "content/child/scheduler/scheduler_message_loop_delegate.h" | 10 #include "content/child/scheduler/scheduler_message_loop_delegate.h" |
| (...skipping 106 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 117 base::TimeDelta required_quiescence_duration_before_long_idle_period) | 117 base::TimeDelta required_quiescence_duration_before_long_idle_period) |
| 118 : SchedulerHelper(main_task_runner, | 118 : SchedulerHelper(main_task_runner, |
| 119 this, | 119 this, |
| 120 "test.scheduler", | 120 "test.scheduler", |
| 121 TRACE_DISABLED_BY_DEFAULT("test.scheduler"), | 121 TRACE_DISABLED_BY_DEFAULT("test.scheduler"), |
| 122 TASK_QUEUE_COUNT, | 122 TASK_QUEUE_COUNT, |
| 123 required_quiescence_duration_before_long_idle_period) {} | 123 required_quiescence_duration_before_long_idle_period) {} |
| 124 | 124 |
| 125 ~SchedulerHelperForTest() override {} | 125 ~SchedulerHelperForTest() override {} |
| 126 | 126 |
| 127 using SchedulerHelper::CanExceedIdleDeadlineIfRequired; | |
| 128 using SchedulerHelper::EndIdlePeriod; | |
| 129 using SchedulerHelper::StartIdlePeriod; | |
| 130 using SchedulerHelper::EnableLongIdlePeriod; | |
| 131 | |
| 132 // SchedulerHelperDelegate implementation: | 127 // SchedulerHelperDelegate implementation: |
| 133 MOCK_METHOD2(CanEnterLongIdlePeriod, | 128 MOCK_METHOD2(CanEnterLongIdlePeriod, |
| 134 bool(base::TimeTicks now, | 129 bool(base::TimeTicks now, |
| 135 base::TimeDelta* next_long_idle_period_delay_out)); | 130 base::TimeDelta* next_long_idle_period_delay_out)); |
| 136 | 131 |
| 137 MOCK_METHOD0(IsNotQuiescent, void()); | 132 MOCK_METHOD0(IsNotQuiescent, void()); |
| 138 }; | 133 }; |
| 139 | 134 |
| 140 class BaseSchedulerHelperTest : public testing::Test { | 135 class BaseSchedulerHelperTest : public testing::Test { |
| 141 public: | 136 public: |
| (...skipping 90 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 232 | 227 |
| 233 DISALLOW_COPY_AND_ASSIGN(BaseSchedulerHelperTest); | 228 DISALLOW_COPY_AND_ASSIGN(BaseSchedulerHelperTest); |
| 234 }; | 229 }; |
| 235 | 230 |
| 236 class SchedulerHelperTest : public BaseSchedulerHelperTest { | 231 class SchedulerHelperTest : public BaseSchedulerHelperTest { |
| 237 public: | 232 public: |
| 238 SchedulerHelperTest() : BaseSchedulerHelperTest(nullptr, base::TimeDelta()) {} | 233 SchedulerHelperTest() : BaseSchedulerHelperTest(nullptr, base::TimeDelta()) {} |
| 239 | 234 |
| 240 ~SchedulerHelperTest() override {} | 235 ~SchedulerHelperTest() override {} |
| 241 | 236 |
| 237 TaskQueueManager* task_queue_manager() const { |
| 238 return scheduler_helper_->task_queue_manager_.get(); |
| 239 } |
| 240 |
| 242 private: | 241 private: |
| 243 DISALLOW_COPY_AND_ASSIGN(SchedulerHelperTest); | 242 DISALLOW_COPY_AND_ASSIGN(SchedulerHelperTest); |
| 244 }; | 243 }; |
| 245 | 244 |
| 246 TEST_F(SchedulerHelperTest, TestPostDefaultTask) { | 245 TEST_F(SchedulerHelperTest, TestPostDefaultTask) { |
| 247 std::vector<std::string> run_order; | 246 std::vector<std::string> run_order; |
| 248 PostTestTasks(&run_order, "D1 D2 D3 D4"); | 247 PostTestTasks(&run_order, "D1 D2 D3 D4"); |
| 249 | 248 |
| 250 RunUntilIdle(); | 249 RunUntilIdle(); |
| 251 EXPECT_THAT(run_order, | 250 EXPECT_THAT(run_order, |
| (...skipping 198 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 450 clock_->Now(), | 449 clock_->Now(), |
| 451 clock_->Now() + base::TimeDelta::FromMilliseconds(10), | 450 clock_->Now() + base::TimeDelta::FromMilliseconds(10), |
| 452 true); | 451 true); |
| 453 RunUntilIdle(); | 452 RunUntilIdle(); |
| 454 // Normal idle task should wake up after-wakeup idle task. | 453 // Normal idle task should wake up after-wakeup idle task. |
| 455 EXPECT_EQ(2, run_count); | 454 EXPECT_EQ(2, run_count); |
| 456 } | 455 } |
| 457 | 456 |
| 458 TEST_F(SchedulerHelperTest, TestDelayedEndIdlePeriod) { | 457 TEST_F(SchedulerHelperTest, TestDelayedEndIdlePeriod) { |
| 459 mock_task_runner_->SetAutoAdvanceNowToPendingTasks(true); | 458 mock_task_runner_->SetAutoAdvanceNowToPendingTasks(true); |
| 460 TaskQueueManager* task_queue_manager = | |
| 461 scheduler_helper_->SchedulerTaskQueueManager(); | |
| 462 | 459 |
| 463 EXPECT_CALL(*scheduler_helper_, CanEnterLongIdlePeriod(_, _)) | 460 EXPECT_CALL(*scheduler_helper_, CanEnterLongIdlePeriod(_, _)) |
| 464 .Times(2) | 461 .Times(2) |
| 465 .WillRepeatedly(Return(true)); | 462 .WillRepeatedly(Return(true)); |
| 466 | 463 |
| 467 // We need an idle task posted or EnableLongIdlePeriod will use the | 464 // We need an idle task posted or EnableLongIdlePeriod will use the |
| 468 // control_task_after_wakeup_runner_ instead of the control_task_runner_. | 465 // control_task_after_wakeup_runner_ instead of the control_task_runner_. |
| 469 idle_task_runner_->PostIdleTask(FROM_HERE, base::Bind(&NullIdleTask)); | 466 idle_task_runner_->PostIdleTask(FROM_HERE, base::Bind(&NullIdleTask)); |
| 470 scheduler_helper_->EnableLongIdlePeriod(); | 467 scheduler_helper_->EnableLongIdlePeriod(); |
| 471 | 468 |
| 472 // Check there is a pending delayed task. | 469 // Check there is a pending delayed task. |
| 473 EXPECT_GT( | 470 EXPECT_GT(task_queue_manager()->NextPendingDelayedTaskRunTime(), |
| 474 task_queue_manager->NextPendingDelayedTaskRunTime(), base::TimeTicks()); | 471 base::TimeTicks()); |
| 475 | 472 |
| 476 RunUntilIdle(); | 473 RunUntilIdle(); |
| 477 | 474 |
| 478 // If the delayed task ran, it will an EnableLongIdlePeriod on the control | 475 // If the delayed task ran, it will an EnableLongIdlePeriod on the control |
| 479 // task after wake up queue. | 476 // task after wake up queue. |
| 480 EXPECT_FALSE(task_queue_manager->IsQueueEmpty( | 477 EXPECT_FALSE(task_queue_manager()->IsQueueEmpty( |
| 481 SchedulerHelper::CONTROL_TASK_AFTER_WAKEUP_QUEUE)); | 478 SchedulerHelper::CONTROL_TASK_AFTER_WAKEUP_QUEUE)); |
| 482 } | 479 } |
| 483 | 480 |
| 484 TEST_F(SchedulerHelperTest, TestDelayedEndIdlePeriodCanceled) { | 481 TEST_F(SchedulerHelperTest, TestDelayedEndIdlePeriodCanceled) { |
| 485 mock_task_runner_->SetAutoAdvanceNowToPendingTasks(true); | 482 mock_task_runner_->SetAutoAdvanceNowToPendingTasks(true); |
| 486 TaskQueueManager* task_queue_manager = | |
| 487 scheduler_helper_->SchedulerTaskQueueManager(); | |
| 488 | 483 |
| 489 EXPECT_CALL(*scheduler_helper_, CanEnterLongIdlePeriod(_, _)) | 484 EXPECT_CALL(*scheduler_helper_, CanEnterLongIdlePeriod(_, _)) |
| 490 .Times(1) | 485 .Times(1) |
| 491 .WillRepeatedly(Return(true)); | 486 .WillRepeatedly(Return(true)); |
| 492 | 487 |
| 493 // We need an idle task posted or EnableLongIdlePeriod will use the | 488 // We need an idle task posted or EnableLongIdlePeriod will use the |
| 494 // control_task_after_wakeup_runner_ instead of the control_task_runner_. | 489 // control_task_after_wakeup_runner_ instead of the control_task_runner_. |
| 495 idle_task_runner_->PostIdleTask(FROM_HERE, base::Bind(&NullIdleTask)); | 490 idle_task_runner_->PostIdleTask(FROM_HERE, base::Bind(&NullIdleTask)); |
| 496 scheduler_helper_->EnableLongIdlePeriod(); | 491 scheduler_helper_->EnableLongIdlePeriod(); |
| 497 | 492 |
| 498 // Check there is a pending delayed task. | 493 // Check there is a pending delayed task. |
| 499 EXPECT_GT( | 494 EXPECT_GT(task_queue_manager()->NextPendingDelayedTaskRunTime(), |
| 500 task_queue_manager->NextPendingDelayedTaskRunTime(), base::TimeTicks()); | 495 base::TimeTicks()); |
| 501 | 496 |
| 502 scheduler_helper_->EndIdlePeriod(); | 497 scheduler_helper_->EndIdlePeriod(); |
| 503 RunUntilIdle(); | 498 RunUntilIdle(); |
| 504 | 499 |
| 505 // If the delayed task didn't run, there will be nothing on the control task | 500 // If the delayed task didn't run, there will be nothing on the control task |
| 506 // after wake up queue. | 501 // after wake up queue. |
| 507 EXPECT_TRUE(task_queue_manager->IsQueueEmpty( | 502 EXPECT_TRUE(scheduler_helper_->IsQueueEmpty( |
| 508 SchedulerHelper::CONTROL_TASK_AFTER_WAKEUP_QUEUE)); | 503 SchedulerHelper::CONTROL_TASK_AFTER_WAKEUP_QUEUE)); |
| 509 } | 504 } |
| 510 | 505 |
| 511 class SchedulerHelperWithMessageLoopTest : public BaseSchedulerHelperTest { | 506 class SchedulerHelperWithMessageLoopTest : public BaseSchedulerHelperTest { |
| 512 public: | 507 public: |
| 513 SchedulerHelperWithMessageLoopTest() | 508 SchedulerHelperWithMessageLoopTest() |
| 514 : BaseSchedulerHelperTest(new base::MessageLoop(), base::TimeDelta()) {} | 509 : BaseSchedulerHelperTest(new base::MessageLoop(), base::TimeDelta()) {} |
| 515 ~SchedulerHelperWithMessageLoopTest() override {} | 510 ~SchedulerHelperWithMessageLoopTest() override {} |
| 516 | 511 |
| 517 void PostFromNestedRunloop(std::vector< | 512 void PostFromNestedRunloop(std::vector< |
| (...skipping 419 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 937 clock_->Now() + | 932 clock_->Now() + |
| 938 base::TimeDelta::FromMilliseconds(kQuiescenceDelayMs + kLongIdlePeriodMs); | 933 base::TimeDelta::FromMilliseconds(kQuiescenceDelayMs + kLongIdlePeriodMs); |
| 939 default_task_runner_->PostTask(FROM_HERE, base::Bind(NullTask)); | 934 default_task_runner_->PostTask(FROM_HERE, base::Bind(NullTask)); |
| 940 RunUntilIdle(); | 935 RunUntilIdle(); |
| 941 | 936 |
| 942 EXPECT_EQ(1, run_count); | 937 EXPECT_EQ(1, run_count); |
| 943 EXPECT_EQ(expected_deadline, deadline_in_task); | 938 EXPECT_EQ(expected_deadline, deadline_in_task); |
| 944 } | 939 } |
| 945 | 940 |
| 946 } // namespace content | 941 } // namespace content |
| OLD | NEW |