| OLD | NEW |
| 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/renderer/scheduler/renderer_scheduler_impl.h" | 5 #include "content/renderer/scheduler/renderer_scheduler_impl.h" |
| 6 | 6 |
| 7 #include "base/callback.h" | 7 #include "base/callback.h" |
| 8 #include "cc/output/begin_frame_args.h" | 8 #include "cc/output/begin_frame_args.h" |
| 9 #include "cc/test/ordered_simple_task_runner.h" | 9 #include "cc/test/ordered_simple_task_runner.h" |
| 10 #include "content/renderer/scheduler/nestable_task_runner_for_test.h" | 10 #include "content/child/scheduler/nestable_task_runner_for_test.h" |
| 11 #include "content/renderer/scheduler/renderer_scheduler_message_loop_delegate.h" | 11 #include "content/child/scheduler/scheduler_message_loop_delegate.h" |
| 12 #include "testing/gmock/include/gmock/gmock.h" | 12 #include "testing/gmock/include/gmock/gmock.h" |
| 13 #include "testing/gtest/include/gtest/gtest.h" | 13 #include "testing/gtest/include/gtest/gtest.h" |
| 14 | 14 |
| 15 namespace content { | 15 namespace content { |
| 16 | 16 |
| 17 namespace { | 17 namespace { |
| 18 class FakeInputEvent : public blink::WebInputEvent { | 18 class FakeInputEvent : public blink::WebInputEvent { |
| 19 public: | 19 public: |
| 20 explicit FakeInputEvent(blink::WebInputEvent::Type event_type) | 20 explicit FakeInputEvent(blink::WebInputEvent::Type event_type) |
| 21 : WebInputEvent(sizeof(FakeInputEvent)) { | 21 : WebInputEvent(sizeof(FakeInputEvent)) { |
| (...skipping 11 matching lines...) Expand all Loading... |
| 33 std::string value) { | 33 std::string value) { |
| 34 vector->push_back(value); | 34 vector->push_back(value); |
| 35 } | 35 } |
| 36 | 36 |
| 37 void AppendToVectorIdleTestTask(std::vector<std::string>* vector, | 37 void AppendToVectorIdleTestTask(std::vector<std::string>* vector, |
| 38 std::string value, | 38 std::string value, |
| 39 base::TimeTicks deadline) { | 39 base::TimeTicks deadline) { |
| 40 AppendToVectorTestTask(vector, value); | 40 AppendToVectorTestTask(vector, value); |
| 41 } | 41 } |
| 42 | 42 |
| 43 void NullTask() { |
| 44 } |
| 45 |
| 46 void AppendToVectorReentrantTask( |
| 47 base::SingleThreadTaskRunner* task_runner, |
| 48 std::vector<int>* vector, |
| 49 int* reentrant_count, |
| 50 int max_reentrant_count) { |
| 51 vector->push_back((*reentrant_count)++); |
| 52 if (*reentrant_count < max_reentrant_count) { |
| 53 task_runner->PostTask( |
| 54 FROM_HERE, base::Bind(AppendToVectorReentrantTask, |
| 55 base::Unretained(task_runner), vector, |
| 56 reentrant_count, max_reentrant_count)); |
| 57 } |
| 58 } |
| 59 |
| 60 void IdleTestTask(int* run_count, |
| 61 base::TimeTicks* deadline_out, |
| 62 base::TimeTicks deadline) { |
| 63 (*run_count)++; |
| 64 *deadline_out = deadline; |
| 65 } |
| 66 |
| 67 int max_idle_task_reposts = 2; |
| 68 |
| 69 void RepostingIdleTestTask( |
| 70 SingleThreadIdleTaskRunner* idle_task_runner, |
| 71 int* run_count, |
| 72 base::TimeTicks deadline) { |
| 73 if ((*run_count + 1) < max_idle_task_reposts) { |
| 74 idle_task_runner->PostIdleTask( |
| 75 FROM_HERE, |
| 76 base::Bind(&RepostingIdleTestTask, base::Unretained(idle_task_runner), |
| 77 run_count)); |
| 78 } |
| 79 (*run_count)++; |
| 80 } |
| 81 |
| 82 void UpdateClockToDeadlineIdleTestTask( |
| 83 cc::TestNowSource* clock, |
| 84 base::SingleThreadTaskRunner* task_runner, |
| 85 int* run_count, |
| 86 base::TimeTicks deadline) { |
| 87 clock->SetNow(deadline); |
| 88 // Due to the way in which OrderedSimpleTestRunner orders tasks and the fact |
| 89 // that we updated the time within a task, the delayed pending task to call |
| 90 // EndIdlePeriod will not happen until after a TaskQueueManager DoWork, so |
| 91 // post a normal task here to ensure it runs before the next idle task. |
| 92 task_runner->PostTask(FROM_HERE, base::Bind(NullTask)); |
| 93 (*run_count)++; |
| 94 } |
| 95 |
| 96 void PostingYieldingTestTask( |
| 97 RendererSchedulerImpl* scheduler, |
| 98 base::SingleThreadTaskRunner* task_runner, |
| 99 bool simulate_input, |
| 100 bool* should_yield_before, |
| 101 bool* should_yield_after) { |
| 102 *should_yield_before = scheduler->ShouldYieldForHighPriorityWork(); |
| 103 task_runner->PostTask(FROM_HERE, base::Bind(NullTask)); |
| 104 if (simulate_input) { |
| 105 scheduler->DidReceiveInputEventOnCompositorThread( |
| 106 FakeInputEvent(blink::WebInputEvent::GestureFlingStart)); |
| 107 } |
| 108 *should_yield_after = scheduler->ShouldYieldForHighPriorityWork(); |
| 109 } |
| 110 |
| 111 void AnticipationTestTask(RendererSchedulerImpl* scheduler, |
| 112 bool simulate_input, |
| 113 bool* is_anticipated_before, |
| 114 bool* is_anticipated_after) { |
| 115 *is_anticipated_before = scheduler->IsHighPriorityWorkAnticipated(); |
| 116 if (simulate_input) { |
| 117 scheduler->DidReceiveInputEventOnCompositorThread( |
| 118 FakeInputEvent(blink::WebInputEvent::GestureFlingStart)); |
| 119 } |
| 120 *is_anticipated_after = scheduler->IsHighPriorityWorkAnticipated(); |
| 121 } |
| 43 }; // namespace | 122 }; // namespace |
| 44 | 123 |
| 45 class RendererSchedulerImplTest : public testing::Test { | 124 class RendererSchedulerImplTest : public testing::Test { |
| 46 public: | 125 public: |
| 47 using Policy = RendererSchedulerImpl::Policy; | 126 using Policy = RendererSchedulerImpl::Policy; |
| 48 | 127 |
| 49 RendererSchedulerImplTest() | 128 RendererSchedulerImplTest() |
| 50 : clock_(cc::TestNowSource::Create(5000)), | 129 : clock_(cc::TestNowSource::Create(5000)), |
| 51 mock_task_runner_(new cc::OrderedSimpleTaskRunner(clock_, false)), | 130 mock_task_runner_(new cc::OrderedSimpleTaskRunner(clock_, false)), |
| 52 nestable_task_runner_( | 131 nestable_task_runner_( |
| 53 NestableTaskRunnerForTest::Create(mock_task_runner_)), | 132 NestableTaskRunnerForTest::Create(mock_task_runner_)), |
| 54 scheduler_(new RendererSchedulerImpl(nestable_task_runner_)), | 133 scheduler_(new RendererSchedulerImpl(nestable_task_runner_)), |
| 55 default_task_runner_(scheduler_->DefaultTaskRunner()), | 134 default_task_runner_(scheduler_->DefaultTaskRunner()), |
| 56 compositor_task_runner_(scheduler_->CompositorTaskRunner()), | 135 compositor_task_runner_(scheduler_->CompositorTaskRunner()), |
| 57 loading_task_runner_(scheduler_->LoadingTaskRunner()), | 136 loading_task_runner_(scheduler_->LoadingTaskRunner()), |
| 58 idle_task_runner_(scheduler_->IdleTaskRunner()) { | 137 idle_task_runner_(scheduler_->IdleTaskRunner()) { |
| 59 scheduler_->SetTimeSourceForTesting(clock_); | 138 scheduler_->SetTimeSourceForTesting(clock_); |
| 60 } | 139 } |
| 61 | 140 |
| 62 RendererSchedulerImplTest(base::MessageLoop* message_loop) | 141 RendererSchedulerImplTest(base::MessageLoop* message_loop) |
| 63 : clock_(cc::TestNowSource::Create(5000)), | 142 : clock_(cc::TestNowSource::Create(5000)), |
| 64 message_loop_(message_loop), | 143 message_loop_(message_loop), |
| 65 nestable_task_runner_( | 144 nestable_task_runner_( |
| 66 RendererSchedulerMessageLoopDelegate::Create(message_loop)), | 145 SchedulerMessageLoopDelegate::Create(message_loop)), |
| 67 scheduler_(new RendererSchedulerImpl(nestable_task_runner_)), | 146 scheduler_(new RendererSchedulerImpl(nestable_task_runner_)), |
| 68 default_task_runner_(scheduler_->DefaultTaskRunner()), | 147 default_task_runner_(scheduler_->DefaultTaskRunner()), |
| 69 compositor_task_runner_(scheduler_->CompositorTaskRunner()), | 148 compositor_task_runner_(scheduler_->CompositorTaskRunner()), |
| 70 loading_task_runner_(scheduler_->LoadingTaskRunner()), | 149 loading_task_runner_(scheduler_->LoadingTaskRunner()), |
| 71 idle_task_runner_(scheduler_->IdleTaskRunner()) { | 150 idle_task_runner_(scheduler_->IdleTaskRunner()) { |
| 72 scheduler_->SetTimeSourceForTesting(clock_); | 151 scheduler_->SetTimeSourceForTesting(clock_); |
| 73 } | 152 } |
| 74 ~RendererSchedulerImplTest() override {} | 153 ~RendererSchedulerImplTest() override {} |
| 75 | 154 |
| 76 void TearDown() override { | 155 void TearDown() override { |
| (...skipping 76 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 153 } | 232 } |
| 154 | 233 |
| 155 protected: | 234 protected: |
| 156 static base::TimeDelta priority_escalation_after_input_duration() { | 235 static base::TimeDelta priority_escalation_after_input_duration() { |
| 157 return base::TimeDelta::FromMilliseconds( | 236 return base::TimeDelta::FromMilliseconds( |
| 158 RendererSchedulerImpl::kPriorityEscalationAfterInputMillis); | 237 RendererSchedulerImpl::kPriorityEscalationAfterInputMillis); |
| 159 } | 238 } |
| 160 | 239 |
| 161 static base::TimeDelta maximum_idle_period_duration() { | 240 static base::TimeDelta maximum_idle_period_duration() { |
| 162 return base::TimeDelta::FromMilliseconds( | 241 return base::TimeDelta::FromMilliseconds( |
| 163 RendererSchedulerImpl::kMaximumIdlePeriodMillis); | 242 SchedulerHelper::kMaximumIdlePeriodMillis); |
| 164 } | |
| 165 | |
| 166 base::TimeTicks CurrentIdleTaskDeadline() { | |
| 167 base::TimeTicks deadline; | |
| 168 scheduler_->CurrentIdleTaskDeadlineCallback(&deadline); | |
| 169 return deadline; | |
| 170 } | 243 } |
| 171 | 244 |
| 172 scoped_refptr<cc::TestNowSource> clock_; | 245 scoped_refptr<cc::TestNowSource> clock_; |
| 173 // Only one of mock_task_runner_ or message_loop_ will be set. | 246 // Only one of mock_task_runner_ or message_loop_ will be set. |
| 174 scoped_refptr<cc::OrderedSimpleTaskRunner> mock_task_runner_; | 247 scoped_refptr<cc::OrderedSimpleTaskRunner> mock_task_runner_; |
| 175 scoped_ptr<base::MessageLoop> message_loop_; | 248 scoped_ptr<base::MessageLoop> message_loop_; |
| 176 | 249 |
| 177 scoped_refptr<NestableSingleThreadTaskRunner> nestable_task_runner_; | 250 scoped_refptr<NestableSingleThreadTaskRunner> nestable_task_runner_; |
| 178 scoped_ptr<RendererSchedulerImpl> scheduler_; | 251 scoped_ptr<RendererSchedulerImpl> scheduler_; |
| 179 scoped_refptr<base::SingleThreadTaskRunner> default_task_runner_; | 252 scoped_refptr<base::SingleThreadTaskRunner> default_task_runner_; |
| 180 scoped_refptr<base::SingleThreadTaskRunner> compositor_task_runner_; | 253 scoped_refptr<base::SingleThreadTaskRunner> compositor_task_runner_; |
| 181 scoped_refptr<base::SingleThreadTaskRunner> loading_task_runner_; | 254 scoped_refptr<base::SingleThreadTaskRunner> loading_task_runner_; |
| 182 scoped_refptr<SingleThreadIdleTaskRunner> idle_task_runner_; | 255 scoped_refptr<SingleThreadIdleTaskRunner> idle_task_runner_; |
| 183 | 256 |
| 184 DISALLOW_COPY_AND_ASSIGN(RendererSchedulerImplTest); | 257 DISALLOW_COPY_AND_ASSIGN(RendererSchedulerImplTest); |
| 185 }; | 258 }; |
| 186 | 259 |
| 187 void NullTask() { | |
| 188 } | |
| 189 | |
| 190 void AppendToVectorReentrantTask( | |
| 191 scoped_refptr<base::SingleThreadTaskRunner> task_runner, | |
| 192 std::vector<int>* vector, | |
| 193 int* reentrant_count, | |
| 194 int max_reentrant_count) { | |
| 195 vector->push_back((*reentrant_count)++); | |
| 196 if (*reentrant_count < max_reentrant_count) { | |
| 197 task_runner->PostTask( | |
| 198 FROM_HERE, base::Bind(AppendToVectorReentrantTask, task_runner, vector, | |
| 199 reentrant_count, max_reentrant_count)); | |
| 200 } | |
| 201 } | |
| 202 | |
| 203 void IdleTestTask(int* run_count, | |
| 204 base::TimeTicks* deadline_out, | |
| 205 base::TimeTicks deadline) { | |
| 206 (*run_count)++; | |
| 207 *deadline_out = deadline; | |
| 208 } | |
| 209 | |
| 210 void RepostingIdleTestTask( | |
| 211 scoped_refptr<SingleThreadIdleTaskRunner> idle_task_runner, | |
| 212 int* run_count, | |
| 213 base::TimeTicks deadline) { | |
| 214 if (*run_count == 0) { | |
| 215 idle_task_runner->PostIdleTask( | |
| 216 FROM_HERE, | |
| 217 base::Bind(&RepostingIdleTestTask, idle_task_runner, run_count)); | |
| 218 } | |
| 219 (*run_count)++; | |
| 220 } | |
| 221 | |
| 222 void UpdateClockToDeadlineIdleTestTask( | |
| 223 scoped_refptr<cc::TestNowSource> clock, | |
| 224 scoped_refptr<base::SingleThreadTaskRunner> task_runner, | |
| 225 int* run_count, | |
| 226 base::TimeTicks deadline) { | |
| 227 clock->SetNow(deadline); | |
| 228 // Due to the way in which OrderedSimpleTestRunner orders tasks and the fact | |
| 229 // that we updated the time within a task, the delayed pending task to call | |
| 230 // EndIdlePeriod will not happen until after a TaskQueueManager DoWork, so | |
| 231 // post a normal task here to ensure it runs before the next idle task. | |
| 232 task_runner->PostTask(FROM_HERE, base::Bind(NullTask)); | |
| 233 (*run_count)++; | |
| 234 } | |
| 235 | |
| 236 void PostingYieldingTestTask( | |
| 237 RendererSchedulerImpl* scheduler, | |
| 238 scoped_refptr<base::SingleThreadTaskRunner> task_runner, | |
| 239 bool simulate_input, | |
| 240 bool* should_yield_before, | |
| 241 bool* should_yield_after) { | |
| 242 *should_yield_before = scheduler->ShouldYieldForHighPriorityWork(); | |
| 243 task_runner->PostTask(FROM_HERE, base::Bind(NullTask)); | |
| 244 if (simulate_input) { | |
| 245 scheduler->DidReceiveInputEventOnCompositorThread( | |
| 246 FakeInputEvent(blink::WebInputEvent::GestureFlingStart)); | |
| 247 } | |
| 248 *should_yield_after = scheduler->ShouldYieldForHighPriorityWork(); | |
| 249 } | |
| 250 | |
| 251 void AnticipationTestTask(RendererSchedulerImpl* scheduler, | |
| 252 bool simulate_input, | |
| 253 bool* is_anticipated_before, | |
| 254 bool* is_anticipated_after) { | |
| 255 *is_anticipated_before = scheduler->IsHighPriorityWorkAnticipated(); | |
| 256 if (simulate_input) { | |
| 257 scheduler->DidReceiveInputEventOnCompositorThread( | |
| 258 FakeInputEvent(blink::WebInputEvent::GestureFlingStart)); | |
| 259 } | |
| 260 *is_anticipated_after = scheduler->IsHighPriorityWorkAnticipated(); | |
| 261 } | |
| 262 | |
| 263 TEST_F(RendererSchedulerImplTest, TestPostDefaultTask) { | 260 TEST_F(RendererSchedulerImplTest, TestPostDefaultTask) { |
| 264 std::vector<std::string> run_order; | 261 std::vector<std::string> run_order; |
| 265 PostTestTasks(&run_order, "D1 D2 D3 D4"); | 262 PostTestTasks(&run_order, "D1 D2 D3 D4"); |
| 266 | 263 |
| 267 RunUntilIdle(); | 264 RunUntilIdle(); |
| 268 EXPECT_THAT(run_order, | 265 EXPECT_THAT(run_order, |
| 269 testing::ElementsAre(std::string("D1"), std::string("D2"), | 266 testing::ElementsAre(std::string("D1"), std::string("D2"), |
| 270 std::string("D3"), std::string("D4"))); | 267 std::string("D3"), std::string("D4"))); |
| 271 } | 268 } |
| 272 | 269 |
| (...skipping 46 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 319 clock_->AdvanceNow(base::TimeDelta::FromMilliseconds(800)); | 316 clock_->AdvanceNow(base::TimeDelta::FromMilliseconds(800)); |
| 320 scheduler_->DidCommitFrameToCompositor(); | 317 scheduler_->DidCommitFrameToCompositor(); |
| 321 RunUntilIdle(); | 318 RunUntilIdle(); |
| 322 EXPECT_EQ(1, run_count); | 319 EXPECT_EQ(1, run_count); |
| 323 EXPECT_EQ(expected_deadline, deadline_in_task); | 320 EXPECT_EQ(expected_deadline, deadline_in_task); |
| 324 } | 321 } |
| 325 | 322 |
| 326 TEST_F(RendererSchedulerImplTest, TestRepostingIdleTask) { | 323 TEST_F(RendererSchedulerImplTest, TestRepostingIdleTask) { |
| 327 int run_count = 0; | 324 int run_count = 0; |
| 328 | 325 |
| 326 max_idle_task_reposts = 2; |
| 329 idle_task_runner_->PostIdleTask( | 327 idle_task_runner_->PostIdleTask( |
| 330 FROM_HERE, | 328 FROM_HERE, |
| 331 base::Bind(&RepostingIdleTestTask, idle_task_runner_, &run_count)); | 329 base::Bind(&RepostingIdleTestTask, idle_task_runner_, &run_count)); |
| 332 EnableIdleTasks(); | 330 EnableIdleTasks(); |
| 333 RunUntilIdle(); | 331 RunUntilIdle(); |
| 334 EXPECT_EQ(1, run_count); | 332 EXPECT_EQ(1, run_count); |
| 335 | 333 |
| 336 // Reposted tasks shouldn't run until next idle period. | 334 // Reposted tasks shouldn't run until next idle period. |
| 337 RunUntilIdle(); | 335 RunUntilIdle(); |
| 338 EXPECT_EQ(1, run_count); | 336 EXPECT_EQ(1, run_count); |
| (...skipping 816 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1155 | 1153 |
| 1156 // After the delayed task has been run we should trigger an idle period. | 1154 // After the delayed task has been run we should trigger an idle period. |
| 1157 clock_->AdvanceNow(maximum_idle_period_duration()); | 1155 clock_->AdvanceNow(maximum_idle_period_duration()); |
| 1158 RunUntilIdle(); | 1156 RunUntilIdle(); |
| 1159 EXPECT_EQ(1, run_count); | 1157 EXPECT_EQ(1, run_count); |
| 1160 } | 1158 } |
| 1161 | 1159 |
| 1162 TEST_F(RendererSchedulerImplTest, TestLongIdlePeriodRepeating) { | 1160 TEST_F(RendererSchedulerImplTest, TestLongIdlePeriodRepeating) { |
| 1163 int run_count = 0; | 1161 int run_count = 0; |
| 1164 | 1162 |
| 1163 max_idle_task_reposts = 3; |
| 1165 idle_task_runner_->PostIdleTask( | 1164 idle_task_runner_->PostIdleTask( |
| 1166 FROM_HERE, | 1165 FROM_HERE, |
| 1167 base::Bind(&RepostingIdleTestTask, idle_task_runner_, &run_count)); | 1166 base::Bind(&RepostingIdleTestTask, idle_task_runner_, &run_count)); |
| 1168 | 1167 |
| 1169 scheduler_->BeginFrameNotExpectedSoon(); | 1168 scheduler_->BeginFrameNotExpectedSoon(); |
| 1170 RunUntilIdle(); | 1169 RunUntilIdle(); |
| 1171 EXPECT_EQ(1, run_count); // Should only run once per idle period. | 1170 EXPECT_EQ(1, run_count); // Should only run once per idle period. |
| 1172 | 1171 |
| 1173 // Advance time to start of next long idle period and check task reposted task | 1172 // Advance time to start of next long idle period and check task reposted task |
| 1174 // gets run. | 1173 // gets run. |
| (...skipping 14 matching lines...) Expand all Loading... |
| 1189 TEST_F(RendererSchedulerImplTest, TestLongIdlePeriodDoesNotWakeScheduler) { | 1188 TEST_F(RendererSchedulerImplTest, TestLongIdlePeriodDoesNotWakeScheduler) { |
| 1190 base::TimeTicks deadline_in_task; | 1189 base::TimeTicks deadline_in_task; |
| 1191 int run_count = 0; | 1190 int run_count = 0; |
| 1192 | 1191 |
| 1193 // Start a long idle period and get the time it should end. | 1192 // Start a long idle period and get the time it should end. |
| 1194 scheduler_->BeginFrameNotExpectedSoon(); | 1193 scheduler_->BeginFrameNotExpectedSoon(); |
| 1195 // The scheduler should not run the initiate_next_long_idle_period task if | 1194 // The scheduler should not run the initiate_next_long_idle_period task if |
| 1196 // there are no idle tasks and no other task woke up the scheduler, thus | 1195 // there are no idle tasks and no other task woke up the scheduler, thus |
| 1197 // the idle period deadline shouldn't update at the end of the current long | 1196 // the idle period deadline shouldn't update at the end of the current long |
| 1198 // idle period. | 1197 // idle period. |
| 1199 base::TimeTicks idle_period_deadline = CurrentIdleTaskDeadline(); | 1198 base::TimeTicks idle_period_deadline = |
| 1199 scheduler_->CurrentIdleTaskDeadlineForTesting(); |
| 1200 clock_->AdvanceNow(maximum_idle_period_duration()); | 1200 clock_->AdvanceNow(maximum_idle_period_duration()); |
| 1201 RunUntilIdle(); | 1201 RunUntilIdle(); |
| 1202 | 1202 |
| 1203 base::TimeTicks new_idle_period_deadline = CurrentIdleTaskDeadline(); | 1203 base::TimeTicks new_idle_period_deadline = |
| 1204 scheduler_->CurrentIdleTaskDeadlineForTesting(); |
| 1204 EXPECT_EQ(idle_period_deadline, new_idle_period_deadline); | 1205 EXPECT_EQ(idle_period_deadline, new_idle_period_deadline); |
| 1205 | 1206 |
| 1206 // Posting a after-wakeup idle task also shouldn't wake the scheduler or | 1207 // Posting a after-wakeup idle task also shouldn't wake the scheduler or |
| 1207 // initiate the next long idle period. | 1208 // initiate the next long idle period. |
| 1208 idle_task_runner_->PostIdleTaskAfterWakeup( | 1209 idle_task_runner_->PostIdleTaskAfterWakeup( |
| 1209 FROM_HERE, | 1210 FROM_HERE, |
| 1210 base::Bind(&IdleTestTask, &run_count, &deadline_in_task)); | 1211 base::Bind(&IdleTestTask, &run_count, &deadline_in_task)); |
| 1211 RunUntilIdle(); | 1212 RunUntilIdle(); |
| 1212 new_idle_period_deadline = CurrentIdleTaskDeadline(); | 1213 new_idle_period_deadline = scheduler_->CurrentIdleTaskDeadlineForTesting(); |
| 1213 EXPECT_EQ(idle_period_deadline, new_idle_period_deadline); | 1214 EXPECT_EQ(idle_period_deadline, new_idle_period_deadline); |
| 1214 EXPECT_EQ(0, run_count); | 1215 EXPECT_EQ(0, run_count); |
| 1215 | 1216 |
| 1216 // Running a normal task should initiate a new long idle period though. | 1217 // Running a normal task should initiate a new long idle period though. |
| 1217 default_task_runner_->PostTask(FROM_HERE, base::Bind(&NullTask)); | 1218 default_task_runner_->PostTask(FROM_HERE, base::Bind(&NullTask)); |
| 1218 RunUntilIdle(); | 1219 RunUntilIdle(); |
| 1219 new_idle_period_deadline = CurrentIdleTaskDeadline(); | 1220 new_idle_period_deadline = scheduler_->CurrentIdleTaskDeadlineForTesting(); |
| 1220 EXPECT_EQ(idle_period_deadline + maximum_idle_period_duration(), | 1221 EXPECT_EQ(idle_period_deadline + maximum_idle_period_duration(), |
| 1221 new_idle_period_deadline); | 1222 new_idle_period_deadline); |
| 1222 | 1223 |
| 1223 EXPECT_EQ(1, run_count); | 1224 EXPECT_EQ(1, run_count); |
| 1224 } | 1225 } |
| 1225 | 1226 |
| 1226 TEST_F(RendererSchedulerImplTest, TestLongIdlePeriodInTouchStartPolicy) { | 1227 TEST_F(RendererSchedulerImplTest, TestLongIdlePeriodInTouchStartPolicy) { |
| 1227 base::TimeTicks deadline_in_task; | 1228 base::TimeTicks deadline_in_task; |
| 1228 int run_count = 0; | 1229 int run_count = 0; |
| 1229 | 1230 |
| (...skipping 65 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1295 | 1296 |
| 1296 // Next long idle period will be for the maximum time, so | 1297 // Next long idle period will be for the maximum time, so |
| 1297 // CanExceedIdleDeadlineIfRequired should return true. | 1298 // CanExceedIdleDeadlineIfRequired should return true. |
| 1298 scheduler_->WillBeginFrame(cc::BeginFrameArgs::Create( | 1299 scheduler_->WillBeginFrame(cc::BeginFrameArgs::Create( |
| 1299 BEGINFRAME_FROM_HERE, clock_->Now(), base::TimeTicks(), | 1300 BEGINFRAME_FROM_HERE, clock_->Now(), base::TimeTicks(), |
| 1300 base::TimeDelta::FromMilliseconds(1000), cc::BeginFrameArgs::NORMAL)); | 1301 base::TimeDelta::FromMilliseconds(1000), cc::BeginFrameArgs::NORMAL)); |
| 1301 EXPECT_FALSE(scheduler_->CanExceedIdleDeadlineIfRequired()); | 1302 EXPECT_FALSE(scheduler_->CanExceedIdleDeadlineIfRequired()); |
| 1302 } | 1303 } |
| 1303 | 1304 |
| 1304 } // namespace content | 1305 } // namespace content |
| OLD | NEW |