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/renderer/scheduler/nestable_task_runner_for_test.h" |
(...skipping 1228 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1239 scheduler_->BeginFrameNotExpectedSoon(); | 1239 scheduler_->BeginFrameNotExpectedSoon(); |
1240 RunUntilIdle(); | 1240 RunUntilIdle(); |
1241 EXPECT_EQ(0, run_count); | 1241 EXPECT_EQ(0, run_count); |
1242 | 1242 |
1243 // The long idle period should start after the touchstart policy has finished. | 1243 // The long idle period should start after the touchstart policy has finished. |
1244 clock_->AdvanceNow(priority_escalation_after_input_duration()); | 1244 clock_->AdvanceNow(priority_escalation_after_input_duration()); |
1245 RunUntilIdle(); | 1245 RunUntilIdle(); |
1246 EXPECT_EQ(1, run_count); | 1246 EXPECT_EQ(1, run_count); |
1247 } | 1247 } |
1248 | 1248 |
| 1249 void TestCanExceedIdleDeadlineIfRequiredTask(RendererScheduler* scheduler, |
| 1250 bool* can_exceed_idle_deadline_out, |
| 1251 int* run_count, |
| 1252 base::TimeTicks deadline) { |
| 1253 *can_exceed_idle_deadline_out = scheduler->CanExceedIdleDeadlineIfRequired(); |
| 1254 (*run_count)++; |
| 1255 } |
| 1256 |
| 1257 TEST_F(RendererSchedulerImplTest, CanExceedIdleDeadlineIfRequired) { |
| 1258 int run_count = 0; |
| 1259 bool can_exceed_idle_deadline = false; |
| 1260 |
| 1261 // Should return false if not in an idle period. |
| 1262 EXPECT_FALSE(scheduler_->CanExceedIdleDeadlineIfRequired()); |
| 1263 |
| 1264 // Should return false for short idle periods. |
| 1265 idle_task_runner_->PostIdleTask( |
| 1266 FROM_HERE, |
| 1267 base::Bind(&TestCanExceedIdleDeadlineIfRequiredTask, scheduler_.get(), |
| 1268 &can_exceed_idle_deadline, &run_count)); |
| 1269 EnableIdleTasks(); |
| 1270 RunUntilIdle(); |
| 1271 EXPECT_EQ(1, run_count); |
| 1272 EXPECT_FALSE(can_exceed_idle_deadline); |
| 1273 |
| 1274 // Should return false for a long idle period which is shortened due to a |
| 1275 // pending delayed task. |
| 1276 default_task_runner_->PostDelayedTask(FROM_HERE, base::Bind(&NullTask), |
| 1277 base::TimeDelta::FromMilliseconds(10)); |
| 1278 idle_task_runner_->PostIdleTask( |
| 1279 FROM_HERE, |
| 1280 base::Bind(&TestCanExceedIdleDeadlineIfRequiredTask, scheduler_.get(), |
| 1281 &can_exceed_idle_deadline, &run_count)); |
| 1282 scheduler_->BeginFrameNotExpectedSoon(); |
| 1283 RunUntilIdle(); |
| 1284 EXPECT_EQ(2, run_count); |
| 1285 EXPECT_FALSE(can_exceed_idle_deadline); |
| 1286 |
| 1287 // Next long idle period will be for the maximum time, so |
| 1288 // CanExceedIdleDeadlineIfRequired should return true. |
| 1289 clock_->AdvanceNow(maximum_idle_period_duration()); |
| 1290 idle_task_runner_->PostIdleTask( |
| 1291 FROM_HERE, |
| 1292 base::Bind(&TestCanExceedIdleDeadlineIfRequiredTask, scheduler_.get(), |
| 1293 &can_exceed_idle_deadline, &run_count)); |
| 1294 RunUntilIdle(); |
| 1295 EXPECT_EQ(3, run_count); |
| 1296 EXPECT_TRUE(can_exceed_idle_deadline); |
| 1297 |
| 1298 // Next long idle period will be for the maximum time, so |
| 1299 // CanExceedIdleDeadlineIfRequired should return true. |
| 1300 scheduler_->WillBeginFrame(cc::BeginFrameArgs::Create( |
| 1301 BEGINFRAME_FROM_HERE, clock_->Now(), base::TimeTicks(), |
| 1302 base::TimeDelta::FromMilliseconds(1000), cc::BeginFrameArgs::NORMAL)); |
| 1303 EXPECT_FALSE(scheduler_->CanExceedIdleDeadlineIfRequired()); |
| 1304 } |
| 1305 |
1249 } // namespace content | 1306 } // namespace content |
OLD | NEW |