| OLD | NEW |
| 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 75 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 86 | 86 |
| 87 void RepostingUpdateClockIdleTestTask( | 87 void RepostingUpdateClockIdleTestTask( |
| 88 SingleThreadIdleTaskRunner* idle_task_runner, | 88 SingleThreadIdleTaskRunner* idle_task_runner, |
| 89 int* run_count, | 89 int* run_count, |
| 90 base::SimpleTestTickClock* clock, | 90 base::SimpleTestTickClock* clock, |
| 91 base::TimeDelta advance_time, | 91 base::TimeDelta advance_time, |
| 92 std::vector<base::TimeTicks>* deadlines, | 92 std::vector<base::TimeTicks>* deadlines, |
| 93 base::TimeTicks deadline) { | 93 base::TimeTicks deadline) { |
| 94 if ((*run_count + 1) < max_idle_task_reposts) { | 94 if ((*run_count + 1) < max_idle_task_reposts) { |
| 95 idle_task_runner->PostIdleTask( | 95 idle_task_runner->PostIdleTask( |
| 96 FROM_HERE, base::Bind(&RepostingUpdateClockIdleTestTask, | 96 FROM_HERE, |
| 97 base::Unretained(idle_task_runner), run_count, | 97 base::Bind(&RepostingUpdateClockIdleTestTask, |
| 98 clock, advance_time, deadlines)); | 98 base::Unretained(idle_task_runner), run_count, clock, |
| 99 advance_time, deadlines)); |
| 99 } | 100 } |
| 100 deadlines->push_back(deadline); | 101 deadlines->push_back(deadline); |
| 101 (*run_count)++; | 102 (*run_count)++; |
| 102 clock->Advance(advance_time); | 103 clock->Advance(advance_time); |
| 103 } | 104 } |
| 104 | 105 |
| 105 void RepeatingTask(base::SingleThreadTaskRunner* task_runner, | 106 void RepeatingTask(base::SingleThreadTaskRunner* task_runner, |
| 106 int num_repeats, | 107 int num_repeats, |
| 107 base::TimeDelta delay) { | 108 base::TimeDelta delay) { |
| 108 if (num_repeats > 1) { | 109 if (num_repeats > 1) { |
| 109 task_runner->PostDelayedTask( | 110 task_runner->PostDelayedTask( |
| 110 FROM_HERE, base::Bind(&RepeatingTask, base::Unretained(task_runner), | 111 FROM_HERE, |
| 111 num_repeats - 1, delay), | 112 base::Bind(&RepeatingTask, base::Unretained(task_runner), |
| 113 num_repeats - 1, delay), |
| 112 delay); | 114 delay); |
| 113 } | 115 } |
| 114 } | 116 } |
| 115 | 117 |
| 116 void UpdateClockIdleTestTask(base::SimpleTestTickClock* clock, | 118 void UpdateClockIdleTestTask(base::SimpleTestTickClock* clock, |
| 117 int* run_count, | 119 int* run_count, |
| 118 base::TimeTicks set_time, | 120 base::TimeTicks set_time, |
| 119 base::TimeTicks deadline) { | 121 base::TimeTicks deadline) { |
| 120 clock->Advance(set_time - clock->NowTicks()); | 122 clock->Advance(set_time - clock->NowTicks()); |
| 121 (*run_count)++; | 123 (*run_count)++; |
| (...skipping 151 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 273 static base::TimeDelta minimum_idle_period_duration() { | 275 static base::TimeDelta minimum_idle_period_duration() { |
| 274 return base::TimeDelta::FromMilliseconds( | 276 return base::TimeDelta::FromMilliseconds( |
| 275 IdleHelper::kMinimumIdlePeriodDurationMillis); | 277 IdleHelper::kMinimumIdlePeriodDurationMillis); |
| 276 } | 278 } |
| 277 | 279 |
| 278 base::TimeTicks CurrentIdleTaskDeadline() { | 280 base::TimeTicks CurrentIdleTaskDeadline() { |
| 279 return idle_helper_->CurrentIdleTaskDeadline(); | 281 return idle_helper_->CurrentIdleTaskDeadline(); |
| 280 } | 282 } |
| 281 | 283 |
| 282 void CheckIdlePeriodStateIs(const char* expected) { | 284 void CheckIdlePeriodStateIs(const char* expected) { |
| 283 EXPECT_STREQ(expected, IdleHelper::IdlePeriodStateToString( | 285 EXPECT_STREQ(expected, |
| 284 idle_helper_->SchedulerIdlePeriodState())); | 286 IdleHelper::IdlePeriodStateToString( |
| 287 idle_helper_->SchedulerIdlePeriodState())); |
| 285 } | 288 } |
| 286 | 289 |
| 287 const scoped_refptr<TaskQueue>& idle_queue() const { | 290 const scoped_refptr<TaskQueue>& idle_queue() const { |
| 288 return idle_helper_->idle_queue_; | 291 return idle_helper_->idle_queue_; |
| 289 } | 292 } |
| 290 | 293 |
| 291 std::unique_ptr<base::SimpleTestTickClock> clock_; | 294 std::unique_ptr<base::SimpleTestTickClock> clock_; |
| 292 // Only one of mock_task_runner_ or message_loop_ will be set. | 295 // Only one of mock_task_runner_ or message_loop_ will be set. |
| 293 scoped_refptr<cc::OrderedSimpleTaskRunner> mock_task_runner_; | 296 scoped_refptr<cc::OrderedSimpleTaskRunner> mock_task_runner_; |
| 294 std::unique_ptr<base::MessageLoop> message_loop_; | 297 std::unique_ptr<base::MessageLoop> message_loop_; |
| (...skipping 224 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 519 FROM_HERE, | 522 FROM_HERE, |
| 520 base::Bind(&IdleHelperWithMessageLoopTest::PostFromNestedRunloop, | 523 base::Bind(&IdleHelperWithMessageLoopTest::PostFromNestedRunloop, |
| 521 base::Unretained(this), | 524 base::Unretained(this), |
| 522 base::Unretained(&tasks_to_post_from_nested_loop))); | 525 base::Unretained(&tasks_to_post_from_nested_loop))); |
| 523 | 526 |
| 524 idle_helper_->StartIdlePeriod( | 527 idle_helper_->StartIdlePeriod( |
| 525 IdleHelper::IdlePeriodState::IN_SHORT_IDLE_PERIOD, clock_->NowTicks(), | 528 IdleHelper::IdlePeriodState::IN_SHORT_IDLE_PERIOD, clock_->NowTicks(), |
| 526 clock_->NowTicks() + base::TimeDelta::FromMilliseconds(10)); | 529 clock_->NowTicks() + base::TimeDelta::FromMilliseconds(10)); |
| 527 RunUntilIdle(); | 530 RunUntilIdle(); |
| 528 // Note we expect task 3 to run last because it's non-nestable. | 531 // Note we expect task 3 to run last because it's non-nestable. |
| 529 EXPECT_THAT(order, testing::ElementsAre(std::string("1"), std::string("2"), | 532 EXPECT_THAT( |
| 530 std::string("4"), std::string("5"), | 533 order, |
| 531 std::string("3"))); | 534 testing::ElementsAre(std::string("1"), std::string("2"), std::string("4"), |
| 535 std::string("5"), std::string("3"))); |
| 532 } | 536 } |
| 533 | 537 |
| 534 TEST_F(IdleHelperTestWithIdlePeriodObserver, TestLongIdlePeriod) { | 538 TEST_F(IdleHelperTestWithIdlePeriodObserver, TestLongIdlePeriod) { |
| 535 base::TimeTicks expected_deadline = | 539 base::TimeTicks expected_deadline = |
| 536 clock_->NowTicks() + maximum_idle_period_duration(); | 540 clock_->NowTicks() + maximum_idle_period_duration(); |
| 537 base::TimeTicks deadline_in_task; | 541 base::TimeTicks deadline_in_task; |
| 538 int run_count = 0; | 542 int run_count = 0; |
| 539 | 543 |
| 540 idle_task_runner_->PostIdleTask( | 544 idle_task_runner_->PostIdleTask( |
| 541 FROM_HERE, base::Bind(&IdleTestTask, &run_count, &deadline_in_task)); | 545 FROM_HERE, base::Bind(&IdleTestTask, &run_count, &deadline_in_task)); |
| (...skipping 410 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 952 // Run a repeating task so we're deemed to be busy for the next 400ms. | 956 // Run a repeating task so we're deemed to be busy for the next 400ms. |
| 953 default_task_runner_->PostTask( | 957 default_task_runner_->PostTask( |
| 954 FROM_HERE, | 958 FROM_HERE, |
| 955 base::Bind(&RepeatingTask, base::Unretained(default_task_runner_.get()), | 959 base::Bind(&RepeatingTask, base::Unretained(default_task_runner_.get()), |
| 956 10, base::TimeDelta::FromMilliseconds(40))); | 960 10, base::TimeDelta::FromMilliseconds(40))); |
| 957 | 961 |
| 958 int run_count = 0; | 962 int run_count = 0; |
| 959 // In this scenario EnableLongIdlePeriod deems us not to be quiescent 5x in | 963 // In this scenario EnableLongIdlePeriod deems us not to be quiescent 5x in |
| 960 // a row. | 964 // a row. |
| 961 base::TimeTicks expected_deadline = | 965 base::TimeTicks expected_deadline = |
| 962 clock_->NowTicks() + base::TimeDelta::FromMilliseconds( | 966 clock_->NowTicks() + |
| 963 5 * kQuiescenceDelayMs + kLongIdlePeriodMs); | 967 base::TimeDelta::FromMilliseconds(5 * kQuiescenceDelayMs + |
| 968 kLongIdlePeriodMs); |
| 964 base::TimeTicks deadline_in_task; | 969 base::TimeTicks deadline_in_task; |
| 965 idle_task_runner_->PostIdleTask( | 970 idle_task_runner_->PostIdleTask( |
| 966 FROM_HERE, base::Bind(&IdleTestTask, &run_count, &deadline_in_task)); | 971 FROM_HERE, base::Bind(&IdleTestTask, &run_count, &deadline_in_task)); |
| 967 | 972 |
| 968 idle_helper_->EnableLongIdlePeriod(); | 973 idle_helper_->EnableLongIdlePeriod(); |
| 969 RunUntilIdle(); | 974 RunUntilIdle(); |
| 970 EXPECT_EQ(1, run_count); | 975 EXPECT_EQ(1, run_count); |
| 971 EXPECT_EQ(expected_deadline, deadline_in_task); | 976 EXPECT_EQ(expected_deadline, deadline_in_task); |
| 972 } | 977 } |
| 973 | 978 |
| (...skipping 139 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1113 expected_deadline); | 1118 expected_deadline); |
| 1114 EXPECT_EQ(1u, idle_queue()->GetNumberOfPendingTasks()); | 1119 EXPECT_EQ(1u, idle_queue()->GetNumberOfPendingTasks()); |
| 1115 RunUntilIdle(); | 1120 RunUntilIdle(); |
| 1116 | 1121 |
| 1117 EXPECT_EQ(1, run_count); | 1122 EXPECT_EQ(1, run_count); |
| 1118 EXPECT_EQ(expected_deadline, deadline_in_task); | 1123 EXPECT_EQ(expected_deadline, deadline_in_task); |
| 1119 } | 1124 } |
| 1120 | 1125 |
| 1121 } // namespace scheduler | 1126 } // namespace scheduler |
| 1122 } // namespace blink | 1127 } // namespace blink |
| OLD | NEW |