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

Side by Side Diff: third_party/WebKit/Source/platform/scheduler/child/idle_helper_unittest.cc

Issue 2276353002: Remove after wakeup logic and replace PumpTask with Fences (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Slight simplification Created 4 years, 3 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 2015 The Chromium Authors. All rights reserved. 1 // Copyright 2015 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 "platform/scheduler/child/idle_helper.h" 5 #include "platform/scheduler/child/idle_helper.h"
6 6
7 #include <utility> 7 #include <utility>
8 8
9 #include "base/callback.h" 9 #include "base/callback.h"
10 #include "base/macros.h" 10 #include "base/macros.h"
(...skipping 378 matching lines...) Expand 10 before | Expand all | Expand 10 after
389 389
390 idle_helper_->EndIdlePeriod(); 390 idle_helper_->EndIdlePeriod();
391 idle_helper_->StartIdlePeriod( 391 idle_helper_->StartIdlePeriod(
392 IdleHelper::IdlePeriodState::IN_SHORT_IDLE_PERIOD, clock_->NowTicks(), 392 IdleHelper::IdlePeriodState::IN_SHORT_IDLE_PERIOD, clock_->NowTicks(),
393 clock_->NowTicks() + base::TimeDelta::FromMilliseconds(10)); 393 clock_->NowTicks() + base::TimeDelta::FromMilliseconds(10));
394 RunUntilIdle(); 394 RunUntilIdle();
395 // Second task should be run on the next idle period. 395 // Second task should be run on the next idle period.
396 EXPECT_EQ(2, run_count); 396 EXPECT_EQ(2, run_count);
397 } 397 }
398 398
399 TEST_F(IdleHelperTest, TestPostIdleTaskAfterWakeup) {
400 base::TimeTicks deadline_in_task;
401 int run_count = 0;
402
403 idle_task_runner_->PostIdleTaskAfterWakeup(
404 FROM_HERE, base::Bind(&IdleTestTask, &run_count, &deadline_in_task));
405
406 idle_helper_->StartIdlePeriod(
407 IdleHelper::IdlePeriodState::IN_SHORT_IDLE_PERIOD, clock_->NowTicks(),
408 clock_->NowTicks() + base::TimeDelta::FromMilliseconds(10));
409 RunUntilIdle();
410 // Shouldn't run yet as no other task woke up the scheduler.
411 EXPECT_EQ(0, run_count);
412
413 // Must start a new idle period before idle task runs.
414 idle_task_runner_->PostIdleTaskAfterWakeup(
415 FROM_HERE, base::Bind(&IdleTestTask, &run_count, &deadline_in_task));
416
417 idle_helper_->StartIdlePeriod(
418 IdleHelper::IdlePeriodState::IN_SHORT_IDLE_PERIOD, clock_->NowTicks(),
419 clock_->NowTicks() + base::TimeDelta::FromMilliseconds(10));
420 RunUntilIdle();
421 // Another after wakeup idle task shouldn't wake the scheduler.
422 EXPECT_EQ(0, run_count);
423
424 default_task_runner_->PostTask(FROM_HERE, base::Bind(&NullTask));
425
426 RunUntilIdle();
427 idle_helper_->StartIdlePeriod(
428 IdleHelper::IdlePeriodState::IN_SHORT_IDLE_PERIOD, clock_->NowTicks(),
429 clock_->NowTicks() + base::TimeDelta::FromMilliseconds(10));
430 RunUntilIdle();
431 // Execution of default task queue task should trigger execution of idle task.
432 EXPECT_EQ(2, run_count);
433 }
434
435 TEST_F(IdleHelperTest, TestPostIdleTaskAfterWakeupWhileAwake) {
436 base::TimeTicks deadline_in_task;
437 int run_count = 0;
438
439 idle_task_runner_->PostIdleTaskAfterWakeup(
440 FROM_HERE, base::Bind(&IdleTestTask, &run_count, &deadline_in_task));
441 default_task_runner_->PostTask(FROM_HERE, base::Bind(&NullTask));
442
443 RunUntilIdle();
444 // Must start a new idle period before idle task runs.
445 idle_helper_->StartIdlePeriod(
446 IdleHelper::IdlePeriodState::IN_SHORT_IDLE_PERIOD, clock_->NowTicks(),
447 clock_->NowTicks() + base::TimeDelta::FromMilliseconds(10));
448 RunUntilIdle();
449 // Should run as the scheduler was already awakened by the normal task.
450 EXPECT_EQ(1, run_count);
451 }
452
453 TEST_F(IdleHelperTest, TestPostIdleTaskWakesAfterWakeupIdleTask) {
454 base::TimeTicks deadline_in_task;
455 int run_count = 0;
456
457 idle_task_runner_->PostIdleTaskAfterWakeup(
458 FROM_HERE, base::Bind(&IdleTestTask, &run_count, &deadline_in_task));
459 idle_task_runner_->PostIdleTask(
460 FROM_HERE, base::Bind(&IdleTestTask, &run_count, &deadline_in_task));
461
462 idle_helper_->StartIdlePeriod(
463 IdleHelper::IdlePeriodState::IN_SHORT_IDLE_PERIOD, clock_->NowTicks(),
464 clock_->NowTicks() + base::TimeDelta::FromMilliseconds(10));
465 RunUntilIdle();
466 // Must start a new idle period before after-wakeup idle task runs.
467 idle_helper_->StartIdlePeriod(
468 IdleHelper::IdlePeriodState::IN_SHORT_IDLE_PERIOD, clock_->NowTicks(),
469 clock_->NowTicks() + base::TimeDelta::FromMilliseconds(10));
470 RunUntilIdle();
471 // Normal idle task should wake up after-wakeup idle task.
472 EXPECT_EQ(2, run_count);
473 }
474
475 class IdleHelperTestWithIdlePeriodObserver : public BaseIdleHelperTest { 399 class IdleHelperTestWithIdlePeriodObserver : public BaseIdleHelperTest {
476 public: 400 public:
477 IdleHelperTestWithIdlePeriodObserver() 401 IdleHelperTestWithIdlePeriodObserver()
478 : BaseIdleHelperTest(nullptr, base::TimeDelta()) {} 402 : BaseIdleHelperTest(nullptr, base::TimeDelta()) {}
479 403
480 ~IdleHelperTestWithIdlePeriodObserver() override {} 404 ~IdleHelperTestWithIdlePeriodObserver() override {}
481 405
482 void SetUp() override { 406 void SetUp() override {
483 // Don't set expectations on IdleHelper::Delegate. 407 // Don't set expectations on IdleHelper::Delegate.
484 } 408 }
(...skipping 213 matching lines...) Expand 10 before | Expand all | Expand 10 after
698 idle_task_runtime, &actual_deadlines)); 622 idle_task_runtime, &actual_deadlines));
699 idle_task_runner_->PostIdleTask( 623 idle_task_runner_->PostIdleTask(
700 FROM_HERE, 624 FROM_HERE,
701 base::Bind(&EndIdlePeriodIdleTask, base::Unretained(idle_helper_.get()))); 625 base::Bind(&EndIdlePeriodIdleTask, base::Unretained(idle_helper_.get())));
702 626
703 // Ensure that reposting tasks stop after EndIdlePeriod is called. 627 // Ensure that reposting tasks stop after EndIdlePeriod is called.
704 RunUntilIdle(); 628 RunUntilIdle();
705 EXPECT_EQ(4, run_count); 629 EXPECT_EQ(4, run_count);
706 } 630 }
707 631
708 TEST_F(IdleHelperTest, TestLongIdlePeriodDoesNotWakeScheduler) {
709 base::TimeTicks deadline_in_task;
710 int run_count = 0;
711
712 // Start a long idle period and get the time it should end.
713 idle_helper_->EnableLongIdlePeriod();
714 // The scheduler should not run the enable_next_long_idle_period task if
715 // there are no idle tasks and no other task woke up the scheduler, thus
716 // the idle period deadline shouldn't update at the end of the current long
717 // idle period.
718 base::TimeTicks idle_period_deadline = CurrentIdleTaskDeadline();
719 clock_->Advance(maximum_idle_period_duration());
720 RunUntilIdle();
721
722 base::TimeTicks new_idle_period_deadline = CurrentIdleTaskDeadline();
723 EXPECT_EQ(idle_period_deadline, new_idle_period_deadline);
724
725 // Posting a after-wakeup idle task also shouldn't wake the scheduler or
726 // initiate the next long idle period.
727 idle_task_runner_->PostIdleTaskAfterWakeup(
728 FROM_HERE, base::Bind(&IdleTestTask, &run_count, &deadline_in_task));
729 RunUntilIdle();
730 new_idle_period_deadline = CurrentIdleTaskDeadline();
731 EXPECT_EQ(idle_period_deadline, new_idle_period_deadline);
732 EXPECT_EQ(0, run_count);
733
734 // Running a normal task should initiate a new long idle period though.
735 default_task_runner_->PostTask(FROM_HERE, base::Bind(&NullTask));
736 RunUntilIdle();
737 new_idle_period_deadline = CurrentIdleTaskDeadline();
738 EXPECT_EQ(idle_period_deadline + maximum_idle_period_duration(),
739 new_idle_period_deadline);
740
741 EXPECT_EQ(1, run_count);
742 }
743
744 TEST_F(IdleHelperTestWithIdlePeriodObserver, 632 TEST_F(IdleHelperTestWithIdlePeriodObserver,
745 TestLongIdlePeriodWhenNotCanEnterLongIdlePeriod) { 633 TestLongIdlePeriodWhenNotCanEnterLongIdlePeriod) {
746 base::TimeDelta delay = base::TimeDelta::FromMilliseconds(1000); 634 base::TimeDelta delay = base::TimeDelta::FromMilliseconds(1000);
747 base::TimeDelta halfDelay = base::TimeDelta::FromMilliseconds(500); 635 base::TimeDelta halfDelay = base::TimeDelta::FromMilliseconds(500);
748 base::TimeTicks delayOver = clock_->NowTicks() + delay; 636 base::TimeTicks delayOver = clock_->NowTicks() + delay;
749 base::TimeTicks deadline_in_task; 637 base::TimeTicks deadline_in_task;
750 int run_count = 0; 638 int run_count = 0;
751 639
752 ON_CALL(*idle_helper_, CanEnterLongIdlePeriod(_, _)) 640 ON_CALL(*idle_helper_, CanEnterLongIdlePeriod(_, _))
753 .WillByDefault(Invoke( 641 .WillByDefault(Invoke(
(...skipping 396 matching lines...) Expand 10 before | Expand all | Expand 10 after
1150 1038
1151 default_task_runner_->PostDelayedTask(FROM_HERE, base::Bind(&NullTask), 1039 default_task_runner_->PostDelayedTask(FROM_HERE, base::Bind(&NullTask),
1152 more_than_min_deadline_duration); 1040 more_than_min_deadline_duration);
1153 idle_helper_->EnableLongIdlePeriod(); 1041 idle_helper_->EnableLongIdlePeriod();
1154 RunUntilIdle(); 1042 RunUntilIdle();
1155 EXPECT_EQ(1, run_count); 1043 EXPECT_EQ(1, run_count);
1156 } 1044 }
1157 1045
1158 } // namespace scheduler 1046 } // namespace scheduler
1159 } // namespace blink 1047 } // namespace blink
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698