Chromium Code Reviews| 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_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/output/begin_frame_args.h" | 10 #include "cc/output/begin_frame_args.h" |
| (...skipping 186 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 197 return; | 197 return; |
| 198 | 198 |
| 199 case SchedulerStateMachine::ACTION_ACTIVATE_SYNC_TREE: | 199 case SchedulerStateMachine::ACTION_ACTIVATE_SYNC_TREE: |
| 200 sm->WillActivate(); | 200 sm->WillActivate(); |
| 201 return; | 201 return; |
| 202 | 202 |
| 203 case SchedulerStateMachine::ACTION_SEND_BEGIN_MAIN_FRAME: | 203 case SchedulerStateMachine::ACTION_SEND_BEGIN_MAIN_FRAME: |
| 204 sm->WillSendBeginMainFrame(); | 204 sm->WillSendBeginMainFrame(); |
| 205 return; | 205 return; |
| 206 | 206 |
| 207 case SchedulerStateMachine::ACTION_NOTIFY_BEGIN_MAIN_FRAME_NOT_SENT: | |
| 208 sm->WillNotifyBeginMainFrameNotSent(); | |
| 209 return; | |
| 210 | |
| 207 case SchedulerStateMachine::ACTION_COMMIT: { | 211 case SchedulerStateMachine::ACTION_COMMIT: { |
| 208 bool commit_has_no_updates = false; | 212 bool commit_has_no_updates = false; |
| 209 sm->WillCommit(commit_has_no_updates); | 213 sm->WillCommit(commit_has_no_updates); |
| 210 return; | 214 return; |
| 211 } | 215 } |
| 212 | 216 |
| 213 case SchedulerStateMachine::ACTION_DRAW_FORCED: | 217 case SchedulerStateMachine::ACTION_DRAW_FORCED: |
| 214 case SchedulerStateMachine::ACTION_DRAW_IF_POSSIBLE: { | 218 case SchedulerStateMachine::ACTION_DRAW_IF_POSSIBLE: { |
| 215 sm->WillDraw(); | 219 sm->WillDraw(); |
| 216 sm->DidDraw(sm->draw_result_for_test()); | 220 sm->DidDraw(sm->draw_result_for_test()); |
| (...skipping 66 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 283 // Don't request BeginFrames when commit is pending if | 287 // Don't request BeginFrames when commit is pending if |
| 284 // we are currently deferring commits. | 288 // we are currently deferring commits. |
| 285 state.SetVisible(true); | 289 state.SetVisible(true); |
| 286 state.SetNeedsRedraw(false); | 290 state.SetNeedsRedraw(false); |
| 287 state.SetNeedsOneBeginImplFrame(false); | 291 state.SetNeedsOneBeginImplFrame(false); |
| 288 state.SetNeedsBeginMainFrameForTest(true); | 292 state.SetNeedsBeginMainFrameForTest(true); |
| 289 state.SetDeferCommits(true); | 293 state.SetDeferCommits(true); |
| 290 EXPECT_FALSE(state.BeginFrameNeeded()); | 294 EXPECT_FALSE(state.BeginFrameNeeded()); |
| 291 } | 295 } |
| 292 | 296 |
| 297 TEST(SchedulerStateMachineTest, TestNextActionNotifyBeginMainFrameNotSent) { | |
| 298 SchedulerSettings default_scheduler_settings; | |
| 299 StateMachine state(default_scheduler_settings); | |
| 300 state.SetVisible(true); | |
| 301 EXPECT_ACTION_UPDATE_STATE( | |
| 302 SchedulerStateMachine::ACTION_BEGIN_COMPOSITOR_FRAME_SINK_CREATION); | |
| 303 state.IssueNextBeginImplFrame(); | |
| 304 state.CreateAndInitializeCompositorFrameSinkWithActivatedCommit(); | |
| 305 // A main frame was not requested so short idle work is scheduled instead. | |
| 306 EXPECT_ACTION_UPDATE_STATE( | |
| 307 SchedulerStateMachine::ACTION_NOTIFY_BEGIN_MAIN_FRAME_NOT_SENT); | |
| 308 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); | |
| 309 | |
| 310 state.SetNeedsRedraw(true); | |
| 311 state.SetNeedsBeginMainFrame(); | |
| 312 // Now a main frame is requested no short idle work is scheduled. | |
| 313 EXPECT_ACTION_UPDATE_STATE( | |
| 314 SchedulerStateMachine::ACTION_SEND_BEGIN_MAIN_FRAME); | |
| 315 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); | |
| 316 } | |
| 317 | |
| 293 TEST(SchedulerStateMachineTest, TestNextActionBeginsMainFrameIfNeeded) { | 318 TEST(SchedulerStateMachineTest, TestNextActionBeginsMainFrameIfNeeded) { |
| 294 SchedulerSettings default_scheduler_settings; | 319 SchedulerSettings default_scheduler_settings; |
| 295 | 320 |
| 296 // If no commit needed, do nothing. | 321 // If no commit needed, do nothing. |
| 297 { | 322 { |
| 298 StateMachine state(default_scheduler_settings); | 323 StateMachine state(default_scheduler_settings); |
| 299 state.SetVisible(true); | 324 state.SetVisible(true); |
| 300 EXPECT_ACTION_UPDATE_STATE( | 325 EXPECT_ACTION_UPDATE_STATE( |
| 301 SchedulerStateMachine::ACTION_BEGIN_COMPOSITOR_FRAME_SINK_CREATION); | 326 SchedulerStateMachine::ACTION_BEGIN_COMPOSITOR_FRAME_SINK_CREATION); |
| 302 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); | 327 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); |
| 303 state.CreateAndInitializeCompositorFrameSinkWithActivatedCommit(); | 328 state.CreateAndInitializeCompositorFrameSinkWithActivatedCommit(); |
| 304 state.SetBeginMainFrameState( | 329 state.SetBeginMainFrameState( |
| 305 SchedulerStateMachine::BEGIN_MAIN_FRAME_STATE_IDLE); | 330 SchedulerStateMachine::BEGIN_MAIN_FRAME_STATE_IDLE); |
| 306 state.SetNeedsRedraw(false); | 331 state.SetNeedsRedraw(false); |
| 307 | 332 |
| 308 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); | 333 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); |
| 309 EXPECT_FALSE(state.NeedsCommit()); | 334 EXPECT_FALSE(state.NeedsCommit()); |
| 310 | 335 |
| 311 state.IssueNextBeginImplFrame(); | 336 state.IssueNextBeginImplFrame(); |
| 337 EXPECT_ACTION_UPDATE_STATE( | |
| 338 SchedulerStateMachine::ACTION_NOTIFY_BEGIN_MAIN_FRAME_NOT_SENT); | |
| 312 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); | 339 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); |
| 313 | 340 |
| 314 state.OnBeginImplFrameDeadline(); | 341 state.OnBeginImplFrameDeadline(); |
| 315 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); | 342 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); |
| 316 EXPECT_FALSE(state.NeedsCommit()); | 343 EXPECT_FALSE(state.NeedsCommit()); |
| 317 } | 344 } |
| 318 | 345 |
| 319 // If commit requested but not visible yet, do nothing. | 346 // If commit requested but not visible yet, do nothing. |
| 320 { | 347 { |
| 321 StateMachine state(default_scheduler_settings); | 348 StateMachine state(default_scheduler_settings); |
| (...skipping 129 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 451 FailedDrawForAnimationCheckerboardSetsNeedsCommitAndRetriesDraw) { | 478 FailedDrawForAnimationCheckerboardSetsNeedsCommitAndRetriesDraw) { |
| 452 SchedulerSettings default_scheduler_settings; | 479 SchedulerSettings default_scheduler_settings; |
| 453 StateMachine state(default_scheduler_settings); | 480 StateMachine state(default_scheduler_settings); |
| 454 SET_UP_STATE(state) | 481 SET_UP_STATE(state) |
| 455 state.SetNeedsRedraw(true); | 482 state.SetNeedsRedraw(true); |
| 456 EXPECT_TRUE(state.RedrawPending()); | 483 EXPECT_TRUE(state.RedrawPending()); |
| 457 EXPECT_TRUE(state.BeginFrameNeeded()); | 484 EXPECT_TRUE(state.BeginFrameNeeded()); |
| 458 | 485 |
| 459 // Start a frame. | 486 // Start a frame. |
| 460 state.IssueNextBeginImplFrame(); | 487 state.IssueNextBeginImplFrame(); |
| 488 EXPECT_ACTION_UPDATE_STATE( | |
| 489 SchedulerStateMachine::ACTION_NOTIFY_BEGIN_MAIN_FRAME_NOT_SENT); | |
| 461 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); | 490 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); |
| 462 EXPECT_FALSE(state.CommitPending()); | 491 EXPECT_FALSE(state.CommitPending()); |
| 463 | 492 |
| 464 // Failing a draw triggers request for a new BeginMainFrame. | 493 // Failing a draw triggers request for a new BeginMainFrame. |
| 465 state.OnBeginImplFrameDeadline(); | 494 state.OnBeginImplFrameDeadline(); |
| 466 state.SetDrawResultForTest(DRAW_ABORTED_CHECKERBOARD_ANIMATIONS); | 495 state.SetDrawResultForTest(DRAW_ABORTED_CHECKERBOARD_ANIMATIONS); |
| 467 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_DRAW_IF_POSSIBLE); | 496 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_DRAW_IF_POSSIBLE); |
| 468 EXPECT_ACTION_UPDATE_STATE( | 497 EXPECT_ACTION_UPDATE_STATE( |
| 469 SchedulerStateMachine::ACTION_SEND_BEGIN_MAIN_FRAME); | 498 SchedulerStateMachine::ACTION_SEND_BEGIN_MAIN_FRAME); |
| 470 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); | 499 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); |
| (...skipping 17 matching lines...) Expand all Loading... | |
| 488 TEST(SchedulerStateMachineTest, FailedDrawForMissingHighResNeedsCommit) { | 517 TEST(SchedulerStateMachineTest, FailedDrawForMissingHighResNeedsCommit) { |
| 489 SchedulerSettings default_scheduler_settings; | 518 SchedulerSettings default_scheduler_settings; |
| 490 StateMachine state(default_scheduler_settings); | 519 StateMachine state(default_scheduler_settings); |
| 491 SET_UP_STATE(state) | 520 SET_UP_STATE(state) |
| 492 state.SetNeedsRedraw(true); | 521 state.SetNeedsRedraw(true); |
| 493 EXPECT_TRUE(state.RedrawPending()); | 522 EXPECT_TRUE(state.RedrawPending()); |
| 494 EXPECT_TRUE(state.BeginFrameNeeded()); | 523 EXPECT_TRUE(state.BeginFrameNeeded()); |
| 495 | 524 |
| 496 // Start a frame. | 525 // Start a frame. |
| 497 state.IssueNextBeginImplFrame(); | 526 state.IssueNextBeginImplFrame(); |
| 527 EXPECT_ACTION_UPDATE_STATE( | |
| 528 SchedulerStateMachine::ACTION_NOTIFY_BEGIN_MAIN_FRAME_NOT_SENT); | |
| 498 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); | 529 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); |
| 499 EXPECT_FALSE(state.CommitPending()); | 530 EXPECT_FALSE(state.CommitPending()); |
| 500 | 531 |
| 501 // Failing a draw triggers because of high res tiles missing | 532 // Failing a draw triggers because of high res tiles missing |
| 502 // request for a new BeginMainFrame. | 533 // request for a new BeginMainFrame. |
| 503 state.OnBeginImplFrameDeadline(); | 534 state.OnBeginImplFrameDeadline(); |
| 504 state.SetDrawResultForTest(DRAW_ABORTED_MISSING_HIGH_RES_CONTENT); | 535 state.SetDrawResultForTest(DRAW_ABORTED_MISSING_HIGH_RES_CONTENT); |
| 505 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_DRAW_IF_POSSIBLE); | 536 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_DRAW_IF_POSSIBLE); |
| 506 EXPECT_ACTION_UPDATE_STATE( | 537 EXPECT_ACTION_UPDATE_STATE( |
| 507 SchedulerStateMachine::ACTION_SEND_BEGIN_MAIN_FRAME); | 538 SchedulerStateMachine::ACTION_SEND_BEGIN_MAIN_FRAME); |
| (...skipping 16 matching lines...) Expand all Loading... | |
| 524 state.NotifyReadyToCommit(); | 555 state.NotifyReadyToCommit(); |
| 525 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_COMMIT); | 556 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_COMMIT); |
| 526 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); | 557 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); |
| 527 state.NotifyReadyToActivate(); | 558 state.NotifyReadyToActivate(); |
| 528 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_ACTIVATE_SYNC_TREE); | 559 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_ACTIVATE_SYNC_TREE); |
| 529 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); | 560 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); |
| 530 EXPECT_TRUE(state.RedrawPending()); | 561 EXPECT_TRUE(state.RedrawPending()); |
| 531 | 562 |
| 532 // Verify we draw with the new frame. | 563 // Verify we draw with the new frame. |
| 533 state.IssueNextBeginImplFrame(); | 564 state.IssueNextBeginImplFrame(); |
| 565 EXPECT_ACTION_UPDATE_STATE( | |
| 566 SchedulerStateMachine::ACTION_NOTIFY_BEGIN_MAIN_FRAME_NOT_SENT); | |
| 534 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); | 567 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); |
| 535 state.OnBeginImplFrameDeadline(); | 568 state.OnBeginImplFrameDeadline(); |
| 536 state.SetDrawResultForTest(DRAW_SUCCESS); | 569 state.SetDrawResultForTest(DRAW_SUCCESS); |
| 537 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_DRAW_IF_POSSIBLE); | 570 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_DRAW_IF_POSSIBLE); |
| 538 state.DidSubmitCompositorFrame(); | 571 state.DidSubmitCompositorFrame(); |
| 539 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); | 572 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); |
| 540 state.OnBeginImplFrameIdle(); | 573 state.OnBeginImplFrameIdle(); |
| 541 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); | 574 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); |
| 542 } | 575 } |
| 543 | 576 |
| (...skipping 113 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 657 | 690 |
| 658 TEST(SchedulerStateMachineTest, TestFailedDrawIsRetriedInNextBeginImplFrame) { | 691 TEST(SchedulerStateMachineTest, TestFailedDrawIsRetriedInNextBeginImplFrame) { |
| 659 SchedulerSettings default_scheduler_settings; | 692 SchedulerSettings default_scheduler_settings; |
| 660 StateMachine state(default_scheduler_settings); | 693 StateMachine state(default_scheduler_settings); |
| 661 SET_UP_STATE(state) | 694 SET_UP_STATE(state) |
| 662 | 695 |
| 663 // Start a draw. | 696 // Start a draw. |
| 664 state.SetNeedsRedraw(true); | 697 state.SetNeedsRedraw(true); |
| 665 EXPECT_TRUE(state.BeginFrameNeeded()); | 698 EXPECT_TRUE(state.BeginFrameNeeded()); |
| 666 state.IssueNextBeginImplFrame(); | 699 state.IssueNextBeginImplFrame(); |
| 700 EXPECT_ACTION_UPDATE_STATE( | |
| 701 SchedulerStateMachine::ACTION_NOTIFY_BEGIN_MAIN_FRAME_NOT_SENT); | |
| 667 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); | 702 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); |
| 668 state.OnBeginImplFrameDeadline(); | 703 state.OnBeginImplFrameDeadline(); |
| 669 EXPECT_TRUE(state.RedrawPending()); | 704 EXPECT_TRUE(state.RedrawPending()); |
| 670 state.SetDrawResultForTest(DRAW_ABORTED_CHECKERBOARD_ANIMATIONS); | 705 state.SetDrawResultForTest(DRAW_ABORTED_CHECKERBOARD_ANIMATIONS); |
| 671 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_DRAW_IF_POSSIBLE); | 706 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_DRAW_IF_POSSIBLE); |
| 672 | 707 |
| 673 // Failing the draw for animation checkerboards makes us require a commit. | 708 // Failing the draw for animation checkerboards makes us require a commit. |
| 674 EXPECT_ACTION_UPDATE_STATE( | 709 EXPECT_ACTION_UPDATE_STATE( |
| 675 SchedulerStateMachine::ACTION_SEND_BEGIN_MAIN_FRAME); | 710 SchedulerStateMachine::ACTION_SEND_BEGIN_MAIN_FRAME); |
| 676 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); | 711 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); |
| (...skipping 16 matching lines...) Expand all Loading... | |
| 693 | 728 |
| 694 TEST(SchedulerStateMachineTest, TestDoestDrawTwiceInSameFrame) { | 729 TEST(SchedulerStateMachineTest, TestDoestDrawTwiceInSameFrame) { |
| 695 SchedulerSettings default_scheduler_settings; | 730 SchedulerSettings default_scheduler_settings; |
| 696 StateMachine state(default_scheduler_settings); | 731 StateMachine state(default_scheduler_settings); |
| 697 SET_UP_STATE(state) | 732 SET_UP_STATE(state) |
| 698 state.SetNeedsRedraw(true); | 733 state.SetNeedsRedraw(true); |
| 699 | 734 |
| 700 // Draw the first frame. | 735 // Draw the first frame. |
| 701 EXPECT_TRUE(state.BeginFrameNeeded()); | 736 EXPECT_TRUE(state.BeginFrameNeeded()); |
| 702 state.IssueNextBeginImplFrame(); | 737 state.IssueNextBeginImplFrame(); |
| 738 EXPECT_ACTION_UPDATE_STATE( | |
| 739 SchedulerStateMachine::ACTION_NOTIFY_BEGIN_MAIN_FRAME_NOT_SENT); | |
| 703 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); | 740 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); |
| 704 | 741 |
| 705 state.OnBeginImplFrameDeadline(); | 742 state.OnBeginImplFrameDeadline(); |
| 706 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_DRAW_IF_POSSIBLE); | 743 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_DRAW_IF_POSSIBLE); |
| 707 state.DidSubmitCompositorFrame(); | 744 state.DidSubmitCompositorFrame(); |
| 708 state.DidReceiveCompositorFrameAck(); | 745 state.DidReceiveCompositorFrameAck(); |
| 709 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); | 746 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); |
| 710 | 747 |
| 711 // Before the next BeginImplFrame, set needs redraw again. | 748 // Before the next BeginImplFrame, set needs redraw again. |
| 712 // This should not redraw until the next BeginImplFrame. | 749 // This should not redraw until the next BeginImplFrame. |
| 713 state.SetNeedsRedraw(true); | 750 state.SetNeedsRedraw(true); |
| 714 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); | 751 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); |
| 715 | 752 |
| 716 // Move to another frame. This should now draw. | 753 // Move to another frame. This should now draw. |
| 717 EXPECT_TRUE(state.BeginFrameNeeded()); | 754 EXPECT_TRUE(state.BeginFrameNeeded()); |
| 718 state.IssueNextBeginImplFrame(); | 755 state.IssueNextBeginImplFrame(); |
| 756 EXPECT_ACTION_UPDATE_STATE( | |
| 757 SchedulerStateMachine::ACTION_NOTIFY_BEGIN_MAIN_FRAME_NOT_SENT); | |
| 719 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); | 758 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); |
| 720 state.OnBeginImplFrameDeadline(); | 759 state.OnBeginImplFrameDeadline(); |
| 721 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_DRAW_IF_POSSIBLE); | 760 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_DRAW_IF_POSSIBLE); |
| 722 state.DidSubmitCompositorFrame(); | 761 state.DidSubmitCompositorFrame(); |
| 723 state.DidReceiveCompositorFrameAck(); | 762 state.DidReceiveCompositorFrameAck(); |
| 724 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); | 763 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); |
| 725 | 764 |
| 726 // We just submitted, so we should proactively request another BeginImplFrame. | 765 // We just submitted, so we should proactively request another BeginImplFrame. |
| 727 EXPECT_TRUE(state.BeginFrameNeeded()); | 766 EXPECT_TRUE(state.BeginFrameNeeded()); |
| 728 } | 767 } |
| (...skipping 664 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 1393 // Since the commit was aborted, we don't need to try and draw. | 1432 // Since the commit was aborted, we don't need to try and draw. |
| 1394 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); | 1433 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); |
| 1395 state.OnBeginImplFrameDeadline(); | 1434 state.OnBeginImplFrameDeadline(); |
| 1396 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); | 1435 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); |
| 1397 | 1436 |
| 1398 // Verify another commit doesn't start on another frame either. | 1437 // Verify another commit doesn't start on another frame either. |
| 1399 EXPECT_FALSE(state.NeedsCommit()); | 1438 EXPECT_FALSE(state.NeedsCommit()); |
| 1400 EXPECT_MAIN_FRAME_STATE(SchedulerStateMachine::BEGIN_MAIN_FRAME_STATE_IDLE); | 1439 EXPECT_MAIN_FRAME_STATE(SchedulerStateMachine::BEGIN_MAIN_FRAME_STATE_IDLE); |
| 1401 | 1440 |
| 1402 state.IssueNextBeginImplFrame(); | 1441 state.IssueNextBeginImplFrame(); |
| 1442 EXPECT_ACTION_UPDATE_STATE( | |
| 1443 SchedulerStateMachine::ACTION_NOTIFY_BEGIN_MAIN_FRAME_NOT_SENT); | |
| 1403 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); | 1444 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); |
| 1404 state.OnBeginImplFrameDeadline(); | 1445 state.OnBeginImplFrameDeadline(); |
| 1405 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); | 1446 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); |
| 1406 | 1447 |
| 1407 // Verify another commit can start if requested, though. | 1448 // Verify another commit can start if requested, though. |
| 1408 state.SetNeedsBeginMainFrame(); | 1449 state.SetNeedsBeginMainFrame(); |
| 1409 EXPECT_MAIN_FRAME_STATE(SchedulerStateMachine::BEGIN_MAIN_FRAME_STATE_IDLE); | 1450 EXPECT_MAIN_FRAME_STATE(SchedulerStateMachine::BEGIN_MAIN_FRAME_STATE_IDLE); |
| 1410 state.IssueNextBeginImplFrame(); | 1451 state.IssueNextBeginImplFrame(); |
| 1411 EXPECT_ACTION(SchedulerStateMachine::ACTION_SEND_BEGIN_MAIN_FRAME); | 1452 EXPECT_ACTION(SchedulerStateMachine::ACTION_SEND_BEGIN_MAIN_FRAME); |
| 1412 } | 1453 } |
| 1413 | 1454 |
| 1414 TEST(SchedulerStateMachineTest, TestFirstContextCreation) { | 1455 TEST(SchedulerStateMachineTest, TestFirstContextCreation) { |
| 1415 SchedulerSettings default_scheduler_settings; | 1456 SchedulerSettings default_scheduler_settings; |
| 1416 StateMachine state(default_scheduler_settings); | 1457 StateMachine state(default_scheduler_settings); |
| 1417 state.SetVisible(true); | 1458 state.SetVisible(true); |
| 1418 state.SetCanDraw(true); | 1459 state.SetCanDraw(true); |
| 1419 | 1460 |
| 1420 EXPECT_ACTION_UPDATE_STATE( | 1461 EXPECT_ACTION_UPDATE_STATE( |
| 1421 SchedulerStateMachine::ACTION_BEGIN_COMPOSITOR_FRAME_SINK_CREATION); | 1462 SchedulerStateMachine::ACTION_BEGIN_COMPOSITOR_FRAME_SINK_CREATION); |
| 1422 state.CreateAndInitializeCompositorFrameSinkWithActivatedCommit(); | 1463 state.CreateAndInitializeCompositorFrameSinkWithActivatedCommit(); |
| 1423 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); | 1464 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); |
| 1424 | 1465 |
| 1425 // Check that the first init does not SetNeedsBeginMainFrame. | 1466 // Check that the first init does not SetNeedsBeginMainFrame. |
| 1426 state.IssueNextBeginImplFrame(); | 1467 state.IssueNextBeginImplFrame(); |
| 1468 EXPECT_ACTION_UPDATE_STATE( | |
| 1469 SchedulerStateMachine::ACTION_NOTIFY_BEGIN_MAIN_FRAME_NOT_SENT); | |
| 1427 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); | 1470 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); |
| 1428 state.OnBeginImplFrameDeadline(); | 1471 state.OnBeginImplFrameDeadline(); |
| 1429 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); | 1472 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); |
| 1430 | 1473 |
| 1431 // Check that a needs commit initiates a BeginMainFrame. | 1474 // Check that a needs commit initiates a BeginMainFrame. |
| 1432 state.SetNeedsBeginMainFrame(); | 1475 state.SetNeedsBeginMainFrame(); |
| 1433 state.IssueNextBeginImplFrame(); | 1476 state.IssueNextBeginImplFrame(); |
| 1434 EXPECT_ACTION_UPDATE_STATE( | 1477 EXPECT_ACTION_UPDATE_STATE( |
| 1435 SchedulerStateMachine::ACTION_SEND_BEGIN_MAIN_FRAME); | 1478 SchedulerStateMachine::ACTION_SEND_BEGIN_MAIN_FRAME); |
| 1436 } | 1479 } |
| (...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 1471 state.DidLoseCompositorFrameSink(); | 1514 state.DidLoseCompositorFrameSink(); |
| 1472 EXPECT_EQ(state.compositor_frame_sink_state(), | 1515 EXPECT_EQ(state.compositor_frame_sink_state(), |
| 1473 SchedulerStateMachine::COMPOSITOR_FRAME_SINK_NONE); | 1516 SchedulerStateMachine::COMPOSITOR_FRAME_SINK_NONE); |
| 1474 | 1517 |
| 1475 EXPECT_ACTION_UPDATE_STATE( | 1518 EXPECT_ACTION_UPDATE_STATE( |
| 1476 SchedulerStateMachine::ACTION_BEGIN_COMPOSITOR_FRAME_SINK_CREATION); | 1519 SchedulerStateMachine::ACTION_BEGIN_COMPOSITOR_FRAME_SINK_CREATION); |
| 1477 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); | 1520 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); |
| 1478 | 1521 |
| 1479 // Once context recreation begins, nothing should happen. | 1522 // Once context recreation begins, nothing should happen. |
| 1480 state.IssueNextBeginImplFrame(); | 1523 state.IssueNextBeginImplFrame(); |
| 1524 EXPECT_ACTION_UPDATE_STATE( | |
| 1525 SchedulerStateMachine::ACTION_NOTIFY_BEGIN_MAIN_FRAME_NOT_SENT); | |
| 1481 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); | 1526 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); |
| 1482 state.OnBeginImplFrameDeadline(); | 1527 state.OnBeginImplFrameDeadline(); |
| 1483 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); | 1528 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); |
| 1484 | 1529 |
| 1485 // While context is recreating, commits shouldn't begin. | 1530 // While context is recreating, commits shouldn't begin. |
| 1486 state.SetNeedsBeginMainFrame(); | 1531 state.SetNeedsBeginMainFrame(); |
| 1487 state.IssueNextBeginImplFrame(); | 1532 state.IssueNextBeginImplFrame(); |
| 1488 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); | 1533 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); |
| 1489 state.OnBeginImplFrameDeadline(); | 1534 state.OnBeginImplFrameDeadline(); |
| 1490 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); | 1535 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); |
| (...skipping 30 matching lines...) Expand all Loading... | |
| 1521 state.NotifyReadyToActivate(); | 1566 state.NotifyReadyToActivate(); |
| 1522 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_ACTIVATE_SYNC_TREE); | 1567 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_ACTIVATE_SYNC_TREE); |
| 1523 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); | 1568 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); |
| 1524 EXPECT_EQ(state.compositor_frame_sink_state(), | 1569 EXPECT_EQ(state.compositor_frame_sink_state(), |
| 1525 SchedulerStateMachine::COMPOSITOR_FRAME_SINK_ACTIVE); | 1570 SchedulerStateMachine::COMPOSITOR_FRAME_SINK_ACTIVE); |
| 1526 | 1571 |
| 1527 // Finishing the first commit after initializing an CompositorFrameSink should | 1572 // Finishing the first commit after initializing an CompositorFrameSink should |
| 1528 // automatically cause a redraw. | 1573 // automatically cause a redraw. |
| 1529 EXPECT_TRUE(state.RedrawPending()); | 1574 EXPECT_TRUE(state.RedrawPending()); |
| 1530 state.IssueNextBeginImplFrame(); | 1575 state.IssueNextBeginImplFrame(); |
| 1576 EXPECT_ACTION_UPDATE_STATE( | |
| 1577 SchedulerStateMachine::ACTION_NOTIFY_BEGIN_MAIN_FRAME_NOT_SENT); | |
| 1531 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); | 1578 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); |
| 1532 state.OnBeginImplFrameDeadline(); | 1579 state.OnBeginImplFrameDeadline(); |
| 1533 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_DRAW_IF_POSSIBLE); | 1580 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_DRAW_IF_POSSIBLE); |
| 1534 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); | 1581 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); |
| 1535 EXPECT_FALSE(state.RedrawPending()); | 1582 EXPECT_FALSE(state.RedrawPending()); |
| 1536 | 1583 |
| 1537 // Next frame as no work to do. | 1584 // Next frame as no work to do. |
| 1538 state.IssueNextBeginImplFrame(); | 1585 state.IssueNextBeginImplFrame(); |
| 1586 EXPECT_ACTION_UPDATE_STATE( | |
| 1587 SchedulerStateMachine::ACTION_NOTIFY_BEGIN_MAIN_FRAME_NOT_SENT); | |
| 1539 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); | 1588 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); |
| 1540 state.OnBeginImplFrameDeadline(); | 1589 state.OnBeginImplFrameDeadline(); |
| 1541 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); | 1590 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); |
| 1542 | 1591 |
| 1543 // Once the context is recreated, whether we draw should be based on | 1592 // Once the context is recreated, whether we draw should be based on |
| 1544 // SetCanDraw if waiting on first draw after activate. | 1593 // SetCanDraw if waiting on first draw after activate. |
| 1545 state.SetNeedsRedraw(true); | 1594 state.SetNeedsRedraw(true); |
| 1546 state.IssueNextBeginImplFrame(); | 1595 state.IssueNextBeginImplFrame(); |
| 1596 EXPECT_ACTION_UPDATE_STATE( | |
| 1597 SchedulerStateMachine::ACTION_NOTIFY_BEGIN_MAIN_FRAME_NOT_SENT); | |
| 1547 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); | 1598 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); |
| 1548 state.OnBeginImplFrameDeadline(); | 1599 state.OnBeginImplFrameDeadline(); |
| 1549 EXPECT_ACTION(SchedulerStateMachine::ACTION_DRAW_IF_POSSIBLE); | 1600 EXPECT_ACTION(SchedulerStateMachine::ACTION_DRAW_IF_POSSIBLE); |
| 1550 state.SetCanDraw(false); | 1601 state.SetCanDraw(false); |
| 1551 EXPECT_ACTION(SchedulerStateMachine::ACTION_NONE); | 1602 EXPECT_ACTION(SchedulerStateMachine::ACTION_NONE); |
| 1552 state.SetCanDraw(true); | 1603 state.SetCanDraw(true); |
| 1553 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_DRAW_IF_POSSIBLE); | 1604 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_DRAW_IF_POSSIBLE); |
| 1554 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); | 1605 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); |
| 1555 | 1606 |
| 1556 // Once the context is recreated, whether we draw should be based on | 1607 // Once the context is recreated, whether we draw should be based on |
| (...skipping 72 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 1629 BeginFrameArgs::kInvalidFrameNumber); | 1680 BeginFrameArgs::kInvalidFrameNumber); |
| 1630 | 1681 |
| 1631 // Expect to begin context recreation only in BEGIN_IMPL_FRAME_STATE_IDLE | 1682 // Expect to begin context recreation only in BEGIN_IMPL_FRAME_STATE_IDLE |
| 1632 EXPECT_IMPL_FRAME_STATE(SchedulerStateMachine::BEGIN_IMPL_FRAME_STATE_IDLE); | 1683 EXPECT_IMPL_FRAME_STATE(SchedulerStateMachine::BEGIN_IMPL_FRAME_STATE_IDLE); |
| 1633 EXPECT_ACTION( | 1684 EXPECT_ACTION( |
| 1634 SchedulerStateMachine::ACTION_BEGIN_COMPOSITOR_FRAME_SINK_CREATION); | 1685 SchedulerStateMachine::ACTION_BEGIN_COMPOSITOR_FRAME_SINK_CREATION); |
| 1635 | 1686 |
| 1636 state.OnBeginImplFrame(0, 11); | 1687 state.OnBeginImplFrame(0, 11); |
| 1637 EXPECT_IMPL_FRAME_STATE( | 1688 EXPECT_IMPL_FRAME_STATE( |
| 1638 SchedulerStateMachine::BEGIN_IMPL_FRAME_STATE_INSIDE_BEGIN_FRAME); | 1689 SchedulerStateMachine::BEGIN_IMPL_FRAME_STATE_INSIDE_BEGIN_FRAME); |
| 1690 EXPECT_ACTION_UPDATE_STATE( | |
| 1691 SchedulerStateMachine::ACTION_NOTIFY_BEGIN_MAIN_FRAME_NOT_SENT); | |
| 1639 EXPECT_ACTION(SchedulerStateMachine::ACTION_NONE); | 1692 EXPECT_ACTION(SchedulerStateMachine::ACTION_NONE); |
| 1640 EXPECT_SEQUENCE_NUMBERS(11u, 10u, 10u, 10u, | 1693 EXPECT_SEQUENCE_NUMBERS(11u, 10u, 10u, 10u, |
| 1641 BeginFrameArgs::kInvalidFrameNumber); | 1694 BeginFrameArgs::kInvalidFrameNumber); |
| 1642 | 1695 |
| 1643 state.OnBeginImplFrameDeadline(); | 1696 state.OnBeginImplFrameDeadline(); |
| 1644 EXPECT_IMPL_FRAME_STATE( | 1697 EXPECT_IMPL_FRAME_STATE( |
| 1645 SchedulerStateMachine::BEGIN_IMPL_FRAME_STATE_INSIDE_DEADLINE); | 1698 SchedulerStateMachine::BEGIN_IMPL_FRAME_STATE_INSIDE_DEADLINE); |
| 1646 EXPECT_ACTION(SchedulerStateMachine::ACTION_NONE); | 1699 EXPECT_ACTION(SchedulerStateMachine::ACTION_NONE); |
| 1647 EXPECT_SEQUENCE_NUMBERS(11u, 10u, 10u, 11u, 11u); | 1700 EXPECT_SEQUENCE_NUMBERS(11u, 10u, 10u, 11u, 11u); |
| 1648 } | 1701 } |
| (...skipping 337 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 1986 // commit. | 2039 // commit. |
| 1987 state.NotifyBeginMainFrameStarted(); | 2040 state.NotifyBeginMainFrameStarted(); |
| 1988 state.BeginMainFrameAborted(CommitEarlyOutReason::FINISHED_NO_UPDATES); | 2041 state.BeginMainFrameAborted(CommitEarlyOutReason::FINISHED_NO_UPDATES); |
| 1989 | 2042 |
| 1990 // Since the commit was aborted, we should draw right away instead of waiting | 2043 // Since the commit was aborted, we should draw right away instead of waiting |
| 1991 // for the deadline. | 2044 // for the deadline. |
| 1992 EXPECT_TRUE(state.ShouldTriggerBeginImplFrameDeadlineImmediately()); | 2045 EXPECT_TRUE(state.ShouldTriggerBeginImplFrameDeadlineImmediately()); |
| 1993 } | 2046 } |
| 1994 | 2047 |
| 1995 void FinishPreviousCommitAndDrawWithoutExitingDeadline( | 2048 void FinishPreviousCommitAndDrawWithoutExitingDeadline( |
| 1996 StateMachine* state_ptr) { | 2049 StateMachine* state_ptr, |
| 2050 bool expect_idle_work_before_impl_frame_deadline) { | |
|
Sami
2017/04/20 11:15:10
nit: expect_begin_main_frame_not_sent_before_impl_
Dan Elphick
2017/04/20 12:39:46
Done.
| |
| 1997 // Gross, but allows us to use macros below. | 2051 // Gross, but allows us to use macros below. |
| 1998 StateMachine& state = *state_ptr; | 2052 StateMachine& state = *state_ptr; |
| 1999 | 2053 |
| 2000 state.NotifyBeginMainFrameStarted(); | 2054 state.NotifyBeginMainFrameStarted(); |
| 2001 state.NotifyReadyToCommit(); | 2055 state.NotifyReadyToCommit(); |
| 2002 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_COMMIT); | 2056 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_COMMIT); |
| 2003 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); | 2057 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); |
| 2004 state.NotifyReadyToActivate(); | 2058 state.NotifyReadyToActivate(); |
| 2005 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_ACTIVATE_SYNC_TREE); | 2059 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_ACTIVATE_SYNC_TREE); |
| 2006 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); | 2060 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); |
| 2007 | 2061 |
| 2008 state.IssueNextBeginImplFrame(); | 2062 state.IssueNextBeginImplFrame(); |
| 2063 if (expect_idle_work_before_impl_frame_deadline) { | |
| 2064 EXPECT_ACTION_UPDATE_STATE( | |
| 2065 SchedulerStateMachine::ACTION_NOTIFY_BEGIN_MAIN_FRAME_NOT_SENT); | |
| 2066 } | |
| 2009 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); | 2067 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); |
| 2010 | 2068 |
| 2011 EXPECT_TRUE(state.ShouldTriggerBeginImplFrameDeadlineImmediately()); | 2069 EXPECT_TRUE(state.ShouldTriggerBeginImplFrameDeadlineImmediately()); |
| 2012 state.OnBeginImplFrameDeadline(); | 2070 state.OnBeginImplFrameDeadline(); |
| 2013 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_DRAW_IF_POSSIBLE); | 2071 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_DRAW_IF_POSSIBLE); |
| 2014 state.DidSubmitCompositorFrame(); | 2072 state.DidSubmitCompositorFrame(); |
| 2015 } | 2073 } |
| 2016 | 2074 |
| 2017 TEST(SchedulerStateMachineTest, TestImplLatencyTakesPriority) { | 2075 TEST(SchedulerStateMachineTest, TestImplLatencyTakesPriority) { |
| 2018 SchedulerSettings default_scheduler_settings; | 2076 SchedulerSettings default_scheduler_settings; |
| (...skipping 19 matching lines...) Expand all Loading... | |
| 2038 | 2096 |
| 2039 // Trigger the deadline. | 2097 // Trigger the deadline. |
| 2040 state.OnBeginImplFrameDeadline(); | 2098 state.OnBeginImplFrameDeadline(); |
| 2041 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_DRAW_IF_POSSIBLE); | 2099 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_DRAW_IF_POSSIBLE); |
| 2042 state.DidSubmitCompositorFrame(); | 2100 state.DidSubmitCompositorFrame(); |
| 2043 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); | 2101 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); |
| 2044 state.DidReceiveCompositorFrameAck(); | 2102 state.DidReceiveCompositorFrameAck(); |
| 2045 | 2103 |
| 2046 // Request a new commit and finish the previous one. | 2104 // Request a new commit and finish the previous one. |
| 2047 state.SetNeedsBeginMainFrame(); | 2105 state.SetNeedsBeginMainFrame(); |
| 2048 FinishPreviousCommitAndDrawWithoutExitingDeadline(&state); | 2106 FinishPreviousCommitAndDrawWithoutExitingDeadline(&state, false); |
| 2049 EXPECT_ACTION_UPDATE_STATE( | 2107 EXPECT_ACTION_UPDATE_STATE( |
| 2050 SchedulerStateMachine::ACTION_SEND_BEGIN_MAIN_FRAME); | 2108 SchedulerStateMachine::ACTION_SEND_BEGIN_MAIN_FRAME); |
| 2051 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); | 2109 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); |
| 2052 state.DidReceiveCompositorFrameAck(); | 2110 state.DidReceiveCompositorFrameAck(); |
| 2053 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); | 2111 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); |
| 2054 | 2112 |
| 2055 // Finish the previous commit and draw it. | 2113 // Finish the previous commit and draw it. |
| 2056 FinishPreviousCommitAndDrawWithoutExitingDeadline(&state); | 2114 FinishPreviousCommitAndDrawWithoutExitingDeadline(&state, true); |
| 2057 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); | 2115 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); |
| 2058 | 2116 |
| 2059 // Verify we do not send another BeginMainFrame if was are submit-frame | 2117 // Verify we do not send another BeginMainFrame if was are submit-frame |
| 2060 // throttled and did not just submit one. | 2118 // throttled and did not just submit one. |
| 2061 state.SetNeedsBeginMainFrame(); | 2119 state.SetNeedsBeginMainFrame(); |
| 2062 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); | 2120 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); |
| 2063 state.IssueNextBeginImplFrame(); | 2121 state.IssueNextBeginImplFrame(); |
| 2064 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); | 2122 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); |
| 2065 EXPECT_FALSE(state.ShouldTriggerBeginImplFrameDeadlineImmediately()); | 2123 EXPECT_FALSE(state.ShouldTriggerBeginImplFrameDeadlineImmediately()); |
| 2066 state.OnBeginImplFrameDeadline(); | 2124 state.OnBeginImplFrameDeadline(); |
| (...skipping 160 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 2227 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); | 2285 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); |
| 2228 } | 2286 } |
| 2229 | 2287 |
| 2230 TEST(SchedulerStateMachineTest, ImplSideInvalidationOnlyInsideDeadline) { | 2288 TEST(SchedulerStateMachineTest, ImplSideInvalidationOnlyInsideDeadline) { |
| 2231 SchedulerSettings settings; | 2289 SchedulerSettings settings; |
| 2232 StateMachine state(settings); | 2290 StateMachine state(settings); |
| 2233 SET_UP_STATE(state); | 2291 SET_UP_STATE(state); |
| 2234 | 2292 |
| 2235 state.SetNeedsImplSideInvalidation(); | 2293 state.SetNeedsImplSideInvalidation(); |
| 2236 state.IssueNextBeginImplFrame(); | 2294 state.IssueNextBeginImplFrame(); |
| 2295 EXPECT_ACTION_UPDATE_STATE( | |
| 2296 SchedulerStateMachine::ACTION_NOTIFY_BEGIN_MAIN_FRAME_NOT_SENT); | |
| 2237 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); | 2297 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); |
| 2238 state.OnBeginImplFrameDeadline(); | 2298 state.OnBeginImplFrameDeadline(); |
| 2239 EXPECT_ACTION_UPDATE_STATE( | 2299 EXPECT_ACTION_UPDATE_STATE( |
| 2240 SchedulerStateMachine::ACTION_PERFORM_IMPL_SIDE_INVALIDATION); | 2300 SchedulerStateMachine::ACTION_PERFORM_IMPL_SIDE_INVALIDATION); |
| 2241 } | 2301 } |
| 2242 | 2302 |
| 2243 TEST(SchedulerStateMachineTest, | 2303 TEST(SchedulerStateMachineTest, |
| 2244 NoImplSideInvalidationWithoutCompositorFrameSink) { | 2304 NoImplSideInvalidationWithoutCompositorFrameSink) { |
| 2245 SchedulerSettings settings; | 2305 SchedulerSettings settings; |
| 2246 StateMachine state(settings); | 2306 StateMachine state(settings); |
| 2247 SET_UP_STATE(state); | 2307 SET_UP_STATE(state); |
| 2248 | 2308 |
| 2249 // Impl-side invalidations should not be triggered till the frame sink is | 2309 // Impl-side invalidations should not be triggered till the frame sink is |
| 2250 // initialized. | 2310 // initialized. |
| 2251 state.DidLoseCompositorFrameSink(); | 2311 state.DidLoseCompositorFrameSink(); |
| 2252 EXPECT_ACTION_UPDATE_STATE( | 2312 EXPECT_ACTION_UPDATE_STATE( |
| 2253 SchedulerStateMachine::ACTION_BEGIN_COMPOSITOR_FRAME_SINK_CREATION); | 2313 SchedulerStateMachine::ACTION_BEGIN_COMPOSITOR_FRAME_SINK_CREATION); |
| 2254 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); | 2314 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); |
| 2255 | 2315 |
| 2256 // No impl-side invalidations should be performed during frame sink creation. | 2316 // No impl-side invalidations should be performed during frame sink creation. |
| 2257 state.SetNeedsImplSideInvalidation(); | 2317 state.SetNeedsImplSideInvalidation(); |
| 2258 state.IssueNextBeginImplFrame(); | 2318 state.IssueNextBeginImplFrame(); |
| 2259 state.OnBeginImplFrameDeadline(); | 2319 state.OnBeginImplFrameDeadline(); |
| 2320 EXPECT_ACTION_UPDATE_STATE( | |
| 2321 SchedulerStateMachine::ACTION_NOTIFY_BEGIN_MAIN_FRAME_NOT_SENT); | |
| 2260 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); | 2322 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); |
| 2261 | 2323 |
| 2262 // Initializing the CompositorFrameSink puts us in a state waiting for the | 2324 // Initializing the CompositorFrameSink puts us in a state waiting for the |
| 2263 // first commit. | 2325 // first commit. |
| 2264 state.DidCreateAndInitializeCompositorFrameSink(); | 2326 state.DidCreateAndInitializeCompositorFrameSink(); |
| 2265 state.IssueNextBeginImplFrame(); | 2327 state.IssueNextBeginImplFrame(); |
| 2266 EXPECT_ACTION_UPDATE_STATE( | 2328 EXPECT_ACTION_UPDATE_STATE( |
| 2267 SchedulerStateMachine::ACTION_SEND_BEGIN_MAIN_FRAME); | 2329 SchedulerStateMachine::ACTION_SEND_BEGIN_MAIN_FRAME); |
| 2268 state.NotifyBeginMainFrameStarted(); | 2330 state.NotifyBeginMainFrameStarted(); |
| 2269 state.BeginMainFrameAborted(CommitEarlyOutReason::FINISHED_NO_UPDATES); | 2331 state.BeginMainFrameAborted(CommitEarlyOutReason::FINISHED_NO_UPDATES); |
| (...skipping 74 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 2344 SchedulerSettings settings; | 2406 SchedulerSettings settings; |
| 2345 StateMachine state(settings); | 2407 StateMachine state(settings); |
| 2346 SET_UP_STATE(state); | 2408 SET_UP_STATE(state); |
| 2347 | 2409 |
| 2348 // Set up a request for impl-side invalidation. | 2410 // Set up a request for impl-side invalidation. |
| 2349 state.SetNeedsImplSideInvalidation(); | 2411 state.SetNeedsImplSideInvalidation(); |
| 2350 state.IssueNextBeginImplFrame(); | 2412 state.IssueNextBeginImplFrame(); |
| 2351 state.OnBeginImplFrameDeadline(); | 2413 state.OnBeginImplFrameDeadline(); |
| 2352 EXPECT_ACTION_UPDATE_STATE( | 2414 EXPECT_ACTION_UPDATE_STATE( |
| 2353 SchedulerStateMachine::ACTION_PERFORM_IMPL_SIDE_INVALIDATION); | 2415 SchedulerStateMachine::ACTION_PERFORM_IMPL_SIDE_INVALIDATION); |
| 2416 EXPECT_ACTION_UPDATE_STATE( | |
| 2417 SchedulerStateMachine::ACTION_NOTIFY_BEGIN_MAIN_FRAME_NOT_SENT); | |
| 2354 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); | 2418 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); |
| 2355 | 2419 |
| 2356 // Request another invalidation, which should wait until the pending tree is | 2420 // Request another invalidation, which should wait until the pending tree is |
| 2357 // activated *and* we start the next BeginFrame. | 2421 // activated *and* we start the next BeginFrame. |
| 2358 state.SetNeedsImplSideInvalidation(); | 2422 state.SetNeedsImplSideInvalidation(); |
| 2359 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); | 2423 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); |
| 2360 state.NotifyReadyToActivate(); | 2424 state.NotifyReadyToActivate(); |
| 2361 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_ACTIVATE_SYNC_TREE); | 2425 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_ACTIVATE_SYNC_TREE); |
| 2362 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); | 2426 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); |
| 2363 | 2427 |
| (...skipping 28 matching lines...) Expand all Loading... | |
| 2392 state.OnBeginImplFrameDeadline(); | 2456 state.OnBeginImplFrameDeadline(); |
| 2393 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_DRAW_IF_POSSIBLE); | 2457 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_DRAW_IF_POSSIBLE); |
| 2394 state.DidSubmitCompositorFrame(); | 2458 state.DidSubmitCompositorFrame(); |
| 2395 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); | 2459 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); |
| 2396 | 2460 |
| 2397 // Request impl-side invalidation and start a new frame, which should be | 2461 // Request impl-side invalidation and start a new frame, which should be |
| 2398 // blocked on the ack for the previous frame. | 2462 // blocked on the ack for the previous frame. |
| 2399 state.SetNeedsImplSideInvalidation(); | 2463 state.SetNeedsImplSideInvalidation(); |
| 2400 state.IssueNextBeginImplFrame(); | 2464 state.IssueNextBeginImplFrame(); |
| 2401 state.OnBeginImplFrameDeadline(); | 2465 state.OnBeginImplFrameDeadline(); |
| 2466 EXPECT_ACTION_UPDATE_STATE( | |
| 2467 SchedulerStateMachine::ACTION_NOTIFY_BEGIN_MAIN_FRAME_NOT_SENT); | |
| 2402 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); | 2468 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); |
| 2403 | 2469 |
| 2404 // Ack the previous frame and begin impl frame, which should perform the | 2470 // Ack the previous frame and begin impl frame, which should perform the |
| 2405 // invalidation now. | 2471 // invalidation now. |
| 2406 state.DidReceiveCompositorFrameAck(); | 2472 state.DidReceiveCompositorFrameAck(); |
| 2407 state.IssueNextBeginImplFrame(); | 2473 state.IssueNextBeginImplFrame(); |
| 2408 state.OnBeginImplFrameDeadline(); | 2474 state.OnBeginImplFrameDeadline(); |
| 2409 EXPECT_ACTION_UPDATE_STATE( | 2475 EXPECT_ACTION_UPDATE_STATE( |
| 2410 SchedulerStateMachine::ACTION_PERFORM_IMPL_SIDE_INVALIDATION); | 2476 SchedulerStateMachine::ACTION_PERFORM_IMPL_SIDE_INVALIDATION); |
| 2411 } | 2477 } |
| (...skipping 28 matching lines...) Expand all Loading... | |
| 2440 | 2506 |
| 2441 // Request a PrepareTiles and impl-side invalidation. The impl-side | 2507 // Request a PrepareTiles and impl-side invalidation. The impl-side |
| 2442 // invalidation should run first, since it will perform PrepareTiles as well. | 2508 // invalidation should run first, since it will perform PrepareTiles as well. |
| 2443 state.SetNeedsImplSideInvalidation(); | 2509 state.SetNeedsImplSideInvalidation(); |
| 2444 state.SetNeedsPrepareTiles(); | 2510 state.SetNeedsPrepareTiles(); |
| 2445 state.IssueNextBeginImplFrame(); | 2511 state.IssueNextBeginImplFrame(); |
| 2446 state.OnBeginImplFrameDeadline(); | 2512 state.OnBeginImplFrameDeadline(); |
| 2447 EXPECT_ACTION_UPDATE_STATE( | 2513 EXPECT_ACTION_UPDATE_STATE( |
| 2448 SchedulerStateMachine::ACTION_PERFORM_IMPL_SIDE_INVALIDATION); | 2514 SchedulerStateMachine::ACTION_PERFORM_IMPL_SIDE_INVALIDATION); |
| 2449 state.DidPrepareTiles(); | 2515 state.DidPrepareTiles(); |
| 2516 EXPECT_ACTION_UPDATE_STATE( | |
| 2517 SchedulerStateMachine::ACTION_NOTIFY_BEGIN_MAIN_FRAME_NOT_SENT); | |
| 2450 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); | 2518 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); |
| 2451 } | 2519 } |
| 2452 | 2520 |
| 2453 TEST(SchedulerStateMachineTest, TestBeginFrameFreshnessInitialState) { | 2521 TEST(SchedulerStateMachineTest, TestBeginFrameFreshnessInitialState) { |
| 2454 SchedulerSettings default_scheduler_settings; | 2522 SchedulerSettings default_scheduler_settings; |
| 2455 StateMachine state(default_scheduler_settings); | 2523 StateMachine state(default_scheduler_settings); |
| 2456 SET_UP_STATE(state) | 2524 SET_UP_STATE(state) |
| 2457 | 2525 |
| 2458 // Initially, we report invalid frame numbers. | 2526 // Initially, we report invalid frame numbers. |
| 2459 EXPECT_SEQUENCE_NUMBERS( | 2527 EXPECT_SEQUENCE_NUMBERS( |
| 2460 BeginFrameArgs::kInvalidFrameNumber, BeginFrameArgs::kInvalidFrameNumber, | 2528 BeginFrameArgs::kInvalidFrameNumber, BeginFrameArgs::kInvalidFrameNumber, |
| 2461 BeginFrameArgs::kInvalidFrameNumber, BeginFrameArgs::kInvalidFrameNumber, | 2529 BeginFrameArgs::kInvalidFrameNumber, BeginFrameArgs::kInvalidFrameNumber, |
| 2462 BeginFrameArgs::kInvalidFrameNumber); | 2530 BeginFrameArgs::kInvalidFrameNumber); |
| 2463 } | 2531 } |
| 2464 | 2532 |
| 2465 TEST(SchedulerStateMachineTest, TestBeginFrameFreshnessWithoutUpdates) { | 2533 TEST(SchedulerStateMachineTest, TestBeginFrameFreshnessWithoutUpdates) { |
| 2466 // Setup without any requested updates. | 2534 // Setup without any requested updates. |
| 2467 SchedulerSettings default_scheduler_settings; | 2535 SchedulerSettings default_scheduler_settings; |
| 2468 StateMachine state(default_scheduler_settings); | 2536 StateMachine state(default_scheduler_settings); |
| 2469 SET_UP_STATE(state) | 2537 SET_UP_STATE(state) |
| 2470 state.SetNeedsRedraw(false); | 2538 state.SetNeedsRedraw(false); |
| 2471 EXPECT_FALSE(state.RedrawPending()); | 2539 EXPECT_FALSE(state.RedrawPending()); |
| 2472 EXPECT_FALSE(state.NeedsCommit()); | 2540 EXPECT_FALSE(state.NeedsCommit()); |
| 2473 | 2541 |
| 2474 // OnBeginImplFrame() updates the sequence number. | 2542 // OnBeginImplFrame() updates the sequence number. |
| 2475 state.OnBeginImplFrame(0, 10); | 2543 state.OnBeginImplFrame(0, 10); |
| 2544 EXPECT_ACTION_UPDATE_STATE( | |
| 2545 SchedulerStateMachine::ACTION_NOTIFY_BEGIN_MAIN_FRAME_NOT_SENT); | |
| 2476 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); | 2546 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); |
| 2477 EXPECT_SEQUENCE_NUMBERS(10u, BeginFrameArgs::kInvalidFrameNumber, | 2547 EXPECT_SEQUENCE_NUMBERS(10u, BeginFrameArgs::kInvalidFrameNumber, |
| 2478 BeginFrameArgs::kInvalidFrameNumber, | 2548 BeginFrameArgs::kInvalidFrameNumber, |
| 2479 BeginFrameArgs::kInvalidFrameNumber, | 2549 BeginFrameArgs::kInvalidFrameNumber, |
| 2480 BeginFrameArgs::kInvalidFrameNumber); | 2550 BeginFrameArgs::kInvalidFrameNumber); |
| 2481 | 2551 |
| 2482 // When no updates are required, OnBeginImplFrameDeadline() updates active | 2552 // When no updates are required, OnBeginImplFrameDeadline() updates active |
| 2483 // tree and compositor frame freshness. | 2553 // tree and compositor frame freshness. |
| 2484 state.OnBeginImplFrameDeadline(); | 2554 state.OnBeginImplFrameDeadline(); |
| 2485 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); | 2555 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); |
| 2486 EXPECT_SEQUENCE_NUMBERS(10u, BeginFrameArgs::kInvalidFrameNumber, | 2556 EXPECT_SEQUENCE_NUMBERS(10u, BeginFrameArgs::kInvalidFrameNumber, |
| 2487 BeginFrameArgs::kInvalidFrameNumber, 10u, 10u); | 2557 BeginFrameArgs::kInvalidFrameNumber, 10u, 10u); |
| 2488 state.OnBeginImplFrameIdle(); | 2558 state.OnBeginImplFrameIdle(); |
| 2489 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); | 2559 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); |
| 2490 } | 2560 } |
| 2491 | 2561 |
| 2492 TEST(SchedulerStateMachineTest, TestBeginFrameFreshnessWithImplFrameUpdates) { | 2562 TEST(SchedulerStateMachineTest, TestBeginFrameFreshnessWithImplFrameUpdates) { |
| 2493 // Setup with an impl-thread draw requested. | 2563 // Setup with an impl-thread draw requested. |
| 2494 SchedulerSettings default_scheduler_settings; | 2564 SchedulerSettings default_scheduler_settings; |
| 2495 StateMachine state(default_scheduler_settings); | 2565 StateMachine state(default_scheduler_settings); |
| 2496 SET_UP_STATE(state) | 2566 SET_UP_STATE(state) |
| 2497 state.SetNeedsRedraw(true); | 2567 state.SetNeedsRedraw(true); |
| 2498 EXPECT_TRUE(state.RedrawPending()); | 2568 EXPECT_TRUE(state.RedrawPending()); |
| 2499 EXPECT_FALSE(state.NeedsCommit()); | 2569 EXPECT_FALSE(state.NeedsCommit()); |
| 2500 | 2570 |
| 2501 // OnBeginImplFrame() updates the sequence number. | 2571 // OnBeginImplFrame() updates the sequence number. |
| 2502 state.OnBeginImplFrame(0, 10); | 2572 state.OnBeginImplFrame(0, 10); |
| 2573 EXPECT_ACTION_UPDATE_STATE( | |
| 2574 SchedulerStateMachine::ACTION_NOTIFY_BEGIN_MAIN_FRAME_NOT_SENT); | |
| 2503 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); | 2575 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); |
| 2504 EXPECT_SEQUENCE_NUMBERS(10u, BeginFrameArgs::kInvalidFrameNumber, | 2576 EXPECT_SEQUENCE_NUMBERS(10u, BeginFrameArgs::kInvalidFrameNumber, |
| 2505 BeginFrameArgs::kInvalidFrameNumber, | 2577 BeginFrameArgs::kInvalidFrameNumber, |
| 2506 BeginFrameArgs::kInvalidFrameNumber, | 2578 BeginFrameArgs::kInvalidFrameNumber, |
| 2507 BeginFrameArgs::kInvalidFrameNumber); | 2579 BeginFrameArgs::kInvalidFrameNumber); |
| 2508 | 2580 |
| 2509 // With only an impl-thread draw requested, OnBeginImplFrameDeadline() | 2581 // With only an impl-thread draw requested, OnBeginImplFrameDeadline() |
| 2510 // updates the active tree freshness. | 2582 // updates the active tree freshness. |
| 2511 state.OnBeginImplFrameDeadline(); | 2583 state.OnBeginImplFrameDeadline(); |
| 2512 EXPECT_SEQUENCE_NUMBERS(10u, BeginFrameArgs::kInvalidFrameNumber, | 2584 EXPECT_SEQUENCE_NUMBERS(10u, BeginFrameArgs::kInvalidFrameNumber, |
| (...skipping 63 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 2576 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_COMMIT); | 2648 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_COMMIT); |
| 2577 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); | 2649 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); |
| 2578 EXPECT_FALSE(state.CommitPending()); | 2650 EXPECT_FALSE(state.CommitPending()); |
| 2579 EXPECT_TRUE(state.has_pending_tree()); | 2651 EXPECT_TRUE(state.has_pending_tree()); |
| 2580 EXPECT_SEQUENCE_NUMBERS(11u, 10u, 10u, BeginFrameArgs::kInvalidFrameNumber, | 2652 EXPECT_SEQUENCE_NUMBERS(11u, 10u, 10u, BeginFrameArgs::kInvalidFrameNumber, |
| 2581 BeginFrameArgs::kInvalidFrameNumber); | 2653 BeginFrameArgs::kInvalidFrameNumber); |
| 2582 | 2654 |
| 2583 // If no further BeginMainFrame is needed, OnBeginFrameImplDeadline() | 2655 // If no further BeginMainFrame is needed, OnBeginFrameImplDeadline() |
| 2584 // updates the pending tree's frame number. | 2656 // updates the pending tree's frame number. |
| 2585 state.OnBeginImplFrame(0, 12); | 2657 state.OnBeginImplFrame(0, 12); |
| 2658 EXPECT_ACTION_UPDATE_STATE( | |
| 2659 SchedulerStateMachine::ACTION_NOTIFY_BEGIN_MAIN_FRAME_NOT_SENT); | |
| 2586 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); | 2660 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); |
| 2587 EXPECT_SEQUENCE_NUMBERS(12u, 10u, 10u, BeginFrameArgs::kInvalidFrameNumber, | 2661 EXPECT_SEQUENCE_NUMBERS(12u, 10u, 10u, BeginFrameArgs::kInvalidFrameNumber, |
| 2588 BeginFrameArgs::kInvalidFrameNumber); | 2662 BeginFrameArgs::kInvalidFrameNumber); |
| 2589 state.OnBeginImplFrameDeadline(); | 2663 state.OnBeginImplFrameDeadline(); |
| 2590 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); | 2664 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); |
| 2591 EXPECT_SEQUENCE_NUMBERS(12u, 10u, 12u, BeginFrameArgs::kInvalidFrameNumber, | 2665 EXPECT_SEQUENCE_NUMBERS(12u, 10u, 12u, BeginFrameArgs::kInvalidFrameNumber, |
| 2592 BeginFrameArgs::kInvalidFrameNumber); | 2666 BeginFrameArgs::kInvalidFrameNumber); |
| 2593 state.OnBeginImplFrameIdle(); | 2667 state.OnBeginImplFrameIdle(); |
| 2594 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); | 2668 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); |
| 2595 | 2669 |
| (...skipping 41 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 2637 state.DidSubmitCompositorFrame(); | 2711 state.DidSubmitCompositorFrame(); |
| 2638 state.DidReceiveCompositorFrameAck(); | 2712 state.DidReceiveCompositorFrameAck(); |
| 2639 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); | 2713 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); |
| 2640 EXPECT_SEQUENCE_NUMBERS(14u, 14u, 12u, 14u, 14u); | 2714 EXPECT_SEQUENCE_NUMBERS(14u, 14u, 12u, 14u, 14u); |
| 2641 state.OnBeginImplFrameIdle(); | 2715 state.OnBeginImplFrameIdle(); |
| 2642 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); | 2716 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); |
| 2643 | 2717 |
| 2644 // When no updates are required, OnBeginImplFrameDeadline() updates active | 2718 // When no updates are required, OnBeginImplFrameDeadline() updates active |
| 2645 // tree and compositor frame freshness. | 2719 // tree and compositor frame freshness. |
| 2646 state.OnBeginImplFrame(0, 15); | 2720 state.OnBeginImplFrame(0, 15); |
| 2721 EXPECT_ACTION_UPDATE_STATE( | |
| 2722 SchedulerStateMachine::ACTION_NOTIFY_BEGIN_MAIN_FRAME_NOT_SENT); | |
| 2647 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); | 2723 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); |
| 2648 state.OnBeginImplFrameDeadline(); | 2724 state.OnBeginImplFrameDeadline(); |
| 2649 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); | 2725 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); |
| 2650 EXPECT_SEQUENCE_NUMBERS(15u, 14u, 12u, 15u, 15u); | 2726 EXPECT_SEQUENCE_NUMBERS(15u, 14u, 12u, 15u, 15u); |
| 2651 state.OnBeginImplFrameIdle(); | 2727 state.OnBeginImplFrameIdle(); |
| 2652 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); | 2728 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); |
| 2653 | 2729 |
| 2654 // Active tree and compositor frame freshness are updated when commit doesn't | 2730 // Active tree and compositor frame freshness are updated when commit doesn't |
| 2655 // have updates and compositor frame was fresh before. | 2731 // have updates and compositor frame was fresh before. |
| 2656 state.SetNeedsBeginMainFrameForTest(true); | 2732 state.SetNeedsBeginMainFrameForTest(true); |
| 2657 EXPECT_TRUE(state.NeedsCommit()); | 2733 EXPECT_TRUE(state.NeedsCommit()); |
| 2658 state.OnBeginImplFrame(0, 16); | 2734 state.OnBeginImplFrame(0, 16); |
| 2659 EXPECT_ACTION_UPDATE_STATE( | 2735 EXPECT_ACTION_UPDATE_STATE( |
| 2660 SchedulerStateMachine::ACTION_SEND_BEGIN_MAIN_FRAME); | 2736 SchedulerStateMachine::ACTION_SEND_BEGIN_MAIN_FRAME); |
| 2661 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); | 2737 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); |
| 2662 EXPECT_FALSE(state.NeedsCommit()); | 2738 EXPECT_FALSE(state.NeedsCommit()); |
| 2663 EXPECT_TRUE(state.CommitPending()); | 2739 EXPECT_TRUE(state.CommitPending()); |
| 2664 state.NotifyBeginMainFrameStarted(); | 2740 state.NotifyBeginMainFrameStarted(); |
| 2665 state.BeginMainFrameAborted(CommitEarlyOutReason::FINISHED_NO_UPDATES); | 2741 state.BeginMainFrameAborted(CommitEarlyOutReason::FINISHED_NO_UPDATES); |
| 2666 EXPECT_SEQUENCE_NUMBERS(16u, 16u, 12u, 16u, 16u); | 2742 EXPECT_SEQUENCE_NUMBERS(16u, 16u, 12u, 16u, 16u); |
| 2667 state.OnBeginImplFrameDeadline(); | 2743 state.OnBeginImplFrameDeadline(); |
| 2668 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); | 2744 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); |
| 2669 EXPECT_SEQUENCE_NUMBERS(16u, 16u, 12u, 16u, 16u); | 2745 EXPECT_SEQUENCE_NUMBERS(16u, 16u, 12u, 16u, 16u); |
| 2670 state.OnBeginImplFrameIdle(); | 2746 state.OnBeginImplFrameIdle(); |
| 2671 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); | 2747 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); |
| 2672 | 2748 |
| 2673 // When the source changes, the current frame number is updated and frame | 2749 // When the source changes, the current frame number is updated and frame |
| 2674 // numbers for freshness are reset to invalid numbers. | 2750 // numbers for freshness are reset to invalid numbers. |
| 2675 state.OnBeginImplFrame(1, 5); | 2751 state.OnBeginImplFrame(1, 5); |
| 2752 EXPECT_ACTION_UPDATE_STATE( | |
| 2753 SchedulerStateMachine::ACTION_NOTIFY_BEGIN_MAIN_FRAME_NOT_SENT); | |
| 2676 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); | 2754 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); |
| 2677 EXPECT_SEQUENCE_NUMBERS(5u, BeginFrameArgs::kInvalidFrameNumber, | 2755 EXPECT_SEQUENCE_NUMBERS(5u, BeginFrameArgs::kInvalidFrameNumber, |
| 2678 BeginFrameArgs::kInvalidFrameNumber, | 2756 BeginFrameArgs::kInvalidFrameNumber, |
| 2679 BeginFrameArgs::kInvalidFrameNumber, | 2757 BeginFrameArgs::kInvalidFrameNumber, |
| 2680 BeginFrameArgs::kInvalidFrameNumber); | 2758 BeginFrameArgs::kInvalidFrameNumber); |
| 2681 | 2759 |
| 2682 // When no updates are required, OnBeginImplFrameDeadline() updates active | 2760 // When no updates are required, OnBeginImplFrameDeadline() updates active |
| 2683 // tree and compositor frame freshness. | 2761 // tree and compositor frame freshness. |
| 2684 state.OnBeginImplFrameDeadline(); | 2762 state.OnBeginImplFrameDeadline(); |
| 2685 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); | 2763 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); |
| (...skipping 41 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 2727 state.OnBeginImplFrameDeadline(); | 2805 state.OnBeginImplFrameDeadline(); |
| 2728 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); | 2806 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); |
| 2729 EXPECT_SEQUENCE_NUMBERS(10u, 10u, 10u, BeginFrameArgs::kInvalidFrameNumber, | 2807 EXPECT_SEQUENCE_NUMBERS(10u, 10u, 10u, BeginFrameArgs::kInvalidFrameNumber, |
| 2730 BeginFrameArgs::kInvalidFrameNumber); | 2808 BeginFrameArgs::kInvalidFrameNumber); |
| 2731 state.OnBeginImplFrameIdle(); | 2809 state.OnBeginImplFrameIdle(); |
| 2732 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); | 2810 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); |
| 2733 } | 2811 } |
| 2734 | 2812 |
| 2735 } // namespace | 2813 } // namespace |
| 2736 } // namespace cc | 2814 } // namespace cc |
| OLD | NEW |