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

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

Issue 2753843003: Create a new action triggered when a BeginMainFrame is not expected before vsync (Closed)
Patch Set: Add BeginMainFrameNotExpectedUntil to content::CompositorImpl for Android. Created 3 years, 7 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
« no previous file with comments | « cc/scheduler/scheduler_state_machine.cc ('k') | cc/scheduler/scheduler_unittest.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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/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
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
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
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
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
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
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
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
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
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
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
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
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_begin_main_frame_not_sent_before_impl_frame_deadline) {
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_begin_main_frame_not_sent_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
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
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
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
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
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
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
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
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
OLDNEW
« no previous file with comments | « cc/scheduler/scheduler_state_machine.cc ('k') | cc/scheduler/scheduler_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698