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 |