| 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 148 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 159 base::TimeDelta required_quiescence_duration_before_long_idle_period) | 159 base::TimeDelta required_quiescence_duration_before_long_idle_period) |
| 160 : IdleHelper(scheduler_helper, | 160 : IdleHelper(scheduler_helper, |
| 161 this, | 161 this, |
| 162 "test.idle", | 162 "test.idle", |
| 163 TRACE_DISABLED_BY_DEFAULT("test.idle"), | 163 TRACE_DISABLED_BY_DEFAULT("test.idle"), |
| 164 "TestSchedulerIdlePeriod", | 164 "TestSchedulerIdlePeriod", |
| 165 required_quiescence_duration_before_long_idle_period) {} | 165 required_quiescence_duration_before_long_idle_period) {} |
| 166 | 166 |
| 167 ~IdleHelperForTest() override {} | 167 ~IdleHelperForTest() override {} |
| 168 | 168 |
| 169 // SchedulerHelperDelegate implementation: | 169 // IdleHelper::Delegate implementation: |
| 170 MOCK_METHOD2(CanEnterLongIdlePeriod, | 170 MOCK_METHOD2(CanEnterLongIdlePeriod, |
| 171 bool(base::TimeTicks now, | 171 bool(base::TimeTicks now, |
| 172 base::TimeDelta* next_long_idle_period_delay_out)); | 172 base::TimeDelta* next_long_idle_period_delay_out)); |
| 173 | 173 |
| 174 MOCK_METHOD0(IsNotQuiescent, void()); | 174 MOCK_METHOD0(IsNotQuiescent, void()); |
| 175 MOCK_METHOD0(OnIdlePeriodStarted, void()); | 175 MOCK_METHOD0(OnIdlePeriodStarted, void()); |
| 176 MOCK_METHOD0(OnIdlePeriodEnded, void()); | 176 MOCK_METHOD0(OnIdlePeriodEnded, void()); |
| 177 }; | 177 }; |
| 178 | 178 |
| 179 class BaseIdleHelperTest : public testing::Test { | 179 class BaseIdleHelperTest : public testing::Test { |
| (...skipping 97 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 277 | 277 |
| 278 base::TimeTicks CurrentIdleTaskDeadline() { | 278 base::TimeTicks CurrentIdleTaskDeadline() { |
| 279 return idle_helper_->CurrentIdleTaskDeadline(); | 279 return idle_helper_->CurrentIdleTaskDeadline(); |
| 280 } | 280 } |
| 281 | 281 |
| 282 void CheckIdlePeriodStateIs(const char* expected) { | 282 void CheckIdlePeriodStateIs(const char* expected) { |
| 283 EXPECT_STREQ(expected, IdleHelper::IdlePeriodStateToString( | 283 EXPECT_STREQ(expected, IdleHelper::IdlePeriodStateToString( |
| 284 idle_helper_->SchedulerIdlePeriodState())); | 284 idle_helper_->SchedulerIdlePeriodState())); |
| 285 } | 285 } |
| 286 | 286 |
| 287 const scoped_refptr<TaskQueue>& idle_queue() const { |
| 288 return idle_helper_->idle_queue_; |
| 289 } |
| 290 |
| 287 std::unique_ptr<base::SimpleTestTickClock> clock_; | 291 std::unique_ptr<base::SimpleTestTickClock> clock_; |
| 288 // Only one of mock_task_runner_ or message_loop_ will be set. | 292 // Only one of mock_task_runner_ or message_loop_ will be set. |
| 289 scoped_refptr<cc::OrderedSimpleTaskRunner> mock_task_runner_; | 293 scoped_refptr<cc::OrderedSimpleTaskRunner> mock_task_runner_; |
| 290 std::unique_ptr<base::MessageLoop> message_loop_; | 294 std::unique_ptr<base::MessageLoop> message_loop_; |
| 291 | 295 |
| 292 scoped_refptr<SchedulerTqmDelegate> main_task_runner_; | 296 scoped_refptr<SchedulerTqmDelegate> main_task_runner_; |
| 293 std::unique_ptr<SchedulerHelper> scheduler_helper_; | 297 std::unique_ptr<SchedulerHelper> scheduler_helper_; |
| 294 std::unique_ptr<IdleHelperForTest> idle_helper_; | 298 std::unique_ptr<IdleHelperForTest> idle_helper_; |
| 295 scoped_refptr<base::SingleThreadTaskRunner> default_task_runner_; | 299 scoped_refptr<base::SingleThreadTaskRunner> default_task_runner_; |
| 296 scoped_refptr<SingleThreadIdleTaskRunner> idle_task_runner_; | 300 scoped_refptr<SingleThreadIdleTaskRunner> idle_task_runner_; |
| (...skipping 776 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1073 EXPECT_TRUE(shutdown_task_run); | 1077 EXPECT_TRUE(shutdown_task_run); |
| 1074 EXPECT_EQ(0, run_count); | 1078 EXPECT_EQ(0, run_count); |
| 1075 | 1079 |
| 1076 // Shutdown immediately after idle period started should prevent the idle | 1080 // Shutdown immediately after idle period started should prevent the idle |
| 1077 // task from running. | 1081 // task from running. |
| 1078 idle_helper_->Shutdown(); | 1082 idle_helper_->Shutdown(); |
| 1079 mock_task_runner_->RunUntilIdle(); | 1083 mock_task_runner_->RunUntilIdle(); |
| 1080 EXPECT_EQ(0, run_count); | 1084 EXPECT_EQ(0, run_count); |
| 1081 } | 1085 } |
| 1082 | 1086 |
| 1087 TEST_F(IdleHelperTest, TestPostDelayedIdleTask) { |
| 1088 int run_count = 0; |
| 1089 base::TimeTicks expected_deadline = |
| 1090 clock_->NowTicks() + base::TimeDelta::FromMilliseconds(2300); |
| 1091 base::TimeTicks deadline_in_task; |
| 1092 |
| 1093 // Posting a delayed idle task should not post anything on the underlying |
| 1094 // task queue until the delay is up. |
| 1095 idle_task_runner_->PostDelayedIdleTask( |
| 1096 FROM_HERE, base::TimeDelta::FromMilliseconds(200), |
| 1097 base::Bind(&IdleTestTask, &run_count, &deadline_in_task)); |
| 1098 EXPECT_EQ(0u, idle_queue()->GetNumberOfPendingTasks()); |
| 1099 |
| 1100 clock_->Advance(base::TimeDelta::FromMilliseconds(100)); |
| 1101 |
| 1102 // It shouldn't run until the delay is over even though we went idle. |
| 1103 idle_helper_->StartIdlePeriod( |
| 1104 IdleHelper::IdlePeriodState::IN_SHORT_IDLE_PERIOD, clock_->NowTicks(), |
| 1105 expected_deadline); |
| 1106 EXPECT_EQ(0u, idle_queue()->GetNumberOfPendingTasks()); |
| 1107 RunUntilIdle(); |
| 1108 EXPECT_EQ(0, run_count); |
| 1109 |
| 1110 clock_->Advance(base::TimeDelta::FromMilliseconds(100)); |
| 1111 idle_helper_->StartIdlePeriod( |
| 1112 IdleHelper::IdlePeriodState::IN_SHORT_IDLE_PERIOD, clock_->NowTicks(), |
| 1113 expected_deadline); |
| 1114 EXPECT_EQ(1u, idle_queue()->GetNumberOfPendingTasks()); |
| 1115 RunUntilIdle(); |
| 1116 |
| 1117 EXPECT_EQ(1, run_count); |
| 1118 EXPECT_EQ(expected_deadline, deadline_in_task); |
| 1119 } |
| 1120 |
| 1083 } // namespace scheduler | 1121 } // namespace scheduler |
| 1084 } // namespace blink | 1122 } // namespace blink |
| OLD | NEW |