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

Side by Side Diff: components/scheduler/child/idle_helper_unittest.cc

Issue 1815363002: Add RetainedRef uses where needed. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 4 years, 9 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 "components/scheduler/child/idle_helper.h" 5 #include "components/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 330 matching lines...) Expand 10 before | Expand all | Expand 10 after
341 RunUntilIdle(); 341 RunUntilIdle();
342 EXPECT_EQ(0, run_count); 342 EXPECT_EQ(0, run_count);
343 } 343 }
344 344
345 TEST_F(IdleHelperTest, TestRepostingIdleTask) { 345 TEST_F(IdleHelperTest, TestRepostingIdleTask) {
346 base::TimeTicks actual_deadline; 346 base::TimeTicks actual_deadline;
347 int run_count = 0; 347 int run_count = 0;
348 348
349 max_idle_task_reposts = 2; 349 max_idle_task_reposts = 2;
350 idle_task_runner_->PostIdleTask( 350 idle_task_runner_->PostIdleTask(
351 FROM_HERE, base::Bind(&RepostingIdleTestTask, idle_task_runner_, 351 FROM_HERE,
352 &run_count, &actual_deadline)); 352 base::Bind(&RepostingIdleTestTask, base::RetainedRef(idle_task_runner_),
353 &run_count, &actual_deadline));
353 idle_helper_->StartIdlePeriod( 354 idle_helper_->StartIdlePeriod(
354 IdleHelper::IdlePeriodState::IN_SHORT_IDLE_PERIOD, clock_->NowTicks(), 355 IdleHelper::IdlePeriodState::IN_SHORT_IDLE_PERIOD, clock_->NowTicks(),
355 clock_->NowTicks() + base::TimeDelta::FromMilliseconds(10)); 356 clock_->NowTicks() + base::TimeDelta::FromMilliseconds(10));
356 RunUntilIdle(); 357 RunUntilIdle();
357 EXPECT_EQ(1, run_count); 358 EXPECT_EQ(1, run_count);
358 359
359 // Reposted tasks shouldn't run until next idle period. 360 // Reposted tasks shouldn't run until next idle period.
360 RunUntilIdle(); 361 RunUntilIdle();
361 EXPECT_EQ(1, run_count); 362 EXPECT_EQ(1, run_count);
362 363
(...skipping 300 matching lines...) Expand 10 before | Expand all | Expand 10 after
663 664
664 EXPECT_CALL(*idle_helper_, CanEnterLongIdlePeriod(_, _)) 665 EXPECT_CALL(*idle_helper_, CanEnterLongIdlePeriod(_, _))
665 .Times(4) 666 .Times(4)
666 .WillRepeatedly(Return(true)); 667 .WillRepeatedly(Return(true));
667 ExpectIdlePeriodStartsAndEnds(AtLeast(2)); 668 ExpectIdlePeriodStartsAndEnds(AtLeast(2));
668 669
669 max_idle_task_reposts = 3; 670 max_idle_task_reposts = 3;
670 base::TimeTicks clock_before(clock_->NowTicks()); 671 base::TimeTicks clock_before(clock_->NowTicks());
671 base::TimeDelta idle_task_runtime(base::TimeDelta::FromMilliseconds(10)); 672 base::TimeDelta idle_task_runtime(base::TimeDelta::FromMilliseconds(10));
672 idle_task_runner_->PostIdleTask( 673 idle_task_runner_->PostIdleTask(
673 FROM_HERE, base::Bind(&RepostingUpdateClockIdleTestTask, 674 FROM_HERE,
674 idle_task_runner_, &run_count, clock_.get(), 675 base::Bind(&RepostingUpdateClockIdleTestTask,
675 idle_task_runtime, &actual_deadlines)); 676 base::RetainedRef(idle_task_runner_), &run_count, clock_.get(),
677 idle_task_runtime, &actual_deadlines));
676 678
677 // Check each idle task runs in their own idle period. 679 // Check each idle task runs in their own idle period.
678 idle_helper_->EnableLongIdlePeriod(); 680 idle_helper_->EnableLongIdlePeriod();
679 RunUntilIdle(); 681 RunUntilIdle();
680 EXPECT_EQ(3, run_count); 682 EXPECT_EQ(3, run_count);
681 EXPECT_THAT( 683 EXPECT_THAT(
682 actual_deadlines, 684 actual_deadlines,
683 testing::ElementsAre( 685 testing::ElementsAre(
684 clock_before + maximum_idle_period_duration(), 686 clock_before + maximum_idle_period_duration(),
685 clock_before + idle_task_runtime + maximum_idle_period_duration(), 687 clock_before + idle_task_runtime + maximum_idle_period_duration(),
686 clock_before + (2 * idle_task_runtime) + 688 clock_before + (2 * idle_task_runtime) +
687 maximum_idle_period_duration())); 689 maximum_idle_period_duration()));
688 690
689 max_idle_task_reposts = 5; 691 max_idle_task_reposts = 5;
690 idle_task_runner_->PostIdleTask( 692 idle_task_runner_->PostIdleTask(
691 FROM_HERE, base::Bind(&RepostingUpdateClockIdleTestTask, 693 FROM_HERE,
692 idle_task_runner_, &run_count, clock_.get(), 694 base::Bind(&RepostingUpdateClockIdleTestTask,
693 idle_task_runtime, &actual_deadlines)); 695 base::RetainedRef(idle_task_runner_), &run_count, clock_.get(),
696 idle_task_runtime, &actual_deadlines));
694 idle_task_runner_->PostIdleTask( 697 idle_task_runner_->PostIdleTask(
695 FROM_HERE, 698 FROM_HERE,
696 base::Bind(&EndIdlePeriodIdleTask, base::Unretained(idle_helper_.get()))); 699 base::Bind(&EndIdlePeriodIdleTask, base::Unretained(idle_helper_.get())));
697 700
698 // Ensure that reposting tasks stop after EndIdlePeriod is called. 701 // Ensure that reposting tasks stop after EndIdlePeriod is called.
699 RunUntilIdle(); 702 RunUntilIdle();
700 EXPECT_EQ(4, run_count); 703 EXPECT_EQ(4, run_count);
701 } 704 }
702 705
703 TEST_F(IdleHelperTest, TestLongIdlePeriodDoesNotWakeScheduler) { 706 TEST_F(IdleHelperTest, TestLongIdlePeriodDoesNotWakeScheduler) {
(...skipping 75 matching lines...) Expand 10 before | Expand all | Expand 10 after
779 std::vector<base::TimeTicks> actual_deadlines; 782 std::vector<base::TimeTicks> actual_deadlines;
780 int run_count = 0; 783 int run_count = 0;
781 784
782 base::TimeTicks clock_before(clock_->NowTicks()); 785 base::TimeTicks clock_before(clock_->NowTicks());
783 base::TimeDelta idle_task_runtime(base::TimeDelta::FromMilliseconds(10)); 786 base::TimeDelta idle_task_runtime(base::TimeDelta::FromMilliseconds(10));
784 787
785 // The second idle period should happen immediately after the first the 788 // The second idle period should happen immediately after the first the
786 // they have max deadlines. 789 // they have max deadlines.
787 max_idle_task_reposts = 2; 790 max_idle_task_reposts = 2;
788 idle_task_runner_->PostIdleTask( 791 idle_task_runner_->PostIdleTask(
789 FROM_HERE, base::Bind(&RepostingUpdateClockIdleTestTask, 792 FROM_HERE,
790 idle_task_runner_, &run_count, clock_.get(), 793 base::Bind(&RepostingUpdateClockIdleTestTask,
791 idle_task_runtime, &actual_deadlines)); 794 base::RetainedRef(idle_task_runner_), &run_count, clock_.get(),
795 idle_task_runtime, &actual_deadlines));
792 796
793 idle_helper_->EnableLongIdlePeriod(); 797 idle_helper_->EnableLongIdlePeriod();
794 RunUntilIdle(); 798 RunUntilIdle();
795 EXPECT_EQ(2, run_count); 799 EXPECT_EQ(2, run_count);
796 EXPECT_THAT( 800 EXPECT_THAT(
797 actual_deadlines, 801 actual_deadlines,
798 testing::ElementsAre( 802 testing::ElementsAre(
799 clock_before + maximum_idle_period_duration(), 803 clock_before + maximum_idle_period_duration(),
800 clock_before + idle_task_runtime + maximum_idle_period_duration())); 804 clock_before + idle_task_runtime + maximum_idle_period_duration()));
801 } 805 }
802 806
803 TEST_F(IdleHelperTest, TestLongIdlePeriodRestartWaitsIfNotMaxDeadline) { 807 TEST_F(IdleHelperTest, TestLongIdlePeriodRestartWaitsIfNotMaxDeadline) {
804 base::TimeTicks actual_deadline; 808 base::TimeTicks actual_deadline;
805 int run_count = 0; 809 int run_count = 0;
806 810
807 base::TimeDelta pending_task_delay(base::TimeDelta::FromMilliseconds(20)); 811 base::TimeDelta pending_task_delay(base::TimeDelta::FromMilliseconds(20));
808 base::TimeDelta idle_task_duration(base::TimeDelta::FromMilliseconds(10)); 812 base::TimeDelta idle_task_duration(base::TimeDelta::FromMilliseconds(10));
809 base::TimeTicks expected_deadline(clock_->NowTicks() + pending_task_delay + 813 base::TimeTicks expected_deadline(clock_->NowTicks() + pending_task_delay +
810 maximum_idle_period_duration() + 814 maximum_idle_period_duration() +
811 retry_enable_long_idle_period_delay()); 815 retry_enable_long_idle_period_delay());
812 816
813 // Post delayed task to ensure idle period doesn't have a max deadline. 817 // Post delayed task to ensure idle period doesn't have a max deadline.
814 default_task_runner_->PostDelayedTask(FROM_HERE, base::Bind(&NullTask), 818 default_task_runner_->PostDelayedTask(FROM_HERE, base::Bind(&NullTask),
815 pending_task_delay); 819 pending_task_delay);
816 820
817 max_idle_task_reposts = 2; 821 max_idle_task_reposts = 2;
818 idle_task_runner_->PostIdleTask( 822 idle_task_runner_->PostIdleTask(
819 FROM_HERE, base::Bind(&RepostingIdleTestTask, idle_task_runner_, 823 FROM_HERE,
820 &run_count, &actual_deadline)); 824 base::Bind(&RepostingIdleTestTask, base::RetainedRef(idle_task_runner_),
825 &run_count, &actual_deadline));
821 idle_helper_->EnableLongIdlePeriod(); 826 idle_helper_->EnableLongIdlePeriod();
822 RunUntilIdle(); 827 RunUntilIdle();
823 EXPECT_EQ(1, run_count); 828 EXPECT_EQ(1, run_count);
824 clock_->Advance(idle_task_duration); 829 clock_->Advance(idle_task_duration);
825 830
826 // Next idle period shouldn't happen until the pending task has been run. 831 // Next idle period shouldn't happen until the pending task has been run.
827 RunUntilIdle(); 832 RunUntilIdle();
828 EXPECT_EQ(1, run_count); 833 EXPECT_EQ(1, run_count);
829 834
830 // Once the pending task is run the new idle period should start. 835 // Once the pending task is run the new idle period should start.
(...skipping 19 matching lines...) Expand all
850 // There shouldn't be any delayed tasks posted by the idle helper when paused. 855 // There shouldn't be any delayed tasks posted by the idle helper when paused.
851 base::TimeTicks next_pending_delayed_task; 856 base::TimeTicks next_pending_delayed_task;
852 EXPECT_FALSE(scheduler_helper_->real_time_domain()->NextScheduledRunTime( 857 EXPECT_FALSE(scheduler_helper_->real_time_domain()->NextScheduledRunTime(
853 &next_pending_delayed_task)); 858 &next_pending_delayed_task));
854 859
855 // Posting a task should transition us to the an active state. 860 // Posting a task should transition us to the an active state.
856 max_idle_task_reposts = 2; 861 max_idle_task_reposts = 2;
857 base::TimeTicks clock_before(clock_->NowTicks()); 862 base::TimeTicks clock_before(clock_->NowTicks());
858 base::TimeDelta idle_task_runtime(base::TimeDelta::FromMilliseconds(10)); 863 base::TimeDelta idle_task_runtime(base::TimeDelta::FromMilliseconds(10));
859 idle_task_runner_->PostIdleTask( 864 idle_task_runner_->PostIdleTask(
860 FROM_HERE, base::Bind(&RepostingUpdateClockIdleTestTask, 865 FROM_HERE,
861 idle_task_runner_, &run_count, clock_.get(), 866 base::Bind(&RepostingUpdateClockIdleTestTask,
862 idle_task_runtime, &actual_deadlines)); 867 base::RetainedRef(idle_task_runner_), &run_count, clock_.get(),
868 idle_task_runtime, &actual_deadlines));
863 RunUntilIdle(); 869 RunUntilIdle();
864 EXPECT_EQ(2, run_count); 870 EXPECT_EQ(2, run_count);
865 EXPECT_THAT( 871 EXPECT_THAT(
866 actual_deadlines, 872 actual_deadlines,
867 testing::ElementsAre( 873 testing::ElementsAre(
868 clock_before + maximum_idle_period_duration(), 874 clock_before + maximum_idle_period_duration(),
869 clock_before + idle_task_runtime + maximum_idle_period_duration())); 875 clock_before + idle_task_runtime + maximum_idle_period_duration()));
870 876
871 // Once all task have been run we should go back to the paused state. 877 // Once all task have been run we should go back to the paused state.
872 CheckIdlePeriodStateIs("in_long_idle_period_paused"); 878 CheckIdlePeriodStateIs("in_long_idle_period_paused");
(...skipping 123 matching lines...) Expand 10 before | Expand all | Expand 10 after
996 IdleHelperWithQuiescencePeriodTestWithIdlePeriodObserver); 1002 IdleHelperWithQuiescencePeriodTestWithIdlePeriodObserver);
997 }; 1003 };
998 1004
999 1005
1000 TEST_F(IdleHelperWithQuiescencePeriodTest, 1006 TEST_F(IdleHelperWithQuiescencePeriodTest,
1001 LongIdlePeriodStartsImmediatelyIfQuiescent) { 1007 LongIdlePeriodStartsImmediatelyIfQuiescent) {
1002 base::TimeTicks actual_deadline; 1008 base::TimeTicks actual_deadline;
1003 int run_count = 0; 1009 int run_count = 0;
1004 max_idle_task_reposts = 1; 1010 max_idle_task_reposts = 1;
1005 idle_task_runner_->PostIdleTask( 1011 idle_task_runner_->PostIdleTask(
1006 FROM_HERE, base::Bind(&RepostingIdleTestTask, idle_task_runner_, 1012 FROM_HERE,
1007 &run_count, &actual_deadline)); 1013 base::Bind(&RepostingIdleTestTask, base::RetainedRef(idle_task_runner_),
1014 &run_count, &actual_deadline));
1008 1015
1009 idle_helper_->EnableLongIdlePeriod(); 1016 idle_helper_->EnableLongIdlePeriod();
1010 RunUntilIdle(); 1017 RunUntilIdle();
1011 1018
1012 EXPECT_EQ(1, run_count); 1019 EXPECT_EQ(1, run_count);
1013 } 1020 }
1014 1021
1015 TEST_F(IdleHelperWithQuiescencePeriodTestWithIdlePeriodObserver, 1022 TEST_F(IdleHelperWithQuiescencePeriodTestWithIdlePeriodObserver,
1016 LongIdlePeriodDoesNotStartsImmediatelyIfBusy) { 1023 LongIdlePeriodDoesNotStartsImmediatelyIfBusy) {
1017 MakeNonQuiescent(); 1024 MakeNonQuiescent();
1018 EXPECT_CALL(*idle_helper_, OnIdlePeriodStarted()).Times(0); 1025 EXPECT_CALL(*idle_helper_, OnIdlePeriodStarted()).Times(0);
1019 EXPECT_CALL(*idle_helper_, OnIdlePeriodEnded()).Times(0); 1026 EXPECT_CALL(*idle_helper_, OnIdlePeriodEnded()).Times(0);
1020 EXPECT_CALL(*idle_helper_, CanEnterLongIdlePeriod(_, _)).Times(0); 1027 EXPECT_CALL(*idle_helper_, CanEnterLongIdlePeriod(_, _)).Times(0);
1021 EXPECT_CALL(*idle_helper_, IsNotQuiescent()).Times(AtLeast(1)); 1028 EXPECT_CALL(*idle_helper_, IsNotQuiescent()).Times(AtLeast(1));
1022 1029
1023 base::TimeTicks actual_deadline; 1030 base::TimeTicks actual_deadline;
1024 int run_count = 0; 1031 int run_count = 0;
1025 max_idle_task_reposts = 1; 1032 max_idle_task_reposts = 1;
1026 idle_task_runner_->PostIdleTask( 1033 idle_task_runner_->PostIdleTask(
1027 FROM_HERE, base::Bind(&RepostingIdleTestTask, idle_task_runner_, 1034 FROM_HERE,
1028 &run_count, &actual_deadline)); 1035 base::Bind(&RepostingIdleTestTask, base::RetainedRef(idle_task_runner_),
1036 &run_count, &actual_deadline));
1029 1037
1030 idle_helper_->EnableLongIdlePeriod(); 1038 idle_helper_->EnableLongIdlePeriod();
1031 RunUntilIdle(); 1039 RunUntilIdle();
1032 1040
1033 EXPECT_EQ(0, run_count); 1041 EXPECT_EQ(0, run_count);
1034 1042
1035 scheduler_helper_->Shutdown(); 1043 scheduler_helper_->Shutdown();
1036 } 1044 }
1037 1045
1038 TEST_F(IdleHelperWithQuiescencePeriodTest, 1046 TEST_F(IdleHelperWithQuiescencePeriodTest,
(...skipping 102 matching lines...) Expand 10 before | Expand all | Expand 10 after
1141 EXPECT_EQ(0, run_count); 1149 EXPECT_EQ(0, run_count);
1142 1150
1143 default_task_runner_->PostDelayedTask(FROM_HERE, base::Bind(&NullTask), 1151 default_task_runner_->PostDelayedTask(FROM_HERE, base::Bind(&NullTask),
1144 more_than_min_deadline_duration); 1152 more_than_min_deadline_duration);
1145 idle_helper_->EnableLongIdlePeriod(); 1153 idle_helper_->EnableLongIdlePeriod();
1146 RunUntilIdle(); 1154 RunUntilIdle();
1147 EXPECT_EQ(1, run_count); 1155 EXPECT_EQ(1, run_count);
1148 } 1156 }
1149 1157
1150 } // namespace scheduler 1158 } // namespace scheduler
OLDNEW
« no previous file with comments | « components/scheduler/base/task_queue_manager_unittest.cc ('k') | components/scheduler/child/scheduler_helper_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698