OLD | NEW |
1 // Copyright 2011 The Chromium Authors. All rights reserved. | 1 // Copyright 2011 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 "cc/scheduler/scheduler.h" | 5 #include "cc/scheduler/scheduler.h" |
6 | 6 |
7 #include <string> | 7 #include <string> |
8 #include <vector> | 8 #include <vector> |
9 | 9 |
10 #include "base/debug/trace_event.h" | 10 #include "base/debug/trace_event.h" |
(...skipping 445 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
456 client.AdvanceFrame(); | 456 client.AdvanceFrame(); |
457 EXPECT_SINGLE_ACTION("WillBeginImplFrame", client); | 457 EXPECT_SINGLE_ACTION("WillBeginImplFrame", client); |
458 EXPECT_TRUE(scheduler->BeginImplFrameDeadlinePending()); | 458 EXPECT_TRUE(scheduler->BeginImplFrameDeadlinePending()); |
459 client.Reset(); | 459 client.Reset(); |
460 | 460 |
461 client.task_runner().RunPendingTasks(); // Run posted deadline. | 461 client.task_runner().RunPendingTasks(); // Run posted deadline. |
462 EXPECT_SINGLE_ACTION("SetNeedsBeginFrames(false)", client); | 462 EXPECT_SINGLE_ACTION("SetNeedsBeginFrames(false)", client); |
463 client.Reset(); | 463 client.Reset(); |
464 } | 464 } |
465 | 465 |
| 466 TEST(SchedulerTest, RequestCommitAfterSetDeferCommit) { |
| 467 FakeSchedulerClient client; |
| 468 SchedulerSettings scheduler_settings; |
| 469 scheduler_settings.use_external_begin_frame_source = true; |
| 470 TestScheduler* scheduler = client.CreateScheduler(scheduler_settings); |
| 471 scheduler->SetCanStart(); |
| 472 scheduler->SetVisible(true); |
| 473 scheduler->SetCanDraw(true); |
| 474 |
| 475 InitializeOutputSurfaceAndFirstCommit(scheduler, &client); |
| 476 client.Reset(); |
| 477 |
| 478 scheduler->SetDeferCommits(true); |
| 479 |
| 480 scheduler->SetNeedsCommit(); |
| 481 EXPECT_SINGLE_ACTION("SetNeedsBeginFrames(true)", client); |
| 482 |
| 483 client.Reset(); |
| 484 client.AdvanceFrame(); |
| 485 // BeginMainFrame is not sent during the defer commit is on. |
| 486 EXPECT_SINGLE_ACTION("WillBeginImplFrame", client); |
| 487 |
| 488 client.Reset(); |
| 489 client.task_runner().RunPendingTasks(); // Run posted deadline. |
| 490 // There is no posted deadline. |
| 491 EXPECT_NO_ACTION(client); |
| 492 EXPECT_TRUE(client.needs_begin_frames()); |
| 493 |
| 494 client.Reset(); |
| 495 scheduler->SetDeferCommits(false); |
| 496 EXPECT_NO_ACTION(client); |
| 497 |
| 498 // Start new BeginMainFrame after defer commit is off. |
| 499 client.Reset(); |
| 500 client.AdvanceFrame(); |
| 501 EXPECT_ACTION("WillBeginImplFrame", client, 0, 2); |
| 502 EXPECT_ACTION("ScheduledActionSendBeginMainFrame", client, 1, 2); |
| 503 EXPECT_TRUE(scheduler->BeginImplFrameDeadlinePending()); |
| 504 } |
| 505 |
| 506 TEST(SchedulerTest, DeferCommitWithRedraw) { |
| 507 FakeSchedulerClient client; |
| 508 SchedulerSettings scheduler_settings; |
| 509 scheduler_settings.use_external_begin_frame_source = true; |
| 510 TestScheduler* scheduler = client.CreateScheduler(scheduler_settings); |
| 511 scheduler->SetCanStart(); |
| 512 scheduler->SetVisible(true); |
| 513 scheduler->SetCanDraw(true); |
| 514 |
| 515 InitializeOutputSurfaceAndFirstCommit(scheduler, &client); |
| 516 client.Reset(); |
| 517 |
| 518 scheduler->SetDeferCommits(true); |
| 519 |
| 520 scheduler->SetNeedsCommit(); |
| 521 EXPECT_SINGLE_ACTION("SetNeedsBeginFrames(true)", client); |
| 522 |
| 523 client.Reset(); |
| 524 scheduler->SetNeedsRedraw(); |
| 525 EXPECT_NO_ACTION(client); |
| 526 |
| 527 client.Reset(); |
| 528 client.AdvanceFrame(); |
| 529 // BeginMainFrame is not sent during the defer commit is on. |
| 530 EXPECT_ACTION("WillBeginImplFrame", client, 0, 2); |
| 531 EXPECT_ACTION("ScheduledActionAnimate", client, 1, 2); |
| 532 |
| 533 client.Reset(); |
| 534 client.task_runner().RunPendingTasks(); // Run posted deadline. |
| 535 EXPECT_SINGLE_ACTION("ScheduledActionDrawAndSwapIfPossible", client); |
| 536 EXPECT_FALSE(scheduler->BeginImplFrameDeadlinePending()); |
| 537 EXPECT_TRUE(client.needs_begin_frames()); |
| 538 |
| 539 client.Reset(); |
| 540 client.AdvanceFrame(); |
| 541 EXPECT_SINGLE_ACTION("WillBeginImplFrame", client); |
| 542 } |
| 543 |
466 TEST(SchedulerTest, RequestCommitAfterBeginMainFrameSent) { | 544 TEST(SchedulerTest, RequestCommitAfterBeginMainFrameSent) { |
467 FakeSchedulerClient client; | 545 FakeSchedulerClient client; |
468 SchedulerSettings scheduler_settings; | 546 SchedulerSettings scheduler_settings; |
469 scheduler_settings.use_external_begin_frame_source = true; | 547 scheduler_settings.use_external_begin_frame_source = true; |
470 TestScheduler* scheduler = client.CreateScheduler(scheduler_settings); | 548 TestScheduler* scheduler = client.CreateScheduler(scheduler_settings); |
471 scheduler->SetCanStart(); | 549 scheduler->SetCanStart(); |
472 scheduler->SetVisible(true); | 550 scheduler->SetVisible(true); |
473 scheduler->SetCanDraw(true); | 551 scheduler->SetCanDraw(true); |
474 | 552 |
475 EXPECT_SINGLE_ACTION("ScheduledActionBeginOutputSurfaceCreation", client); | 553 EXPECT_SINGLE_ACTION("ScheduledActionBeginOutputSurfaceCreation", client); |
(...skipping 1790 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2266 | 2344 |
2267 // Deadline task is pending | 2345 // Deadline task is pending |
2268 EXPECT_TRUE(scheduler->BeginImplFrameDeadlinePending()); | 2346 EXPECT_TRUE(scheduler->BeginImplFrameDeadlinePending()); |
2269 client.task_runner().RunPendingTasks(); | 2347 client.task_runner().RunPendingTasks(); |
2270 // Deadline task runs immediately | 2348 // Deadline task runs immediately |
2271 EXPECT_FALSE(scheduler->BeginImplFrameDeadlinePending()); | 2349 EXPECT_FALSE(scheduler->BeginImplFrameDeadlinePending()); |
2272 } | 2350 } |
2273 | 2351 |
2274 } // namespace | 2352 } // namespace |
2275 } // namespace cc | 2353 } // namespace cc |
OLD | NEW |