| 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 "testing/gmock/include/gmock/gmock.h" | 10 #include "testing/gmock/include/gmock/gmock.h" |
| (...skipping 119 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 130 | 130 |
| 131 void PostingYieldingTestTask( | 131 void PostingYieldingTestTask( |
| 132 RendererSchedulerImpl* scheduler, | 132 RendererSchedulerImpl* scheduler, |
| 133 scoped_refptr<base::SingleThreadTaskRunner> task_runner, | 133 scoped_refptr<base::SingleThreadTaskRunner> task_runner, |
| 134 bool simulate_input, | 134 bool simulate_input, |
| 135 bool* should_yield_before, | 135 bool* should_yield_before, |
| 136 bool* should_yield_after) { | 136 bool* should_yield_after) { |
| 137 *should_yield_before = scheduler->ShouldYieldForHighPriorityWork(); | 137 *should_yield_before = scheduler->ShouldYieldForHighPriorityWork(); |
| 138 task_runner->PostTask(FROM_HERE, base::Bind(NullTask)); | 138 task_runner->PostTask(FROM_HERE, base::Bind(NullTask)); |
| 139 if (simulate_input) { | 139 if (simulate_input) { |
| 140 scheduler->DidReceiveInputEventOnCompositorThread(); | 140 scheduler->DidReceiveInputEventOnCompositorThread( |
| 141 blink::WebInputEvent::GestureFlingStart); |
| 141 } | 142 } |
| 142 *should_yield_after = scheduler->ShouldYieldForHighPriorityWork(); | 143 *should_yield_after = scheduler->ShouldYieldForHighPriorityWork(); |
| 143 } | 144 } |
| 144 | 145 |
| 145 TEST_F(RendererSchedulerImplTest, TestPostDefaultTask) { | 146 TEST_F(RendererSchedulerImplTest, TestPostDefaultTask) { |
| 146 int result = 0; | 147 int result = 0; |
| 147 default_task_runner_->PostTask(FROM_HERE, | 148 default_task_runner_->PostTask(FROM_HERE, |
| 148 base::Bind(OrderedTestTask, 1, &result)); | 149 base::Bind(OrderedTestTask, 1, &result)); |
| 149 default_task_runner_->PostTask(FROM_HERE, | 150 default_task_runner_->PostTask(FROM_HERE, |
| 150 base::Bind(OrderedTestTask, 2, &result)); | 151 base::Bind(OrderedTestTask, 2, &result)); |
| (...skipping 140 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 291 compositor_task_runner_->PostTask( | 292 compositor_task_runner_->PostTask( |
| 292 FROM_HERE, | 293 FROM_HERE, |
| 293 base::Bind(&AppendToVectorTestTask, &order, std::string("C1"))); | 294 base::Bind(&AppendToVectorTestTask, &order, std::string("C1"))); |
| 294 default_task_runner_->PostTask( | 295 default_task_runner_->PostTask( |
| 295 FROM_HERE, | 296 FROM_HERE, |
| 296 base::Bind(&AppendToVectorTestTask, &order, std::string("D2"))); | 297 base::Bind(&AppendToVectorTestTask, &order, std::string("D2"))); |
| 297 compositor_task_runner_->PostTask( | 298 compositor_task_runner_->PostTask( |
| 298 FROM_HERE, | 299 FROM_HERE, |
| 299 base::Bind(&AppendToVectorTestTask, &order, std::string("C2"))); | 300 base::Bind(&AppendToVectorTestTask, &order, std::string("C2"))); |
| 300 | 301 |
| 301 scheduler_->DidReceiveInputEventOnCompositorThread(); | 302 scheduler_->DidReceiveInputEventOnCompositorThread( |
| 303 blink::WebInputEvent::GestureFlingStart); |
| 302 EnableIdleTasks(); | 304 EnableIdleTasks(); |
| 303 RunUntilIdle(); | 305 RunUntilIdle(); |
| 304 EXPECT_THAT(order, testing::ElementsAre(std::string("C1"), std::string("C2"), | 306 EXPECT_THAT(order, testing::ElementsAre(std::string("C1"), std::string("C2"), |
| 307 std::string("D1"), std::string("D2"), |
| 308 std::string("I1"))); |
| 309 } |
| 310 |
| 311 TEST_F(RendererSchedulerImplTest, TestCompositorPolicy_DidAnimateForInput) { |
| 312 std::vector<std::string> order; |
| 313 |
| 314 idle_task_runner_->PostIdleTask( |
| 315 FROM_HERE, |
| 316 base::Bind(&AppendToVectorIdleTestTask, &order, std::string("I1"))); |
| 317 default_task_runner_->PostTask( |
| 318 FROM_HERE, |
| 319 base::Bind(&AppendToVectorTestTask, &order, std::string("D1"))); |
| 320 compositor_task_runner_->PostTask( |
| 321 FROM_HERE, |
| 322 base::Bind(&AppendToVectorTestTask, &order, std::string("C1"))); |
| 323 default_task_runner_->PostTask( |
| 324 FROM_HERE, |
| 325 base::Bind(&AppendToVectorTestTask, &order, std::string("D2"))); |
| 326 compositor_task_runner_->PostTask( |
| 327 FROM_HERE, |
| 328 base::Bind(&AppendToVectorTestTask, &order, std::string("C2"))); |
| 329 |
| 330 scheduler_->DidAnimateForInputOnCompositorThread(); |
| 331 EnableIdleTasks(); |
| 332 RunUntilIdle(); |
| 333 EXPECT_THAT(order, testing::ElementsAre(std::string("C1"), std::string("C2"), |
| 305 std::string("D1"), std::string("D2"), | 334 std::string("D1"), std::string("D2"), |
| 306 std::string("I1"))); | 335 std::string("I1"))); |
| 307 } | 336 } |
| 308 | 337 |
| 309 TEST_F(RendererSchedulerImplTest, | 338 TEST_F(RendererSchedulerImplTest, |
| 310 TestCompositorPolicyDoesNotStarveDefaultTasks) { | 339 TestCompositorPolicyDoesNotStarveDefaultTasks) { |
| 311 std::vector<std::string> order; | 340 std::vector<std::string> order; |
| 312 | 341 |
| 313 default_task_runner_->PostTask( | 342 default_task_runner_->PostTask( |
| 314 FROM_HERE, | 343 FROM_HERE, |
| 315 base::Bind(&AppendToVectorTestTask, &order, std::string("D1"))); | 344 base::Bind(&AppendToVectorTestTask, &order, std::string("D1"))); |
| 316 compositor_task_runner_->PostTask( | 345 compositor_task_runner_->PostTask( |
| 317 FROM_HERE, | 346 FROM_HERE, |
| 318 base::Bind(&AppendToVectorTestTask, &order, std::string("C1"))); | 347 base::Bind(&AppendToVectorTestTask, &order, std::string("C1"))); |
| 319 for (int i = 0; i < 20; i++) { | 348 for (int i = 0; i < 20; i++) { |
| 320 compositor_task_runner_->PostTask(FROM_HERE, base::Bind(&NullTask)); | 349 compositor_task_runner_->PostTask(FROM_HERE, base::Bind(&NullTask)); |
| 321 } | 350 } |
| 322 compositor_task_runner_->PostTask( | 351 compositor_task_runner_->PostTask( |
| 323 FROM_HERE, | 352 FROM_HERE, |
| 324 base::Bind(&AppendToVectorTestTask, &order, std::string("C2"))); | 353 base::Bind(&AppendToVectorTestTask, &order, std::string("C2"))); |
| 325 | 354 |
| 326 scheduler_->DidReceiveInputEventOnCompositorThread(); | 355 scheduler_->DidReceiveInputEventOnCompositorThread( |
| 356 blink::WebInputEvent::GestureFlingStart); |
| 327 RunUntilIdle(); | 357 RunUntilIdle(); |
| 328 // Ensure that the default D1 task gets to run at some point before the final | 358 // Ensure that the default D1 task gets to run at some point before the final |
| 329 // C2 compositor task. | 359 // C2 compositor task. |
| 330 EXPECT_THAT(order, testing::ElementsAre(std::string("C1"), std::string("D1"), | 360 EXPECT_THAT(order, testing::ElementsAre(std::string("C1"), std::string("D1"), |
| 331 std::string("C2"))); | 361 std::string("C2"))); |
| 332 } | 362 } |
| 333 | 363 |
| 334 TEST_F(RendererSchedulerImplTest, TestCompositorPolicyEnds) { | 364 TEST_F(RendererSchedulerImplTest, TestCompositorPolicyEnds) { |
| 335 std::vector<std::string> order; | 365 std::vector<std::string> order; |
| 336 | 366 |
| 337 default_task_runner_->PostTask( | 367 default_task_runner_->PostTask( |
| 338 FROM_HERE, | 368 FROM_HERE, |
| 339 base::Bind(&AppendToVectorTestTask, &order, std::string("D1"))); | 369 base::Bind(&AppendToVectorTestTask, &order, std::string("D1"))); |
| 340 compositor_task_runner_->PostTask( | 370 compositor_task_runner_->PostTask( |
| 341 FROM_HERE, | 371 FROM_HERE, |
| 342 base::Bind(&AppendToVectorTestTask, &order, std::string("C1"))); | 372 base::Bind(&AppendToVectorTestTask, &order, std::string("C1"))); |
| 343 default_task_runner_->PostTask( | 373 default_task_runner_->PostTask( |
| 344 FROM_HERE, | 374 FROM_HERE, |
| 345 base::Bind(&AppendToVectorTestTask, &order, std::string("D2"))); | 375 base::Bind(&AppendToVectorTestTask, &order, std::string("D2"))); |
| 346 compositor_task_runner_->PostTask( | 376 compositor_task_runner_->PostTask( |
| 347 FROM_HERE, | 377 FROM_HERE, |
| 348 base::Bind(&AppendToVectorTestTask, &order, std::string("C2"))); | 378 base::Bind(&AppendToVectorTestTask, &order, std::string("C2"))); |
| 349 | 379 |
| 350 scheduler_->DidReceiveInputEventOnCompositorThread(); | 380 scheduler_->DidReceiveInputEventOnCompositorThread( |
| 381 blink::WebInputEvent::GestureFlingStart); |
| 351 RunUntilIdle(); | 382 RunUntilIdle(); |
| 352 EXPECT_THAT(order, | 383 EXPECT_THAT(order, |
| 353 testing::ElementsAre(std::string("C1"), std::string("C2"), | 384 testing::ElementsAre(std::string("C1"), std::string("C2"), |
| 354 std::string("D1"), std::string("D2"))); | 385 std::string("D1"), std::string("D2"))); |
| 355 | 386 |
| 356 order.clear(); | 387 order.clear(); |
| 357 clock_->AdvanceNow(base::TimeDelta::FromMilliseconds(1000)); | 388 clock_->AdvanceNow(base::TimeDelta::FromMilliseconds(1000)); |
| 358 | 389 |
| 359 default_task_runner_->PostTask( | 390 default_task_runner_->PostTask( |
| 360 FROM_HERE, | 391 FROM_HERE, |
| (...skipping 41 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 402 FROM_HERE, base::Bind(&PostingYieldingTestTask, scheduler_.get(), | 433 FROM_HERE, base::Bind(&PostingYieldingTestTask, scheduler_.get(), |
| 403 compositor_task_runner_, true, &should_yield_before, | 434 compositor_task_runner_, true, &should_yield_before, |
| 404 &should_yield_after)); | 435 &should_yield_after)); |
| 405 RunUntilIdle(); | 436 RunUntilIdle(); |
| 406 // We should be able to switch to compositor priority mid-task. | 437 // We should be able to switch to compositor priority mid-task. |
| 407 EXPECT_FALSE(should_yield_before); | 438 EXPECT_FALSE(should_yield_before); |
| 408 EXPECT_TRUE(should_yield_after); | 439 EXPECT_TRUE(should_yield_after); |
| 409 } | 440 } |
| 410 | 441 |
| 411 } // namespace content | 442 } // namespace content |
| OLD | NEW |