Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(412)

Side by Side Diff: content/child/scheduler/scheduler_helper_unittest.cc

Issue 1059323003: scheduler: Encapsulate TaskQueueManager inside SchedulerHelper (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: GCC build fix. Created 5 years, 8 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
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
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
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
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
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
OLDNEW
« no previous file with comments | « content/child/scheduler/scheduler_helper.cc ('k') | content/renderer/scheduler/renderer_scheduler_impl.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698