Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(566)

Side by Side Diff: cc/scheduler/scheduler_state_machine_unittest.cc

Issue 1887243002: cc: Remove retro frames from scheduler. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 4 years, 8 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
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_state_machine.h" 5 #include "cc/scheduler/scheduler_state_machine.h"
6 6
7 #include <stddef.h> 7 #include <stddef.h>
8 8
9 #include "base/trace_event/trace_event.h" 9 #include "base/trace_event/trace_event.h"
10 #include "cc/scheduler/scheduler.h" 10 #include "cc/scheduler/scheduler.h"
(...skipping 27 matching lines...) Expand all
38 #define EXPECT_ACTION_UPDATE_STATE(action) \ 38 #define EXPECT_ACTION_UPDATE_STATE(action) \
39 EXPECT_ACTION(action); \ 39 EXPECT_ACTION(action); \
40 if (action == SchedulerStateMachine::ACTION_DRAW_AND_SWAP_IF_POSSIBLE || \ 40 if (action == SchedulerStateMachine::ACTION_DRAW_AND_SWAP_IF_POSSIBLE || \
41 action == SchedulerStateMachine::ACTION_DRAW_AND_SWAP_FORCED) { \ 41 action == SchedulerStateMachine::ACTION_DRAW_AND_SWAP_FORCED) { \
42 EXPECT_IMPL_FRAME_STATE( \ 42 EXPECT_IMPL_FRAME_STATE( \
43 SchedulerStateMachine::BEGIN_IMPL_FRAME_STATE_INSIDE_DEADLINE); \ 43 SchedulerStateMachine::BEGIN_IMPL_FRAME_STATE_INSIDE_DEADLINE); \
44 } \ 44 } \
45 PerformAction(&state, action); \ 45 PerformAction(&state, action); \
46 if (action == SchedulerStateMachine::ACTION_NONE) { \ 46 if (action == SchedulerStateMachine::ACTION_NONE) { \
47 if (state.begin_impl_frame_state() == \ 47 if (state.begin_impl_frame_state() == \
48 SchedulerStateMachine::BEGIN_IMPL_FRAME_STATE_BEGIN_FRAME_STARTING) \
49 state.OnBeginImplFrameDeadlinePending(); \
50 if (state.begin_impl_frame_state() == \
51 SchedulerStateMachine::BEGIN_IMPL_FRAME_STATE_INSIDE_DEADLINE) \ 48 SchedulerStateMachine::BEGIN_IMPL_FRAME_STATE_INSIDE_DEADLINE) \
52 state.OnBeginImplFrameIdle(); \ 49 state.OnBeginImplFrameIdle(); \
53 } 50 }
54 51
55 #define SET_UP_STATE(state) \ 52 #define SET_UP_STATE(state) \
56 state.SetVisible(true); \ 53 state.SetVisible(true); \
57 EXPECT_ACTION_UPDATE_STATE( \ 54 EXPECT_ACTION_UPDATE_STATE( \
58 SchedulerStateMachine::ACTION_BEGIN_OUTPUT_SURFACE_CREATION); \ 55 SchedulerStateMachine::ACTION_BEGIN_OUTPUT_SURFACE_CREATION); \
59 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); \ 56 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); \
60 state.CreateAndInitializeOutputSurfaceWithActivatedCommit(); \ 57 state.CreateAndInitializeOutputSurfaceWithActivatedCommit(); \
61 state.SetCanDraw(true); 58 state.SetCanDraw(true);
62 59
63 namespace cc { 60 namespace cc {
64 61
65 namespace { 62 namespace {
66 63
67 const SchedulerStateMachine::BeginImplFrameState all_begin_impl_frame_states[] = 64 const SchedulerStateMachine::BeginImplFrameState all_begin_impl_frame_states[] =
68 {SchedulerStateMachine::BEGIN_IMPL_FRAME_STATE_IDLE, 65 {SchedulerStateMachine::BEGIN_IMPL_FRAME_STATE_IDLE,
69 SchedulerStateMachine::BEGIN_IMPL_FRAME_STATE_BEGIN_FRAME_STARTING,
70 SchedulerStateMachine::BEGIN_IMPL_FRAME_STATE_INSIDE_BEGIN_FRAME, 66 SchedulerStateMachine::BEGIN_IMPL_FRAME_STATE_INSIDE_BEGIN_FRAME,
71 SchedulerStateMachine::BEGIN_IMPL_FRAME_STATE_INSIDE_DEADLINE, }; 67 SchedulerStateMachine::BEGIN_IMPL_FRAME_STATE_INSIDE_DEADLINE, };
72 68
73 const SchedulerStateMachine::BeginMainFrameState begin_main_frame_states[] = { 69 const SchedulerStateMachine::BeginMainFrameState begin_main_frame_states[] = {
74 SchedulerStateMachine::BEGIN_MAIN_FRAME_STATE_IDLE, 70 SchedulerStateMachine::BEGIN_MAIN_FRAME_STATE_IDLE,
75 SchedulerStateMachine::BEGIN_MAIN_FRAME_STATE_SENT, 71 SchedulerStateMachine::BEGIN_MAIN_FRAME_STATE_SENT,
76 SchedulerStateMachine::BEGIN_MAIN_FRAME_STATE_STARTED, 72 SchedulerStateMachine::BEGIN_MAIN_FRAME_STATE_STARTED,
77 SchedulerStateMachine::BEGIN_MAIN_FRAME_STATE_READY_TO_COMMIT, 73 SchedulerStateMachine::BEGIN_MAIN_FRAME_STATE_READY_TO_COMMIT,
78 SchedulerStateMachine::BEGIN_MAIN_FRAME_STATE_WAITING_FOR_ACTIVATION, 74 SchedulerStateMachine::BEGIN_MAIN_FRAME_STATE_WAITING_FOR_ACTIVATION,
79 SchedulerStateMachine::BEGIN_MAIN_FRAME_STATE_WAITING_FOR_DRAW}; 75 SchedulerStateMachine::BEGIN_MAIN_FRAME_STATE_WAITING_FOR_DRAW};
(...skipping 339 matching lines...) Expand 10 before | Expand all | Expand 10 after
419 SchedulerSettings default_scheduler_settings; 415 SchedulerSettings default_scheduler_settings;
420 StateMachine state(default_scheduler_settings); 416 StateMachine state(default_scheduler_settings);
421 SET_UP_STATE(state) 417 SET_UP_STATE(state)
422 state.SetNeedsRedraw(true); 418 state.SetNeedsRedraw(true);
423 EXPECT_TRUE(state.RedrawPending()); 419 EXPECT_TRUE(state.RedrawPending());
424 EXPECT_TRUE(state.BeginFrameNeeded()); 420 EXPECT_TRUE(state.BeginFrameNeeded());
425 421
426 // Start a frame. 422 // Start a frame.
427 state.OnBeginImplFrame(); 423 state.OnBeginImplFrame();
428 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); 424 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE);
429 state.OnBeginImplFrameDeadlinePending();
430 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE);
431 EXPECT_FALSE(state.CommitPending()); 425 EXPECT_FALSE(state.CommitPending());
432 426
433 // Failing a draw triggers request for a new BeginMainFrame. 427 // Failing a draw triggers request for a new BeginMainFrame.
434 state.OnBeginImplFrameDeadline(); 428 state.OnBeginImplFrameDeadline();
435 state.SetDrawResultForTest(DRAW_ABORTED_CHECKERBOARD_ANIMATIONS); 429 state.SetDrawResultForTest(DRAW_ABORTED_CHECKERBOARD_ANIMATIONS);
436 EXPECT_ACTION_UPDATE_STATE( 430 EXPECT_ACTION_UPDATE_STATE(
437 SchedulerStateMachine::ACTION_DRAW_AND_SWAP_IF_POSSIBLE); 431 SchedulerStateMachine::ACTION_DRAW_AND_SWAP_IF_POSSIBLE);
438 EXPECT_ACTION_UPDATE_STATE( 432 EXPECT_ACTION_UPDATE_STATE(
439 SchedulerStateMachine::ACTION_SEND_BEGIN_MAIN_FRAME); 433 SchedulerStateMachine::ACTION_SEND_BEGIN_MAIN_FRAME);
440 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); 434 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE);
441 state.OnBeginImplFrameIdle(); 435 state.OnBeginImplFrameIdle();
442 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); 436 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE);
443 437
444 // It's okay to attempt more draws just in case additional raster 438 // It's okay to attempt more draws just in case additional raster
445 // finishes and the requested commit wasn't actually necessary. 439 // finishes and the requested commit wasn't actually necessary.
446 EXPECT_TRUE(state.CommitPending()); 440 EXPECT_TRUE(state.CommitPending());
447 EXPECT_TRUE(state.RedrawPending()); 441 EXPECT_TRUE(state.RedrawPending());
448 state.OnBeginImplFrame(); 442 state.OnBeginImplFrame();
449 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); 443 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE);
450 state.OnBeginImplFrameDeadlinePending();
451 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE);
452 state.OnBeginImplFrameDeadline(); 444 state.OnBeginImplFrameDeadline();
453 state.SetDrawResultForTest(DRAW_ABORTED_CHECKERBOARD_ANIMATIONS); 445 state.SetDrawResultForTest(DRAW_ABORTED_CHECKERBOARD_ANIMATIONS);
454 EXPECT_ACTION_UPDATE_STATE( 446 EXPECT_ACTION_UPDATE_STATE(
455 SchedulerStateMachine::ACTION_DRAW_AND_SWAP_IF_POSSIBLE); 447 SchedulerStateMachine::ACTION_DRAW_AND_SWAP_IF_POSSIBLE);
456 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); 448 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE);
457 state.OnBeginImplFrameIdle(); 449 state.OnBeginImplFrameIdle();
458 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); 450 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE);
459 } 451 }
460 452
461 TEST(SchedulerStateMachineTest, FailedDrawForMissingHighResNeedsCommit) { 453 TEST(SchedulerStateMachineTest, FailedDrawForMissingHighResNeedsCommit) {
462 SchedulerSettings default_scheduler_settings; 454 SchedulerSettings default_scheduler_settings;
463 StateMachine state(default_scheduler_settings); 455 StateMachine state(default_scheduler_settings);
464 SET_UP_STATE(state) 456 SET_UP_STATE(state)
465 state.SetNeedsRedraw(true); 457 state.SetNeedsRedraw(true);
466 EXPECT_TRUE(state.RedrawPending()); 458 EXPECT_TRUE(state.RedrawPending());
467 EXPECT_TRUE(state.BeginFrameNeeded()); 459 EXPECT_TRUE(state.BeginFrameNeeded());
468 460
469 // Start a frame. 461 // Start a frame.
470 state.OnBeginImplFrame(); 462 state.OnBeginImplFrame();
471 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); 463 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE);
472 state.OnBeginImplFrameDeadlinePending();
473 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE);
474 EXPECT_FALSE(state.CommitPending()); 464 EXPECT_FALSE(state.CommitPending());
475 465
476 // Failing a draw triggers because of high res tiles missing 466 // Failing a draw triggers because of high res tiles missing
477 // request for a new BeginMainFrame. 467 // request for a new BeginMainFrame.
478 state.OnBeginImplFrameDeadline(); 468 state.OnBeginImplFrameDeadline();
479 state.SetDrawResultForTest(DRAW_ABORTED_MISSING_HIGH_RES_CONTENT); 469 state.SetDrawResultForTest(DRAW_ABORTED_MISSING_HIGH_RES_CONTENT);
480 EXPECT_ACTION_UPDATE_STATE( 470 EXPECT_ACTION_UPDATE_STATE(
481 SchedulerStateMachine::ACTION_DRAW_AND_SWAP_IF_POSSIBLE); 471 SchedulerStateMachine::ACTION_DRAW_AND_SWAP_IF_POSSIBLE);
482 EXPECT_ACTION_UPDATE_STATE( 472 EXPECT_ACTION_UPDATE_STATE(
483 SchedulerStateMachine::ACTION_SEND_BEGIN_MAIN_FRAME); 473 SchedulerStateMachine::ACTION_SEND_BEGIN_MAIN_FRAME);
484 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); 474 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE);
485 state.OnBeginImplFrameIdle(); 475 state.OnBeginImplFrameIdle();
486 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); 476 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE);
487 477
488 // It doesn't request a draw until we get a new commit though. 478 // It doesn't request a draw until we get a new commit though.
489 EXPECT_TRUE(state.CommitPending()); 479 EXPECT_TRUE(state.CommitPending());
490 EXPECT_FALSE(state.RedrawPending()); 480 EXPECT_FALSE(state.RedrawPending());
491 state.OnBeginImplFrame(); 481 state.OnBeginImplFrame();
492 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); 482 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE);
493 state.OnBeginImplFrameDeadlinePending();
494 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE);
495 state.OnBeginImplFrameDeadline(); 483 state.OnBeginImplFrameDeadline();
496 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); 484 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE);
497 state.OnBeginImplFrameIdle(); 485 state.OnBeginImplFrameIdle();
498 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); 486 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE);
499 487
500 // Finish the commit and activation. 488 // Finish the commit and activation.
501 state.NotifyBeginMainFrameStarted(); 489 state.NotifyBeginMainFrameStarted();
502 state.NotifyReadyToCommit(); 490 state.NotifyReadyToCommit();
503 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_COMMIT); 491 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_COMMIT);
504 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); 492 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE);
505 state.NotifyReadyToActivate(); 493 state.NotifyReadyToActivate();
506 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_ACTIVATE_SYNC_TREE); 494 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_ACTIVATE_SYNC_TREE);
507 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); 495 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE);
508 EXPECT_TRUE(state.RedrawPending()); 496 EXPECT_TRUE(state.RedrawPending());
509 497
510 // Verify we draw with the new frame. 498 // Verify we draw with the new frame.
511 state.OnBeginImplFrame(); 499 state.OnBeginImplFrame();
512 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); 500 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE);
513 state.OnBeginImplFrameDeadlinePending();
514 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE);
515 state.OnBeginImplFrameDeadline(); 501 state.OnBeginImplFrameDeadline();
516 state.SetDrawResultForTest(DRAW_SUCCESS); 502 state.SetDrawResultForTest(DRAW_SUCCESS);
517 EXPECT_ACTION_UPDATE_STATE( 503 EXPECT_ACTION_UPDATE_STATE(
518 SchedulerStateMachine::ACTION_DRAW_AND_SWAP_IF_POSSIBLE); 504 SchedulerStateMachine::ACTION_DRAW_AND_SWAP_IF_POSSIBLE);
519 state.DidSwapBuffers(); 505 state.DidSwapBuffers();
520 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); 506 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE);
521 state.OnBeginImplFrameIdle(); 507 state.OnBeginImplFrameIdle();
522 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); 508 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE);
523 } 509 }
524 510
(...skipping 74 matching lines...) Expand 10 before | Expand all | Expand 10 after
599 state.SetNeedsRedraw(true); 585 state.SetNeedsRedraw(true);
600 state.OnBeginImplFrameDeadline(); 586 state.OnBeginImplFrameDeadline();
601 EXPECT_ACTION_UPDATE_STATE( 587 EXPECT_ACTION_UPDATE_STATE(
602 SchedulerStateMachine::ACTION_DRAW_AND_SWAP_IF_POSSIBLE); 588 SchedulerStateMachine::ACTION_DRAW_AND_SWAP_IF_POSSIBLE);
603 589
604 // Fail the draw enough times to force a redraw. 590 // Fail the draw enough times to force a redraw.
605 for (int i = 0; i < draw_limit; ++i) { 591 for (int i = 0; i < draw_limit; ++i) {
606 state.SetNeedsRedraw(true); 592 state.SetNeedsRedraw(true);
607 state.OnBeginImplFrame(); 593 state.OnBeginImplFrame();
608 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); 594 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE);
609 state.OnBeginImplFrameDeadlinePending();
610 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE);
611 state.OnBeginImplFrameDeadline(); 595 state.OnBeginImplFrameDeadline();
612 state.SetDrawResultForTest(DRAW_ABORTED_CHECKERBOARD_ANIMATIONS); 596 state.SetDrawResultForTest(DRAW_ABORTED_CHECKERBOARD_ANIMATIONS);
613 EXPECT_ACTION_UPDATE_STATE( 597 EXPECT_ACTION_UPDATE_STATE(
614 SchedulerStateMachine::ACTION_DRAW_AND_SWAP_IF_POSSIBLE); 598 SchedulerStateMachine::ACTION_DRAW_AND_SWAP_IF_POSSIBLE);
615 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); 599 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE);
616 state.OnBeginImplFrameIdle(); 600 state.OnBeginImplFrameIdle();
617 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); 601 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE);
618 } 602 }
619 603
620 EXPECT_TRUE(state.BeginFrameNeeded()); 604 EXPECT_TRUE(state.BeginFrameNeeded());
(...skipping 13 matching lines...) Expand all
634 // Now force redraw should be in waiting for activation 618 // Now force redraw should be in waiting for activation
635 EXPECT_TRUE(state.ForcedRedrawState() == 619 EXPECT_TRUE(state.ForcedRedrawState() ==
636 SchedulerStateMachine::FORCED_REDRAW_STATE_WAITING_FOR_ACTIVATION); 620 SchedulerStateMachine::FORCED_REDRAW_STATE_WAITING_FOR_ACTIVATION);
637 621
638 // After failing additional draws, we should still be in a forced 622 // After failing additional draws, we should still be in a forced
639 // redraw, but not back in WAITING_FOR_COMMIT. 623 // redraw, but not back in WAITING_FOR_COMMIT.
640 for (int i = 0; i < draw_limit; ++i) { 624 for (int i = 0; i < draw_limit; ++i) {
641 state.SetNeedsRedraw(true); 625 state.SetNeedsRedraw(true);
642 state.OnBeginImplFrame(); 626 state.OnBeginImplFrame();
643 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); 627 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE);
644 state.OnBeginImplFrameDeadlinePending();
645 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE);
646 state.OnBeginImplFrameDeadline(); 628 state.OnBeginImplFrameDeadline();
647 state.SetDrawResultForTest(DRAW_ABORTED_CHECKERBOARD_ANIMATIONS); 629 state.SetDrawResultForTest(DRAW_ABORTED_CHECKERBOARD_ANIMATIONS);
648 EXPECT_ACTION_UPDATE_STATE( 630 EXPECT_ACTION_UPDATE_STATE(
649 SchedulerStateMachine::ACTION_DRAW_AND_SWAP_IF_POSSIBLE); 631 SchedulerStateMachine::ACTION_DRAW_AND_SWAP_IF_POSSIBLE);
650 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); 632 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE);
651 state.OnBeginImplFrameIdle(); 633 state.OnBeginImplFrameIdle();
652 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); 634 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE);
653 } 635 }
654 EXPECT_TRUE(state.RedrawPending()); 636 EXPECT_TRUE(state.RedrawPending());
655 EXPECT_TRUE(state.ForcedRedrawState() == 637 EXPECT_TRUE(state.ForcedRedrawState() ==
(...skipping 259 matching lines...) Expand 10 before | Expand all | Expand 10 after
915 EXPECT_TRUE(state.NeedsCommit()); 897 EXPECT_TRUE(state.NeedsCommit());
916 898
917 // Let the frame finish. 899 // Let the frame finish.
918 state.NotifyBeginMainFrameStarted(); 900 state.NotifyBeginMainFrameStarted();
919 state.NotifyReadyToCommit(); 901 state.NotifyReadyToCommit();
920 EXPECT_MAIN_FRAME_STATE( 902 EXPECT_MAIN_FRAME_STATE(
921 SchedulerStateMachine::BEGIN_MAIN_FRAME_STATE_READY_TO_COMMIT); 903 SchedulerStateMachine::BEGIN_MAIN_FRAME_STATE_READY_TO_COMMIT);
922 904
923 // Expect to commit regardless of BeginImplFrame state. 905 // Expect to commit regardless of BeginImplFrame state.
924 EXPECT_IMPL_FRAME_STATE( 906 EXPECT_IMPL_FRAME_STATE(
925 SchedulerStateMachine::BEGIN_IMPL_FRAME_STATE_BEGIN_FRAME_STARTING);
926 EXPECT_ACTION(SchedulerStateMachine::ACTION_COMMIT);
927
928 state.OnBeginImplFrameDeadlinePending();
929 EXPECT_IMPL_FRAME_STATE(
930 SchedulerStateMachine::BEGIN_IMPL_FRAME_STATE_INSIDE_BEGIN_FRAME); 907 SchedulerStateMachine::BEGIN_IMPL_FRAME_STATE_INSIDE_BEGIN_FRAME);
931 EXPECT_ACTION(SchedulerStateMachine::ACTION_COMMIT); 908 EXPECT_ACTION(SchedulerStateMachine::ACTION_COMMIT);
932 909
933 state.OnBeginImplFrameDeadline(); 910 state.OnBeginImplFrameDeadline();
934 EXPECT_IMPL_FRAME_STATE( 911 EXPECT_IMPL_FRAME_STATE(
935 SchedulerStateMachine::BEGIN_IMPL_FRAME_STATE_INSIDE_DEADLINE); 912 SchedulerStateMachine::BEGIN_IMPL_FRAME_STATE_INSIDE_DEADLINE);
936 EXPECT_ACTION(SchedulerStateMachine::ACTION_COMMIT); 913 EXPECT_ACTION(SchedulerStateMachine::ACTION_COMMIT);
937 914
938 state.OnBeginImplFrameIdle(); 915 state.OnBeginImplFrameIdle();
939 EXPECT_IMPL_FRAME_STATE(SchedulerStateMachine::BEGIN_IMPL_FRAME_STATE_IDLE); 916 EXPECT_IMPL_FRAME_STATE(SchedulerStateMachine::BEGIN_IMPL_FRAME_STATE_IDLE);
940 EXPECT_ACTION(SchedulerStateMachine::ACTION_COMMIT); 917 EXPECT_ACTION(SchedulerStateMachine::ACTION_COMMIT);
941 918
942 state.OnBeginImplFrame(); 919 state.OnBeginImplFrame();
943 EXPECT_IMPL_FRAME_STATE( 920 EXPECT_IMPL_FRAME_STATE(
944 SchedulerStateMachine::BEGIN_IMPL_FRAME_STATE_BEGIN_FRAME_STARTING); 921 SchedulerStateMachine::BEGIN_IMPL_FRAME_STATE_INSIDE_BEGIN_FRAME);
945 EXPECT_ACTION(SchedulerStateMachine::ACTION_COMMIT); 922 EXPECT_ACTION(SchedulerStateMachine::ACTION_COMMIT);
946 923
947 // Finish the commit and activate, then make sure we start the next commit 924 // Finish the commit and activate, then make sure we start the next commit
948 // immediately and draw on the next BeginImplFrame. 925 // immediately and draw on the next BeginImplFrame.
949 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_COMMIT); 926 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_COMMIT);
950 state.NotifyReadyToActivate(); 927 state.NotifyReadyToActivate();
951 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_ACTIVATE_SYNC_TREE); 928 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_ACTIVATE_SYNC_TREE);
952 EXPECT_ACTION_UPDATE_STATE( 929 EXPECT_ACTION_UPDATE_STATE(
953 SchedulerStateMachine::ACTION_SEND_BEGIN_MAIN_FRAME); 930 SchedulerStateMachine::ACTION_SEND_BEGIN_MAIN_FRAME);
954 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); 931 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE);
(...skipping 600 matching lines...) Expand 10 before | Expand all | Expand 10 after
1555 // waiting for the first draw to unblock the main thread. 1532 // waiting for the first draw to unblock the main thread.
1556 EXPECT_TRUE(state.active_tree_needs_first_draw()); 1533 EXPECT_TRUE(state.active_tree_needs_first_draw());
1557 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_DRAW_AND_SWAP_ABORT); 1534 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_DRAW_AND_SWAP_ABORT);
1558 1535
1559 // Expect to begin context recreation only in BEGIN_IMPL_FRAME_STATE_IDLE 1536 // Expect to begin context recreation only in BEGIN_IMPL_FRAME_STATE_IDLE
1560 EXPECT_IMPL_FRAME_STATE(SchedulerStateMachine::BEGIN_IMPL_FRAME_STATE_IDLE); 1537 EXPECT_IMPL_FRAME_STATE(SchedulerStateMachine::BEGIN_IMPL_FRAME_STATE_IDLE);
1561 EXPECT_ACTION(SchedulerStateMachine::ACTION_BEGIN_OUTPUT_SURFACE_CREATION); 1538 EXPECT_ACTION(SchedulerStateMachine::ACTION_BEGIN_OUTPUT_SURFACE_CREATION);
1562 1539
1563 state.OnBeginImplFrame(); 1540 state.OnBeginImplFrame();
1564 EXPECT_IMPL_FRAME_STATE( 1541 EXPECT_IMPL_FRAME_STATE(
1565 SchedulerStateMachine::BEGIN_IMPL_FRAME_STATE_BEGIN_FRAME_STARTING);
1566 EXPECT_ACTION(SchedulerStateMachine::ACTION_NONE);
1567
1568 state.OnBeginImplFrameDeadlinePending();
1569 EXPECT_IMPL_FRAME_STATE(
1570 SchedulerStateMachine::BEGIN_IMPL_FRAME_STATE_INSIDE_BEGIN_FRAME); 1542 SchedulerStateMachine::BEGIN_IMPL_FRAME_STATE_INSIDE_BEGIN_FRAME);
1571 EXPECT_ACTION(SchedulerStateMachine::ACTION_NONE); 1543 EXPECT_ACTION(SchedulerStateMachine::ACTION_NONE);
1572 1544
1573 state.OnBeginImplFrameDeadline(); 1545 state.OnBeginImplFrameDeadline();
1574 EXPECT_IMPL_FRAME_STATE( 1546 EXPECT_IMPL_FRAME_STATE(
1575 SchedulerStateMachine::BEGIN_IMPL_FRAME_STATE_INSIDE_DEADLINE); 1547 SchedulerStateMachine::BEGIN_IMPL_FRAME_STATE_INSIDE_DEADLINE);
1576 EXPECT_ACTION(SchedulerStateMachine::ACTION_NONE); 1548 EXPECT_ACTION(SchedulerStateMachine::ACTION_NONE);
1577 } 1549 }
1578 1550
1579 TEST(SchedulerStateMachineTest, 1551 TEST(SchedulerStateMachineTest,
(...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after
1617 1589
1618 // Because the output surface is missing, we expect the draw to abort. 1590 // Because the output surface is missing, we expect the draw to abort.
1619 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_DRAW_AND_SWAP_ABORT); 1591 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_DRAW_AND_SWAP_ABORT);
1620 1592
1621 // Expect to begin context recreation only in BEGIN_IMPL_FRAME_STATE_IDLE 1593 // Expect to begin context recreation only in BEGIN_IMPL_FRAME_STATE_IDLE
1622 EXPECT_IMPL_FRAME_STATE(SchedulerStateMachine::BEGIN_IMPL_FRAME_STATE_IDLE); 1594 EXPECT_IMPL_FRAME_STATE(SchedulerStateMachine::BEGIN_IMPL_FRAME_STATE_IDLE);
1623 EXPECT_ACTION(SchedulerStateMachine::ACTION_BEGIN_OUTPUT_SURFACE_CREATION); 1595 EXPECT_ACTION(SchedulerStateMachine::ACTION_BEGIN_OUTPUT_SURFACE_CREATION);
1624 1596
1625 state.OnBeginImplFrame(); 1597 state.OnBeginImplFrame();
1626 EXPECT_IMPL_FRAME_STATE( 1598 EXPECT_IMPL_FRAME_STATE(
1627 SchedulerStateMachine::BEGIN_IMPL_FRAME_STATE_BEGIN_FRAME_STARTING);
1628 EXPECT_ACTION(SchedulerStateMachine::ACTION_NONE);
1629
1630 state.OnBeginImplFrameDeadlinePending();
1631 EXPECT_IMPL_FRAME_STATE(
1632 SchedulerStateMachine::BEGIN_IMPL_FRAME_STATE_INSIDE_BEGIN_FRAME); 1599 SchedulerStateMachine::BEGIN_IMPL_FRAME_STATE_INSIDE_BEGIN_FRAME);
1633 EXPECT_ACTION(SchedulerStateMachine::ACTION_NONE); 1600 EXPECT_ACTION(SchedulerStateMachine::ACTION_NONE);
1634 1601
1635 state.OnBeginImplFrameDeadline(); 1602 state.OnBeginImplFrameDeadline();
1636 EXPECT_IMPL_FRAME_STATE( 1603 EXPECT_IMPL_FRAME_STATE(
1637 SchedulerStateMachine::BEGIN_IMPL_FRAME_STATE_INSIDE_DEADLINE); 1604 SchedulerStateMachine::BEGIN_IMPL_FRAME_STATE_INSIDE_DEADLINE);
1638 EXPECT_ACTION(SchedulerStateMachine::ACTION_NONE); 1605 EXPECT_ACTION(SchedulerStateMachine::ACTION_NONE);
1639 1606
1640 state.OnBeginImplFrameIdle(); 1607 state.OnBeginImplFrameIdle();
1641 EXPECT_ACTION_UPDATE_STATE( 1608 EXPECT_ACTION_UPDATE_STATE(
(...skipping 476 matching lines...) Expand 10 before | Expand all | Expand 10 after
2118 2085
2119 // Lose the output surface. 2086 // Lose the output surface.
2120 state.DidLoseOutputSurface(); 2087 state.DidLoseOutputSurface();
2121 2088
2122 // The scheduler shouldn't trigger the output surface creation till the 2089 // The scheduler shouldn't trigger the output surface creation till the
2123 // previous commit has been cleared. 2090 // previous commit has been cleared.
2124 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); 2091 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE);
2125 2092
2126 // Trigger the deadline and ensure that the scheduler does not trigger any 2093 // Trigger the deadline and ensure that the scheduler does not trigger any
2127 // actions until we receive a response for the pending commit. 2094 // actions until we receive a response for the pending commit.
2128 state.OnBeginImplFrameDeadlinePending();
2129 state.OnBeginImplFrameDeadline(); 2095 state.OnBeginImplFrameDeadline();
2130 state.OnBeginImplFrameIdle(); 2096 state.OnBeginImplFrameIdle();
2131 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); 2097 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE);
2132 2098
2133 // Abort the commit, since that is what we expect the main thread to do if the 2099 // Abort the commit, since that is what we expect the main thread to do if the
2134 // output surface was lost due to a synchronous call from the main thread to 2100 // output surface was lost due to a synchronous call from the main thread to
2135 // release the output surface. 2101 // release the output surface.
2136 state.NotifyBeginMainFrameStarted(); 2102 state.NotifyBeginMainFrameStarted();
2137 state.BeginMainFrameAborted( 2103 state.BeginMainFrameAborted(
2138 CommitEarlyOutReason::ABORTED_OUTPUT_SURFACE_LOST); 2104 CommitEarlyOutReason::ABORTED_OUTPUT_SURFACE_LOST);
(...skipping 15 matching lines...) Expand all
2154 PerformAction(&state, SchedulerStateMachine::ACTION_SEND_BEGIN_MAIN_FRAME); 2120 PerformAction(&state, SchedulerStateMachine::ACTION_SEND_BEGIN_MAIN_FRAME);
2155 2121
2156 // Lose the output surface. 2122 // Lose the output surface.
2157 state.DidLoseOutputSurface(); 2123 state.DidLoseOutputSurface();
2158 2124
2159 // The scheduler shouldn't trigger the output surface creation till the 2125 // The scheduler shouldn't trigger the output surface creation till the
2160 // previous begin impl frame state is cleared from the pipeline. 2126 // previous begin impl frame state is cleared from the pipeline.
2161 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); 2127 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE);
2162 2128
2163 // Cycle through the frame stages to clear the scheduler state. 2129 // Cycle through the frame stages to clear the scheduler state.
2164 state.OnBeginImplFrameDeadlinePending();
2165 state.OnBeginImplFrameDeadline(); 2130 state.OnBeginImplFrameDeadline();
2166 state.OnBeginImplFrameIdle(); 2131 state.OnBeginImplFrameIdle();
2167 2132
2168 // The scheduler should begin the output surface creation now. 2133 // The scheduler should begin the output surface creation now.
2169 EXPECT_ACTION_UPDATE_STATE( 2134 EXPECT_ACTION_UPDATE_STATE(
2170 SchedulerStateMachine::ACTION_BEGIN_OUTPUT_SURFACE_CREATION); 2135 SchedulerStateMachine::ACTION_BEGIN_OUTPUT_SURFACE_CREATION);
2171 } 2136 }
2172 2137
2173 } // namespace 2138 } // namespace
2174 } // namespace cc 2139 } // namespace cc
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698