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

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

Issue 246753008: cc: Unify use of DidSwapBuffers() and did_request_swap (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Rebased Created 6 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 | Annotate | Revision Log
« 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 "cc/scheduler/scheduler.h" 7 #include "cc/scheduler/scheduler.h"
8 #include "cc/test/begin_frame_args_test.h" 8 #include "cc/test/begin_frame_args_test.h"
9 #include "testing/gtest/include/gtest/gtest.h" 9 #include "testing/gtest/include/gtest/gtest.h"
10 10
(...skipping 237 matching lines...) Expand 10 before | Expand all | Expand 10 after
248 SchedulerStateMachine::ACTION_ACTIVATE_PENDING_TREE); 248 SchedulerStateMachine::ACTION_ACTIVATE_PENDING_TREE);
249 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_ANIMATE); 249 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_ANIMATE);
250 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); 250 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE);
251 EXPECT_EQ(state.CommitState(), 251 EXPECT_EQ(state.CommitState(),
252 SchedulerStateMachine::COMMIT_STATE_WAITING_FOR_FIRST_DRAW); 252 SchedulerStateMachine::COMMIT_STATE_WAITING_FOR_FIRST_DRAW);
253 253
254 EXPECT_TRUE(state.ShouldTriggerBeginImplFrameDeadlineEarly()); 254 EXPECT_TRUE(state.ShouldTriggerBeginImplFrameDeadlineEarly());
255 state.OnBeginImplFrameDeadline(); 255 state.OnBeginImplFrameDeadline();
256 EXPECT_ACTION_UPDATE_STATE( 256 EXPECT_ACTION_UPDATE_STATE(
257 SchedulerStateMachine::ACTION_DRAW_AND_SWAP_IF_POSSIBLE); 257 SchedulerStateMachine::ACTION_DRAW_AND_SWAP_IF_POSSIBLE);
258 state.DidSwapBuffers();
259 state.DidSwapBuffersComplete();
258 EXPECT_EQ(state.CommitState(), SchedulerStateMachine::COMMIT_STATE_IDLE); 260 EXPECT_EQ(state.CommitState(), SchedulerStateMachine::COMMIT_STATE_IDLE);
259 EXPECT_ACTION_UPDATE_STATE( 261 EXPECT_ACTION_UPDATE_STATE(
260 SchedulerStateMachine::ACTION_SEND_BEGIN_MAIN_FRAME); 262 SchedulerStateMachine::ACTION_SEND_BEGIN_MAIN_FRAME);
261 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); 263 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE);
262 EXPECT_EQ(state.CommitState(), 264 EXPECT_EQ(state.CommitState(),
263 SchedulerStateMachine::COMMIT_STATE_BEGIN_MAIN_FRAME_SENT); 265 SchedulerStateMachine::COMMIT_STATE_BEGIN_MAIN_FRAME_SENT);
264 266
265 state.NotifyBeginMainFrameStarted(); 267 state.NotifyBeginMainFrameStarted();
266 state.NotifyReadyToCommit(); 268 state.NotifyReadyToCommit();
267 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_COMMIT); 269 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_COMMIT);
(...skipping 52 matching lines...) Expand 10 before | Expand all | Expand 10 after
320 state.NotifyReadyToActivate(); 322 state.NotifyReadyToActivate();
321 EXPECT_ACTION_UPDATE_STATE( 323 EXPECT_ACTION_UPDATE_STATE(
322 SchedulerStateMachine::ACTION_ACTIVATE_PENDING_TREE); 324 SchedulerStateMachine::ACTION_ACTIVATE_PENDING_TREE);
323 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); 325 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE);
324 326
325 EXPECT_TRUE(state.ShouldTriggerBeginImplFrameDeadlineEarly()); 327 EXPECT_TRUE(state.ShouldTriggerBeginImplFrameDeadlineEarly());
326 state.OnBeginImplFrameDeadline(); 328 state.OnBeginImplFrameDeadline();
327 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_ANIMATE); 329 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_ANIMATE);
328 EXPECT_ACTION_UPDATE_STATE( 330 EXPECT_ACTION_UPDATE_STATE(
329 SchedulerStateMachine::ACTION_DRAW_AND_SWAP_IF_POSSIBLE); 331 SchedulerStateMachine::ACTION_DRAW_AND_SWAP_IF_POSSIBLE);
332 state.DidSwapBuffers();
333 state.DidSwapBuffersComplete();
330 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_COMMIT); 334 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_COMMIT);
331 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); 335 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE);
332 EXPECT_EQ(state.CommitState(), SchedulerStateMachine::COMMIT_STATE_IDLE); 336 EXPECT_EQ(state.CommitState(), SchedulerStateMachine::COMMIT_STATE_IDLE);
333 } 337 }
334 338
335 TEST(SchedulerStateMachineTest, 339 TEST(SchedulerStateMachineTest,
336 TestFailedDrawForAnimationCheckerboardSetsNeedsCommitAndDoesNotDrawAgain) { 340 TestFailedDrawForAnimationCheckerboardSetsNeedsCommitAndDoesNotDrawAgain) {
337 SchedulerSettings default_scheduler_settings; 341 SchedulerSettings default_scheduler_settings;
338 StateMachine state(default_scheduler_settings); 342 StateMachine state(default_scheduler_settings);
339 state.SetCanStart(); 343 state.SetCanStart();
340 state.UpdateState(state.NextAction()); 344 state.UpdateState(state.NextAction());
341 state.CreateAndInitializeOutputSurfaceWithActivatedCommit(); 345 state.CreateAndInitializeOutputSurfaceWithActivatedCommit();
342 state.SetVisible(true); 346 state.SetVisible(true);
343 state.SetCanDraw(true); 347 state.SetCanDraw(true);
344 state.SetNeedsRedraw(true); 348 state.SetNeedsRedraw(true);
345 EXPECT_TRUE(state.RedrawPending()); 349 EXPECT_TRUE(state.RedrawPending());
346 EXPECT_TRUE(state.BeginFrameNeeded()); 350 EXPECT_TRUE(state.BeginFrameNeeded());
347 state.OnBeginImplFrame(CreateBeginFrameArgsForTesting()); 351 state.OnBeginImplFrame(CreateBeginFrameArgsForTesting());
348 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_ANIMATE); 352 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_ANIMATE);
349 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); 353 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE);
350 state.OnBeginImplFrameDeadline(); 354 state.OnBeginImplFrameDeadline();
351 355
352 // We're drawing now. 356 // We're drawing now.
353 EXPECT_ACTION_UPDATE_STATE( 357 EXPECT_ACTION_UPDATE_STATE(
354 SchedulerStateMachine::ACTION_DRAW_AND_SWAP_IF_POSSIBLE); 358 SchedulerStateMachine::ACTION_DRAW_AND_SWAP_IF_POSSIBLE);
359 state.DidSwapBuffers();
360 state.DidSwapBuffersComplete();
355 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); 361 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE);
356 362
357 EXPECT_FALSE(state.RedrawPending()); 363 EXPECT_FALSE(state.RedrawPending());
358 EXPECT_FALSE(state.CommitPending()); 364 EXPECT_FALSE(state.CommitPending());
359 365
360 // Failing the draw makes us require a commit. 366 // Failing the draw makes us require a commit.
361 state.DidDrawIfPossibleCompleted( 367 state.DidDrawIfPossibleCompleted(DRAW_ABORTED_CHECKERBOARD_ANIMATIONS);
362 DrawSwapReadbackResult::DRAW_ABORTED_CHECKERBOARD_ANIMATIONS);
363 state.OnBeginImplFrame(CreateBeginFrameArgsForTesting()); 368 state.OnBeginImplFrame(CreateBeginFrameArgsForTesting());
364 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_ANIMATE); 369 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_ANIMATE);
365 EXPECT_ACTION_UPDATE_STATE( 370 EXPECT_ACTION_UPDATE_STATE(
366 SchedulerStateMachine::ACTION_SEND_BEGIN_MAIN_FRAME); 371 SchedulerStateMachine::ACTION_SEND_BEGIN_MAIN_FRAME);
367 EXPECT_TRUE(state.RedrawPending()); 372 EXPECT_TRUE(state.RedrawPending());
368 EXPECT_TRUE(state.CommitPending()); 373 EXPECT_TRUE(state.CommitPending());
369 } 374 }
370 375
371 TEST(SchedulerStateMachineTest, TestFailedDrawForMissingHighResNeedsCommit) { 376 TEST(SchedulerStateMachineTest, TestFailedDrawForMissingHighResNeedsCommit) {
372 SchedulerSettings default_scheduler_settings; 377 SchedulerSettings default_scheduler_settings;
373 StateMachine state(default_scheduler_settings); 378 StateMachine state(default_scheduler_settings);
374 state.SetCanStart(); 379 state.SetCanStart();
375 state.UpdateState(state.NextAction()); 380 state.UpdateState(state.NextAction());
376 state.CreateAndInitializeOutputSurfaceWithActivatedCommit(); 381 state.CreateAndInitializeOutputSurfaceWithActivatedCommit();
377 state.SetVisible(true); 382 state.SetVisible(true);
378 state.SetCanDraw(true); 383 state.SetCanDraw(true);
379 state.SetNeedsRedraw(true); 384 state.SetNeedsRedraw(true);
380 EXPECT_TRUE(state.RedrawPending()); 385 EXPECT_TRUE(state.RedrawPending());
381 EXPECT_TRUE(state.BeginFrameNeeded()); 386 EXPECT_TRUE(state.BeginFrameNeeded());
382 387
383 state.OnBeginImplFrame(CreateBeginFrameArgsForTesting()); 388 state.OnBeginImplFrame(CreateBeginFrameArgsForTesting());
384 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_ANIMATE); 389 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_ANIMATE);
385 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); 390 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE);
386 state.OnBeginImplFrameDeadline(); 391 state.OnBeginImplFrameDeadline();
387 EXPECT_ACTION_UPDATE_STATE( 392 EXPECT_ACTION_UPDATE_STATE(
388 SchedulerStateMachine::ACTION_DRAW_AND_SWAP_IF_POSSIBLE); 393 SchedulerStateMachine::ACTION_DRAW_AND_SWAP_IF_POSSIBLE);
394 state.DidSwapBuffers();
395 state.DidSwapBuffersComplete();
389 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); 396 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE);
390 EXPECT_FALSE(state.RedrawPending()); 397 EXPECT_FALSE(state.RedrawPending());
391 EXPECT_FALSE(state.CommitPending()); 398 EXPECT_FALSE(state.CommitPending());
392 399
393 // Missing high res content requires a commit (but not a redraw) 400 // Missing high res content requires a commit (but not a redraw)
394 state.DidDrawIfPossibleCompleted( 401 state.DidDrawIfPossibleCompleted(DRAW_ABORTED_MISSING_HIGH_RES_CONTENT);
395 DrawSwapReadbackResult::DRAW_ABORTED_MISSING_HIGH_RES_CONTENT);
396 state.OnBeginImplFrame(CreateBeginFrameArgsForTesting()); 402 state.OnBeginImplFrame(CreateBeginFrameArgsForTesting());
397 EXPECT_ACTION_UPDATE_STATE( 403 EXPECT_ACTION_UPDATE_STATE(
398 SchedulerStateMachine::ACTION_SEND_BEGIN_MAIN_FRAME); 404 SchedulerStateMachine::ACTION_SEND_BEGIN_MAIN_FRAME);
399 EXPECT_FALSE(state.RedrawPending()); 405 EXPECT_FALSE(state.RedrawPending());
400 EXPECT_TRUE(state.CommitPending()); 406 EXPECT_TRUE(state.CommitPending());
401 } 407 }
402 408
403 TEST(SchedulerStateMachineTest, 409 TEST(SchedulerStateMachineTest,
404 TestsetNeedsRedrawDuringFailedDrawDoesNotRemoveNeedsRedraw) { 410 TestsetNeedsRedrawDuringFailedDrawDoesNotRemoveNeedsRedraw) {
405 SchedulerSettings default_scheduler_settings; 411 SchedulerSettings default_scheduler_settings;
406 StateMachine state(default_scheduler_settings); 412 StateMachine state(default_scheduler_settings);
407 state.SetCanStart(); 413 state.SetCanStart();
408 state.UpdateState(state.NextAction()); 414 state.UpdateState(state.NextAction());
409 state.CreateAndInitializeOutputSurfaceWithActivatedCommit(); 415 state.CreateAndInitializeOutputSurfaceWithActivatedCommit();
410 416
411 state.SetVisible(true); 417 state.SetVisible(true);
412 state.SetCanDraw(true); 418 state.SetCanDraw(true);
413 state.SetNeedsRedraw(true); 419 state.SetNeedsRedraw(true);
414 EXPECT_TRUE(state.RedrawPending()); 420 EXPECT_TRUE(state.RedrawPending());
415 EXPECT_TRUE(state.BeginFrameNeeded()); 421 EXPECT_TRUE(state.BeginFrameNeeded());
416 state.OnBeginImplFrame(CreateBeginFrameArgsForTesting()); 422 state.OnBeginImplFrame(CreateBeginFrameArgsForTesting());
417 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_ANIMATE); 423 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_ANIMATE);
418 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); 424 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE);
419 state.OnBeginImplFrameDeadline(); 425 state.OnBeginImplFrameDeadline();
420 426
421 // We're drawing now. 427 // We're drawing now.
422 EXPECT_ACTION_UPDATE_STATE( 428 EXPECT_ACTION_UPDATE_STATE(
423 SchedulerStateMachine::ACTION_DRAW_AND_SWAP_IF_POSSIBLE); 429 SchedulerStateMachine::ACTION_DRAW_AND_SWAP_IF_POSSIBLE);
430 state.DidSwapBuffers();
431 state.DidSwapBuffersComplete();
424 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); 432 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE);
425 EXPECT_FALSE(state.RedrawPending()); 433 EXPECT_FALSE(state.RedrawPending());
426 EXPECT_FALSE(state.CommitPending()); 434 EXPECT_FALSE(state.CommitPending());
427 435
428 // While still in the same BeginMainFrame callback on the main thread, 436 // While still in the same BeginMainFrame callback on the main thread,
429 // set needs redraw again. This should not redraw. 437 // set needs redraw again. This should not redraw.
430 state.SetNeedsRedraw(true); 438 state.SetNeedsRedraw(true);
431 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); 439 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE);
432 440
433 // Failing the draw for animation checkerboards makes us require a commit. 441 // Failing the draw for animation checkerboards makes us require a commit.
434 state.DidDrawIfPossibleCompleted( 442 state.DidDrawIfPossibleCompleted(DRAW_ABORTED_CHECKERBOARD_ANIMATIONS);
435 DrawSwapReadbackResult::DRAW_ABORTED_CHECKERBOARD_ANIMATIONS);
436 state.OnBeginImplFrame(CreateBeginFrameArgsForTesting()); 443 state.OnBeginImplFrame(CreateBeginFrameArgsForTesting());
437 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_ANIMATE); 444 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_ANIMATE);
438 EXPECT_ACTION_UPDATE_STATE( 445 EXPECT_ACTION_UPDATE_STATE(
439 SchedulerStateMachine::ACTION_SEND_BEGIN_MAIN_FRAME); 446 SchedulerStateMachine::ACTION_SEND_BEGIN_MAIN_FRAME);
440 EXPECT_TRUE(state.RedrawPending()); 447 EXPECT_TRUE(state.RedrawPending());
441 } 448 }
442 449
443 void TestFailedDrawsEventuallyForceDrawAfterNextCommit( 450 void TestFailedDrawsEventuallyForceDrawAfterNextCommit(
444 bool main_frame_before_draw_enabled) { 451 bool main_frame_before_draw_enabled) {
445 SchedulerSettings scheduler_settings; 452 SchedulerSettings scheduler_settings;
(...skipping 17 matching lines...) Expand all
463 EXPECT_TRUE(state.CommitPending()); 470 EXPECT_TRUE(state.CommitPending());
464 471
465 // Then initiate a draw. 472 // Then initiate a draw.
466 state.SetNeedsRedraw(true); 473 state.SetNeedsRedraw(true);
467 state.OnBeginImplFrameDeadline(); 474 state.OnBeginImplFrameDeadline();
468 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_ANIMATE); 475 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_ANIMATE);
469 EXPECT_ACTION_UPDATE_STATE( 476 EXPECT_ACTION_UPDATE_STATE(
470 SchedulerStateMachine::ACTION_DRAW_AND_SWAP_IF_POSSIBLE); 477 SchedulerStateMachine::ACTION_DRAW_AND_SWAP_IF_POSSIBLE);
471 478
472 // Fail the draw. 479 // Fail the draw.
473 state.DidDrawIfPossibleCompleted( 480 state.DidDrawIfPossibleCompleted(DRAW_ABORTED_CHECKERBOARD_ANIMATIONS);
474 DrawSwapReadbackResult::DRAW_ABORTED_CHECKERBOARD_ANIMATIONS);
475 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); 481 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE);
476 EXPECT_TRUE(state.BeginFrameNeeded()); 482 EXPECT_TRUE(state.BeginFrameNeeded());
477 EXPECT_TRUE(state.RedrawPending()); 483 EXPECT_TRUE(state.RedrawPending());
478 // But the commit is ongoing. 484 // But the commit is ongoing.
479 EXPECT_TRUE(state.CommitPending()); 485 EXPECT_TRUE(state.CommitPending());
480 486
481 // Finish the commit. Note, we should not yet be forcing a draw, but should 487 // Finish the commit. Note, we should not yet be forcing a draw, but should
482 // continue the commit as usual. 488 // continue the commit as usual.
483 state.NotifyBeginMainFrameStarted(); 489 state.NotifyBeginMainFrameStarted();
484 state.NotifyReadyToCommit(); 490 state.NotifyReadyToCommit();
485 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_COMMIT); 491 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_COMMIT);
486 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); 492 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE);
487 EXPECT_TRUE(state.RedrawPending()); 493 EXPECT_TRUE(state.RedrawPending());
488 494
489 // The redraw should be forced at the end of the next BeginImplFrame. 495 // The redraw should be forced at the end of the next BeginImplFrame.
490 state.OnBeginImplFrame(CreateBeginFrameArgsForTesting()); 496 state.OnBeginImplFrame(CreateBeginFrameArgsForTesting());
491 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_ANIMATE); 497 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_ANIMATE);
492 if (main_frame_before_draw_enabled) { 498 if (main_frame_before_draw_enabled) {
493 EXPECT_ACTION_UPDATE_STATE( 499 EXPECT_ACTION_UPDATE_STATE(
494 SchedulerStateMachine::ACTION_SEND_BEGIN_MAIN_FRAME); 500 SchedulerStateMachine::ACTION_SEND_BEGIN_MAIN_FRAME);
495 } 501 }
496 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); 502 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE);
497 state.OnBeginImplFrameDeadline(); 503 state.OnBeginImplFrameDeadline();
498 EXPECT_ACTION_UPDATE_STATE( 504 EXPECT_ACTION_UPDATE_STATE(
499 SchedulerStateMachine::ACTION_DRAW_AND_SWAP_FORCED); 505 SchedulerStateMachine::ACTION_DRAW_AND_SWAP_FORCED);
506 state.DidSwapBuffers();
507 state.DidSwapBuffersComplete();
500 } 508 }
501 509
502 TEST(SchedulerStateMachineTest, 510 TEST(SchedulerStateMachineTest,
503 TestFailedDrawsEventuallyForceDrawAfterNextCommit) { 511 TestFailedDrawsEventuallyForceDrawAfterNextCommit) {
504 bool main_frame_before_draw_enabled = false; 512 bool main_frame_before_draw_enabled = false;
505 TestFailedDrawsEventuallyForceDrawAfterNextCommit( 513 TestFailedDrawsEventuallyForceDrawAfterNextCommit(
506 main_frame_before_draw_enabled); 514 main_frame_before_draw_enabled);
507 } 515 }
508 516
509 TEST(SchedulerStateMachineTest, 517 TEST(SchedulerStateMachineTest,
(...skipping 27 matching lines...) Expand all
537 545
538 // Then initiate a draw. 546 // Then initiate a draw.
539 state.SetNeedsRedraw(true); 547 state.SetNeedsRedraw(true);
540 state.OnBeginImplFrameDeadline(); 548 state.OnBeginImplFrameDeadline();
541 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_ANIMATE); 549 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_ANIMATE);
542 EXPECT_ACTION_UPDATE_STATE( 550 EXPECT_ACTION_UPDATE_STATE(
543 SchedulerStateMachine::ACTION_DRAW_AND_SWAP_IF_POSSIBLE); 551 SchedulerStateMachine::ACTION_DRAW_AND_SWAP_IF_POSSIBLE);
544 552
545 // Fail the draw enough times to force a redraw, 553 // Fail the draw enough times to force a redraw,
546 // then once more for good measure. 554 // then once more for good measure.
547 for (int i = 0; i < draw_limit + 1; ++i) { 555 for (int i = 0; i < draw_limit + 1; ++i)
548 state.DidDrawIfPossibleCompleted( 556 state.DidDrawIfPossibleCompleted(DRAW_ABORTED_CHECKERBOARD_ANIMATIONS);
549 DrawSwapReadbackResult::DRAW_ABORTED_CHECKERBOARD_ANIMATIONS);
550 }
551 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); 557 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE);
552 EXPECT_TRUE(state.BeginFrameNeeded()); 558 EXPECT_TRUE(state.BeginFrameNeeded());
553 EXPECT_TRUE(state.RedrawPending()); 559 EXPECT_TRUE(state.RedrawPending());
554 // But the commit is ongoing. 560 // But the commit is ongoing.
555 EXPECT_TRUE(state.CommitPending()); 561 EXPECT_TRUE(state.CommitPending());
556 EXPECT_TRUE(state.ForcedRedrawState() == 562 EXPECT_TRUE(state.ForcedRedrawState() ==
557 SchedulerStateMachine::FORCED_REDRAW_STATE_WAITING_FOR_COMMIT); 563 SchedulerStateMachine::FORCED_REDRAW_STATE_WAITING_FOR_COMMIT);
558 564
559 state.NotifyBeginMainFrameStarted(); 565 state.NotifyBeginMainFrameStarted();
560 state.NotifyReadyToCommit(); 566 state.NotifyReadyToCommit();
561 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_COMMIT); 567 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_COMMIT);
562 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); 568 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE);
563 EXPECT_TRUE(state.RedrawPending()); 569 EXPECT_TRUE(state.RedrawPending());
564 EXPECT_FALSE(state.CommitPending()); 570 EXPECT_FALSE(state.CommitPending());
565 571
566 // Now force redraw should be in waiting for activation 572 // Now force redraw should be in waiting for activation
567 EXPECT_TRUE(state.ForcedRedrawState() == 573 EXPECT_TRUE(state.ForcedRedrawState() ==
568 SchedulerStateMachine::FORCED_REDRAW_STATE_WAITING_FOR_ACTIVATION); 574 SchedulerStateMachine::FORCED_REDRAW_STATE_WAITING_FOR_ACTIVATION);
569 575
570 // After failing additional draws, we should still be in a forced 576 // After failing additional draws, we should still be in a forced
571 // redraw, but not back in WAITING_FOR_COMMIT. 577 // redraw, but not back in WAITING_FOR_COMMIT.
572 for (int i = 0; i < draw_limit + 1; ++i) { 578 for (int i = 0; i < draw_limit + 1; ++i)
573 state.DidDrawIfPossibleCompleted( 579 state.DidDrawIfPossibleCompleted(DRAW_ABORTED_CHECKERBOARD_ANIMATIONS);
574 DrawSwapReadbackResult::DRAW_ABORTED_CHECKERBOARD_ANIMATIONS);
575 }
576 EXPECT_TRUE(state.RedrawPending()); 580 EXPECT_TRUE(state.RedrawPending());
577 EXPECT_TRUE(state.ForcedRedrawState() == 581 EXPECT_TRUE(state.ForcedRedrawState() ==
578 SchedulerStateMachine::FORCED_REDRAW_STATE_WAITING_FOR_ACTIVATION); 582 SchedulerStateMachine::FORCED_REDRAW_STATE_WAITING_FOR_ACTIVATION);
579 } 583 }
580 584
581 TEST(SchedulerStateMachineTest, TestFailedDrawIsRetriedInNextBeginImplFrame) { 585 TEST(SchedulerStateMachineTest, TestFailedDrawIsRetriedInNextBeginImplFrame) {
582 SchedulerSettings default_scheduler_settings; 586 SchedulerSettings default_scheduler_settings;
583 StateMachine state(default_scheduler_settings); 587 StateMachine state(default_scheduler_settings);
584 state.SetCanStart(); 588 state.SetCanStart();
585 state.UpdateState(state.NextAction()); 589 state.UpdateState(state.NextAction());
586 state.CreateAndInitializeOutputSurfaceWithActivatedCommit(); 590 state.CreateAndInitializeOutputSurfaceWithActivatedCommit();
587 state.SetVisible(true); 591 state.SetVisible(true);
588 state.SetCanDraw(true); 592 state.SetCanDraw(true);
589 593
590 // Start a draw. 594 // Start a draw.
591 state.SetNeedsRedraw(true); 595 state.SetNeedsRedraw(true);
592 EXPECT_TRUE(state.BeginFrameNeeded()); 596 EXPECT_TRUE(state.BeginFrameNeeded());
593 state.OnBeginImplFrame(CreateBeginFrameArgsForTesting()); 597 state.OnBeginImplFrame(CreateBeginFrameArgsForTesting());
594 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_ANIMATE); 598 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_ANIMATE);
595 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); 599 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE);
596 state.OnBeginImplFrameDeadline(); 600 state.OnBeginImplFrameDeadline();
597 EXPECT_TRUE(state.RedrawPending()); 601 EXPECT_TRUE(state.RedrawPending());
598 EXPECT_ACTION_UPDATE_STATE( 602 EXPECT_ACTION_UPDATE_STATE(
599 SchedulerStateMachine::ACTION_DRAW_AND_SWAP_IF_POSSIBLE); 603 SchedulerStateMachine::ACTION_DRAW_AND_SWAP_IF_POSSIBLE);
600 604
601 // Failing the draw for animation checkerboards makes us require a commit. 605 // Failing the draw for animation checkerboards makes us require a commit.
602 state.DidDrawIfPossibleCompleted( 606 state.DidDrawIfPossibleCompleted(DRAW_ABORTED_CHECKERBOARD_ANIMATIONS);
603 DrawSwapReadbackResult::DRAW_ABORTED_CHECKERBOARD_ANIMATIONS);
604 EXPECT_ACTION_UPDATE_STATE( 607 EXPECT_ACTION_UPDATE_STATE(
605 SchedulerStateMachine::ACTION_SEND_BEGIN_MAIN_FRAME); 608 SchedulerStateMachine::ACTION_SEND_BEGIN_MAIN_FRAME);
606 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); 609 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE);
607 EXPECT_TRUE(state.RedrawPending()); 610 EXPECT_TRUE(state.RedrawPending());
608 611
609 // We should not be trying to draw again now, but we have a commit pending. 612 // We should not be trying to draw again now, but we have a commit pending.
610 EXPECT_TRUE(state.BeginFrameNeeded()); 613 EXPECT_TRUE(state.BeginFrameNeeded());
611 state.OnBeginImplFrame(CreateBeginFrameArgsForTesting()); 614 state.OnBeginImplFrame(CreateBeginFrameArgsForTesting());
612 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_ANIMATE); 615 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_ANIMATE);
613 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); 616 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE);
614 617
615 // We should try to draw again at the end of the next BeginImplFrame on 618 // We should try to draw again at the end of the next BeginImplFrame on
616 // the impl thread. 619 // the impl thread.
617 state.OnBeginImplFrameDeadline(); 620 state.OnBeginImplFrameDeadline();
618 EXPECT_ACTION_UPDATE_STATE( 621 EXPECT_ACTION_UPDATE_STATE(
619 SchedulerStateMachine::ACTION_DRAW_AND_SWAP_IF_POSSIBLE); 622 SchedulerStateMachine::ACTION_DRAW_AND_SWAP_IF_POSSIBLE);
623 state.DidSwapBuffers();
624 state.DidSwapBuffersComplete();
620 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); 625 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE);
621 } 626 }
622 627
623 TEST(SchedulerStateMachineTest, TestDoestDrawTwiceInSameFrame) { 628 TEST(SchedulerStateMachineTest, TestDoestDrawTwiceInSameFrame) {
624 SchedulerSettings default_scheduler_settings; 629 SchedulerSettings default_scheduler_settings;
625 StateMachine state(default_scheduler_settings); 630 StateMachine state(default_scheduler_settings);
626 state.SetCanStart(); 631 state.SetCanStart();
627 state.UpdateState(state.NextAction()); 632 state.UpdateState(state.NextAction());
628 state.CreateAndInitializeOutputSurfaceWithActivatedCommit(); 633 state.CreateAndInitializeOutputSurfaceWithActivatedCommit();
629 state.SetVisible(true); 634 state.SetVisible(true);
630 state.SetCanDraw(true); 635 state.SetCanDraw(true);
631 state.SetNeedsRedraw(true); 636 state.SetNeedsRedraw(true);
632 637
633 // Draw the first frame. 638 // Draw the first frame.
634 EXPECT_TRUE(state.BeginFrameNeeded()); 639 EXPECT_TRUE(state.BeginFrameNeeded());
635 state.OnBeginImplFrame(CreateBeginFrameArgsForTesting()); 640 state.OnBeginImplFrame(CreateBeginFrameArgsForTesting());
636 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_ANIMATE); 641 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_ANIMATE);
637 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); 642 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE);
638 643
639 state.OnBeginImplFrameDeadline(); 644 state.OnBeginImplFrameDeadline();
640 EXPECT_ACTION_UPDATE_STATE( 645 EXPECT_ACTION_UPDATE_STATE(
641 SchedulerStateMachine::ACTION_DRAW_AND_SWAP_IF_POSSIBLE); 646 SchedulerStateMachine::ACTION_DRAW_AND_SWAP_IF_POSSIBLE);
642 state.DidDrawIfPossibleCompleted(DrawSwapReadbackResult::DRAW_SUCCESS); 647 state.DidSwapBuffers();
648 state.DidDrawIfPossibleCompleted(DRAW_SUCCESS);
649 state.DidSwapBuffersComplete();
643 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); 650 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE);
644 651
645 // Before the next BeginImplFrame, set needs redraw again. 652 // Before the next BeginImplFrame, set needs redraw again.
646 // This should not redraw until the next BeginImplFrame. 653 // This should not redraw until the next BeginImplFrame.
647 state.SetNeedsRedraw(true); 654 state.SetNeedsRedraw(true);
648 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); 655 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE);
649 656
650 // Move to another frame. This should now draw. 657 // Move to another frame. This should now draw.
651 EXPECT_TRUE(state.BeginFrameNeeded()); 658 EXPECT_TRUE(state.BeginFrameNeeded());
652 state.OnBeginImplFrame(CreateBeginFrameArgsForTesting()); 659 state.OnBeginImplFrame(CreateBeginFrameArgsForTesting());
653 660
654 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_ANIMATE); 661 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_ANIMATE);
655 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); 662 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE);
656 663
657 state.OnBeginImplFrameDeadline(); 664 state.OnBeginImplFrameDeadline();
658 EXPECT_ACTION_UPDATE_STATE( 665 EXPECT_ACTION_UPDATE_STATE(
659 SchedulerStateMachine::ACTION_DRAW_AND_SWAP_IF_POSSIBLE); 666 SchedulerStateMachine::ACTION_DRAW_AND_SWAP_IF_POSSIBLE);
660 state.DidDrawIfPossibleCompleted(DrawSwapReadbackResult::DRAW_SUCCESS); 667 state.DidSwapBuffers();
668 state.DidDrawIfPossibleCompleted(DRAW_SUCCESS);
669 state.DidSwapBuffersComplete();
661 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); 670 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE);
662 671
663 // We just swapped, so we should proactively request another BeginImplFrame. 672 // We just swapped, so we should proactively request another BeginImplFrame.
664 EXPECT_TRUE(state.BeginFrameNeeded()); 673 EXPECT_TRUE(state.BeginFrameNeeded());
665 } 674 }
666 675
667 TEST(SchedulerStateMachineTest, TestNextActionDrawsOnBeginImplFrame) { 676 TEST(SchedulerStateMachineTest, TestNextActionDrawsOnBeginImplFrame) {
668 SchedulerSettings default_scheduler_settings; 677 SchedulerSettings default_scheduler_settings;
669 678
670 // When not in BeginImplFrame deadline, or in BeginImplFrame deadline 679 // When not in BeginImplFrame deadline, or in BeginImplFrame deadline
(...skipping 226 matching lines...) Expand 10 before | Expand all | Expand 10 after
897 EXPECT_ACTION_UPDATE_STATE( 906 EXPECT_ACTION_UPDATE_STATE(
898 SchedulerStateMachine::ACTION_SEND_BEGIN_MAIN_FRAME); 907 SchedulerStateMachine::ACTION_SEND_BEGIN_MAIN_FRAME);
899 } 908 }
900 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); 909 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE);
901 910
902 state.OnBeginImplFrameDeadline(); 911 state.OnBeginImplFrameDeadline();
903 912
904 EXPECT_TRUE(state.active_tree_needs_first_draw()); 913 EXPECT_TRUE(state.active_tree_needs_first_draw());
905 EXPECT_ACTION_UPDATE_STATE( 914 EXPECT_ACTION_UPDATE_STATE(
906 SchedulerStateMachine::ACTION_DRAW_AND_SWAP_IF_POSSIBLE); 915 SchedulerStateMachine::ACTION_DRAW_AND_SWAP_IF_POSSIBLE);
907 state.DidDrawIfPossibleCompleted(DrawSwapReadbackResult::DRAW_SUCCESS); 916 state.DidSwapBuffers();
917 state.DidDrawIfPossibleCompleted(DRAW_SUCCESS);
918 state.DidSwapBuffersComplete();
908 if (!main_frame_before_draw_enabled) { 919 if (!main_frame_before_draw_enabled) {
909 EXPECT_ACTION_UPDATE_STATE( 920 EXPECT_ACTION_UPDATE_STATE(
910 SchedulerStateMachine::ACTION_SEND_BEGIN_MAIN_FRAME); 921 SchedulerStateMachine::ACTION_SEND_BEGIN_MAIN_FRAME);
911 } 922 }
912 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); 923 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE);
913 } 924 }
914 925
915 TEST(SchedulerStateMachineTest, TestSetNeedsCommitIsNotLost) { 926 TEST(SchedulerStateMachineTest, TestSetNeedsCommitIsNotLost) {
916 bool main_frame_before_draw_enabled = false; 927 bool main_frame_before_draw_enabled = false;
917 TestSetNeedsCommitIsNotLost(main_frame_before_draw_enabled); 928 TestSetNeedsCommitIsNotLost(main_frame_before_draw_enabled);
(...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after
955 EXPECT_TRUE(state.needs_redraw()); 966 EXPECT_TRUE(state.needs_redraw());
956 967
957 // Expect to do nothing until BeginImplFrame deadline 968 // Expect to do nothing until BeginImplFrame deadline
958 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); 969 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE);
959 970
960 // At BeginImplFrame deadline, draw. 971 // At BeginImplFrame deadline, draw.
961 state.OnBeginImplFrameDeadline(); 972 state.OnBeginImplFrameDeadline();
962 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_ANIMATE); 973 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_ANIMATE);
963 EXPECT_ACTION_UPDATE_STATE( 974 EXPECT_ACTION_UPDATE_STATE(
964 SchedulerStateMachine::ACTION_DRAW_AND_SWAP_IF_POSSIBLE); 975 SchedulerStateMachine::ACTION_DRAW_AND_SWAP_IF_POSSIBLE);
965 state.DidDrawIfPossibleCompleted(DrawSwapReadbackResult::DRAW_SUCCESS); 976 state.DidSwapBuffers();
977 state.DidDrawIfPossibleCompleted(DRAW_SUCCESS);
978 state.DidSwapBuffersComplete();
966 979
967 // Should be synchronized, no draw needed, no action needed. 980 // Should be synchronized, no draw needed, no action needed.
968 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); 981 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE);
969 EXPECT_EQ(SchedulerStateMachine::COMMIT_STATE_IDLE, state.CommitState()); 982 EXPECT_EQ(SchedulerStateMachine::COMMIT_STATE_IDLE, state.CommitState());
970 EXPECT_FALSE(state.needs_redraw()); 983 EXPECT_FALSE(state.needs_redraw());
971 } 984 }
972 985
973 TEST(SchedulerStateMachineTest, TestFullCycleWithCommitRequestInbetween) { 986 TEST(SchedulerStateMachineTest, TestFullCycleWithCommitRequestInbetween) {
974 SchedulerSettings default_scheduler_settings; 987 SchedulerSettings default_scheduler_settings;
975 StateMachine state(default_scheduler_settings); 988 StateMachine state(default_scheduler_settings);
(...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after
1007 EXPECT_TRUE(state.needs_redraw()); 1020 EXPECT_TRUE(state.needs_redraw());
1008 1021
1009 // Expect to do nothing until BeginImplFrame deadline. 1022 // Expect to do nothing until BeginImplFrame deadline.
1010 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); 1023 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE);
1011 1024
1012 // At BeginImplFrame deadline, draw. 1025 // At BeginImplFrame deadline, draw.
1013 state.OnBeginImplFrameDeadline(); 1026 state.OnBeginImplFrameDeadline();
1014 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_ANIMATE); 1027 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_ANIMATE);
1015 EXPECT_ACTION_UPDATE_STATE( 1028 EXPECT_ACTION_UPDATE_STATE(
1016 SchedulerStateMachine::ACTION_DRAW_AND_SWAP_IF_POSSIBLE); 1029 SchedulerStateMachine::ACTION_DRAW_AND_SWAP_IF_POSSIBLE);
1017 state.DidDrawIfPossibleCompleted(DrawSwapReadbackResult::DRAW_SUCCESS); 1030 state.DidSwapBuffers();
1031 state.DidDrawIfPossibleCompleted(DRAW_SUCCESS);
1032 state.DidSwapBuffersComplete();
1018 1033
1019 // Should be synchronized, no draw needed, no action needed. 1034 // Should be synchronized, no draw needed, no action needed.
1020 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); 1035 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE);
1021 EXPECT_EQ(SchedulerStateMachine::COMMIT_STATE_IDLE, state.CommitState()); 1036 EXPECT_EQ(SchedulerStateMachine::COMMIT_STATE_IDLE, state.CommitState());
1022 EXPECT_FALSE(state.needs_redraw()); 1037 EXPECT_FALSE(state.needs_redraw());
1023 1038
1024 // Next BeginImplFrame should initiate second commit. 1039 // Next BeginImplFrame should initiate second commit.
1025 state.OnBeginImplFrame(CreateBeginFrameArgsForTesting()); 1040 state.OnBeginImplFrame(CreateBeginFrameArgsForTesting());
1026 EXPECT_ACTION_UPDATE_STATE( 1041 EXPECT_ACTION_UPDATE_STATE(
1027 SchedulerStateMachine::ACTION_SEND_BEGIN_MAIN_FRAME); 1042 SchedulerStateMachine::ACTION_SEND_BEGIN_MAIN_FRAME);
(...skipping 90 matching lines...) Expand 10 before | Expand all | Expand 10 after
1118 EXPECT_FALSE(state.NeedsCommit()); 1133 EXPECT_FALSE(state.NeedsCommit());
1119 1134
1120 // Start a new frame; draw because this is the first frame since output 1135 // Start a new frame; draw because this is the first frame since output
1121 // surface init'd. 1136 // surface init'd.
1122 state.OnBeginImplFrame(CreateBeginFrameArgsForTesting()); 1137 state.OnBeginImplFrame(CreateBeginFrameArgsForTesting());
1123 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_ANIMATE); 1138 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_ANIMATE);
1124 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); 1139 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE);
1125 state.OnBeginImplFrameDeadline(); 1140 state.OnBeginImplFrameDeadline();
1126 EXPECT_ACTION_UPDATE_STATE( 1141 EXPECT_ACTION_UPDATE_STATE(
1127 SchedulerStateMachine::ACTION_DRAW_AND_SWAP_IF_POSSIBLE); 1142 SchedulerStateMachine::ACTION_DRAW_AND_SWAP_IF_POSSIBLE);
1143 state.DidSwapBuffers();
1144 state.DidSwapBuffersComplete();
1128 1145
1129 // Verify another commit doesn't start on another frame either. 1146 // Verify another commit doesn't start on another frame either.
1130 EXPECT_EQ(SchedulerStateMachine::COMMIT_STATE_IDLE, state.CommitState()); 1147 EXPECT_EQ(SchedulerStateMachine::COMMIT_STATE_IDLE, state.CommitState());
1131 EXPECT_EQ(SchedulerStateMachine::ACTION_NONE, state.NextAction()); 1148 EXPECT_EQ(SchedulerStateMachine::ACTION_NONE, state.NextAction());
1132 EXPECT_FALSE(state.NeedsCommit()); 1149 EXPECT_FALSE(state.NeedsCommit());
1133 1150
1134 // Verify another commit can start if requested, though. 1151 // Verify another commit can start if requested, though.
1135 state.SetNeedsCommit(); 1152 state.SetNeedsCommit();
1136 EXPECT_EQ(SchedulerStateMachine::COMMIT_STATE_IDLE, state.CommitState()); 1153 EXPECT_EQ(SchedulerStateMachine::COMMIT_STATE_IDLE, state.CommitState());
1137 EXPECT_EQ(SchedulerStateMachine::ACTION_SEND_BEGIN_MAIN_FRAME, 1154 EXPECT_EQ(SchedulerStateMachine::ACTION_SEND_BEGIN_MAIN_FRAME,
(...skipping 136 matching lines...) Expand 10 before | Expand all | Expand 10 after
1274 // Set damage and expect a draw. 1291 // Set damage and expect a draw.
1275 state.SetNeedsRedraw(true); 1292 state.SetNeedsRedraw(true);
1276 state.OnBeginImplFrame(CreateBeginFrameArgsForTesting()); 1293 state.OnBeginImplFrame(CreateBeginFrameArgsForTesting());
1277 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_ANIMATE); 1294 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_ANIMATE);
1278 EXPECT_ACTION_UPDATE_STATE( 1295 EXPECT_ACTION_UPDATE_STATE(
1279 SchedulerStateMachine::ACTION_SEND_BEGIN_MAIN_FRAME); 1296 SchedulerStateMachine::ACTION_SEND_BEGIN_MAIN_FRAME);
1280 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); 1297 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE);
1281 state.OnBeginImplFrameDeadline(); 1298 state.OnBeginImplFrameDeadline();
1282 EXPECT_ACTION_UPDATE_STATE( 1299 EXPECT_ACTION_UPDATE_STATE(
1283 SchedulerStateMachine::ACTION_DRAW_AND_SWAP_IF_POSSIBLE); 1300 SchedulerStateMachine::ACTION_DRAW_AND_SWAP_IF_POSSIBLE);
1301 state.DidSwapBuffers();
1302 state.DidSwapBuffersComplete();
1284 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); 1303 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE);
1285 1304
1286 // Cause a lost context while the BeginMainFrame is in flight. 1305 // Cause a lost context while the BeginMainFrame is in flight.
1287 state.DidLoseOutputSurface(); 1306 state.DidLoseOutputSurface();
1288 1307
1289 // Ask for another draw. Expect nothing happens. 1308 // Ask for another draw. Expect nothing happens.
1290 state.SetNeedsRedraw(true); 1309 state.SetNeedsRedraw(true);
1291 EXPECT_EQ(SchedulerStateMachine::ACTION_NONE, state.NextAction()); 1310 EXPECT_EQ(SchedulerStateMachine::ACTION_NONE, state.NextAction());
1292 1311
1293 // Finish the frame, and commit. 1312 // Finish the frame, and commit.
(...skipping 45 matching lines...) Expand 10 before | Expand all | Expand 10 after
1339 // Set damage and expect a draw. 1358 // Set damage and expect a draw.
1340 state.SetNeedsRedraw(true); 1359 state.SetNeedsRedraw(true);
1341 state.OnBeginImplFrame(CreateBeginFrameArgsForTesting()); 1360 state.OnBeginImplFrame(CreateBeginFrameArgsForTesting());
1342 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_ANIMATE); 1361 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_ANIMATE);
1343 EXPECT_ACTION_UPDATE_STATE( 1362 EXPECT_ACTION_UPDATE_STATE(
1344 SchedulerStateMachine::ACTION_SEND_BEGIN_MAIN_FRAME); 1363 SchedulerStateMachine::ACTION_SEND_BEGIN_MAIN_FRAME);
1345 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); 1364 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE);
1346 state.OnBeginImplFrameDeadline(); 1365 state.OnBeginImplFrameDeadline();
1347 EXPECT_ACTION_UPDATE_STATE( 1366 EXPECT_ACTION_UPDATE_STATE(
1348 SchedulerStateMachine::ACTION_DRAW_AND_SWAP_IF_POSSIBLE); 1367 SchedulerStateMachine::ACTION_DRAW_AND_SWAP_IF_POSSIBLE);
1368 state.DidSwapBuffers();
1369 state.DidSwapBuffersComplete();
1349 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); 1370 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE);
1350 1371
1351 // Cause a lost context while the BeginMainFrame is in flight. 1372 // Cause a lost context while the BeginMainFrame is in flight.
1352 state.DidLoseOutputSurface(); 1373 state.DidLoseOutputSurface();
1353 1374
1354 // Ask for another draw and also set needs commit. Expect nothing happens. 1375 // Ask for another draw and also set needs commit. Expect nothing happens.
1355 state.SetNeedsRedraw(true); 1376 state.SetNeedsRedraw(true);
1356 state.SetNeedsCommit(); 1377 state.SetNeedsCommit();
1357 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); 1378 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE);
1358 1379
(...skipping 38 matching lines...) Expand 10 before | Expand all | Expand 10 after
1397 SchedulerStateMachine::ACTION_SEND_BEGIN_MAIN_FRAME); 1418 SchedulerStateMachine::ACTION_SEND_BEGIN_MAIN_FRAME);
1398 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); 1419 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE);
1399 state.NotifyBeginMainFrameStarted(); 1420 state.NotifyBeginMainFrameStarted();
1400 state.NotifyReadyToCommit(); 1421 state.NotifyReadyToCommit();
1401 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_COMMIT); 1422 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_COMMIT);
1402 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); 1423 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE);
1403 state.OnBeginImplFrameDeadline(); 1424 state.OnBeginImplFrameDeadline();
1404 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_ANIMATE); 1425 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_ANIMATE);
1405 EXPECT_ACTION_UPDATE_STATE( 1426 EXPECT_ACTION_UPDATE_STATE(
1406 SchedulerStateMachine::ACTION_DRAW_AND_SWAP_IF_POSSIBLE); 1427 SchedulerStateMachine::ACTION_DRAW_AND_SWAP_IF_POSSIBLE);
1428 state.DidSwapBuffers();
1429 state.DidSwapBuffersComplete();
1407 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); 1430 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE);
1408 } 1431 }
1409 1432
1410 TEST(SchedulerStateMachineTest, TestFinishAllRenderingWhileContextLost) { 1433 TEST(SchedulerStateMachineTest, TestFinishAllRenderingWhileContextLost) {
1411 SchedulerSettings default_scheduler_settings; 1434 SchedulerSettings default_scheduler_settings;
1412 StateMachine state(default_scheduler_settings); 1435 StateMachine state(default_scheduler_settings);
1413 state.SetCanStart(); 1436 state.SetCanStart();
1414 state.UpdateState(state.NextAction()); 1437 state.UpdateState(state.NextAction());
1415 state.CreateAndInitializeOutputSurfaceWithActivatedCommit(); 1438 state.CreateAndInitializeOutputSurfaceWithActivatedCommit();
1416 state.SetVisible(true); 1439 state.SetVisible(true);
(...skipping 252 matching lines...) Expand 10 before | Expand all | Expand 10 after
1669 } 1692 }
1670 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); 1693 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE);
1671 1694
1672 state.OnBeginImplFrame(CreateBeginFrameArgsForTesting()); 1695 state.OnBeginImplFrame(CreateBeginFrameArgsForTesting());
1673 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_ANIMATE); 1696 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_ANIMATE);
1674 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); 1697 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE);
1675 // Perform the draw & swap of replacement commit. 1698 // Perform the draw & swap of replacement commit.
1676 state.OnBeginImplFrameDeadline(); 1699 state.OnBeginImplFrameDeadline();
1677 EXPECT_ACTION_UPDATE_STATE( 1700 EXPECT_ACTION_UPDATE_STATE(
1678 SchedulerStateMachine::ACTION_DRAW_AND_SWAP_IF_POSSIBLE); 1701 SchedulerStateMachine::ACTION_DRAW_AND_SWAP_IF_POSSIBLE);
1702 state.DidSwapBuffers();
1703 state.DidSwapBuffersComplete();
1679 if (!settings.main_frame_before_draw_enabled) { 1704 if (!settings.main_frame_before_draw_enabled) {
1680 // New replacement commit is scheduled. 1705 // New replacement commit is scheduled.
1681 EXPECT_ACTION_UPDATE_STATE( 1706 EXPECT_ACTION_UPDATE_STATE(
1682 SchedulerStateMachine::ACTION_SEND_BEGIN_MAIN_FRAME); 1707 SchedulerStateMachine::ACTION_SEND_BEGIN_MAIN_FRAME);
1683 // Forced commit is started. 1708 // Forced commit is started.
1684 EXPECT_EQ(SchedulerStateMachine::READBACK_STATE_WAITING_FOR_COMMIT, 1709 EXPECT_EQ(SchedulerStateMachine::READBACK_STATE_WAITING_FOR_COMMIT,
1685 state.readback_state()); 1710 state.readback_state());
1686 } 1711 }
1687 EXPECT_ACTION_UPDATE_STATE( 1712 EXPECT_ACTION_UPDATE_STATE(
1688 SchedulerStateMachine::ACTION_NONE); 1713 SchedulerStateMachine::ACTION_NONE);
(...skipping 19 matching lines...) Expand all
1708 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_COMMIT); 1733 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_COMMIT);
1709 state.NotifyReadyToActivate(); 1734 state.NotifyReadyToActivate();
1710 EXPECT_ACTION_UPDATE_STATE( 1735 EXPECT_ACTION_UPDATE_STATE(
1711 SchedulerStateMachine::ACTION_ACTIVATE_PENDING_TREE); 1736 SchedulerStateMachine::ACTION_ACTIVATE_PENDING_TREE);
1712 state.OnBeginImplFrame(CreateBeginFrameArgsForTesting()); 1737 state.OnBeginImplFrame(CreateBeginFrameArgsForTesting());
1713 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_ANIMATE); 1738 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_ANIMATE);
1714 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); 1739 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE);
1715 state.OnBeginImplFrameDeadline(); 1740 state.OnBeginImplFrameDeadline();
1716 EXPECT_ACTION_UPDATE_STATE( 1741 EXPECT_ACTION_UPDATE_STATE(
1717 SchedulerStateMachine::ACTION_DRAW_AND_SWAP_IF_POSSIBLE); 1742 SchedulerStateMachine::ACTION_DRAW_AND_SWAP_IF_POSSIBLE);
1743 state.DidSwapBuffers();
1744 state.DidSwapBuffersComplete();
1718 EXPECT_EQ(SchedulerStateMachine::READBACK_STATE_IDLE, state.readback_state()); 1745 EXPECT_EQ(SchedulerStateMachine::READBACK_STATE_IDLE, state.readback_state());
1719 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); 1746 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE);
1720 } 1747 }
1721 1748
1722 // Explicitly test when main_frame_before_draw_enabled = true. 1749 // Explicitly test when main_frame_before_draw_enabled = true.
1723 TEST(SchedulerStateMachineTest, 1750 TEST(SchedulerStateMachineTest,
1724 ForceCommitWhenReplacementActivationInProgressAndMainFrameEnabled) { 1751 ForceCommitWhenReplacementActivationInProgressAndMainFrameEnabled) {
1725 bool main_frame_before_draw_enabled = true; 1752 bool main_frame_before_draw_enabled = true;
1726 TestForceCommitWhenReplacementActivationInProgress( 1753 TestForceCommitWhenReplacementActivationInProgress(
1727 main_frame_before_draw_enabled); 1754 main_frame_before_draw_enabled);
(...skipping 52 matching lines...) Expand 10 before | Expand all | Expand 10 after
1780 EXPECT_FALSE(state.NeedsCommit()); 1807 EXPECT_FALSE(state.NeedsCommit());
1781 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); 1808 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE);
1782 1809
1783 state.OnBeginImplFrame(CreateBeginFrameArgsForTesting()); 1810 state.OnBeginImplFrame(CreateBeginFrameArgsForTesting());
1784 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_ANIMATE); 1811 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_ANIMATE);
1785 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); 1812 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE);
1786 // Perform the draw & swap of replacement commit. 1813 // Perform the draw & swap of replacement commit.
1787 state.OnBeginImplFrameDeadline(); 1814 state.OnBeginImplFrameDeadline();
1788 EXPECT_ACTION_UPDATE_STATE( 1815 EXPECT_ACTION_UPDATE_STATE(
1789 SchedulerStateMachine::ACTION_DRAW_AND_SWAP_IF_POSSIBLE); 1816 SchedulerStateMachine::ACTION_DRAW_AND_SWAP_IF_POSSIBLE);
1817 state.DidSwapBuffers();
1818 state.DidSwapBuffersComplete();
1790 EXPECT_ACTION_UPDATE_STATE( 1819 EXPECT_ACTION_UPDATE_STATE(
1791 SchedulerStateMachine::ACTION_NONE); 1820 SchedulerStateMachine::ACTION_NONE);
1792 1821
1793 // forced commit is started. 1822 // forced commit is started.
1794 state.NotifyBeginMainFrameStarted(); 1823 state.NotifyBeginMainFrameStarted();
1795 state.NotifyReadyToCommit(); 1824 state.NotifyReadyToCommit();
1796 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_COMMIT); 1825 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_COMMIT);
1797 } 1826 }
1798 1827
1799 TEST(SchedulerStateMachineTest, TestInitialActionsWhenContextLost) { 1828 TEST(SchedulerStateMachineTest, TestInitialActionsWhenContextLost) {
(...skipping 49 matching lines...) Expand 10 before | Expand all | Expand 10 after
1849 state.NotifyBeginMainFrameStarted(); 1878 state.NotifyBeginMainFrameStarted();
1850 state.NotifyReadyToCommit(); 1879 state.NotifyReadyToCommit();
1851 1880
1852 EXPECT_EQ(SchedulerStateMachine::COMMIT_STATE_READY_TO_COMMIT, 1881 EXPECT_EQ(SchedulerStateMachine::COMMIT_STATE_READY_TO_COMMIT,
1853 state.CommitState()); 1882 state.CommitState());
1854 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_COMMIT); 1883 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_COMMIT);
1855 1884
1856 EXPECT_TRUE(state.active_tree_needs_first_draw()); 1885 EXPECT_TRUE(state.active_tree_needs_first_draw());
1857 1886
1858 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_DRAW_AND_READBACK); 1887 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_DRAW_AND_READBACK);
1859 state.DidDrawIfPossibleCompleted(DrawSwapReadbackResult::DRAW_SUCCESS); 1888 state.DidSwapBuffers();
1889 state.DidDrawIfPossibleCompleted(DRAW_SUCCESS);
1890 state.DidSwapBuffersComplete();
1860 1891
1861 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); 1892 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE);
1862 1893
1863 // Should be waiting for the normal BeginMainFrame. 1894 // Should be waiting for the normal BeginMainFrame.
1864 EXPECT_EQ(SchedulerStateMachine::COMMIT_STATE_BEGIN_MAIN_FRAME_SENT, 1895 EXPECT_EQ(SchedulerStateMachine::COMMIT_STATE_BEGIN_MAIN_FRAME_SENT,
1865 state.CommitState()); 1896 state.CommitState());
1866 } 1897 }
1867 1898
1868 TEST(SchedulerStateMachineTest, TestImmediateFinishCommitDuringCommit) { 1899 TEST(SchedulerStateMachineTest, TestImmediateFinishCommitDuringCommit) {
1869 SchedulerSettings scheduler_settings; 1900 SchedulerSettings scheduler_settings;
(...skipping 15 matching lines...) Expand all
1885 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); 1916 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE);
1886 state.NotifyBeginMainFrameStarted(); 1917 state.NotifyBeginMainFrameStarted();
1887 state.NotifyReadyToCommit(); 1918 state.NotifyReadyToCommit();
1888 EXPECT_EQ(SchedulerStateMachine::COMMIT_STATE_READY_TO_COMMIT, 1919 EXPECT_EQ(SchedulerStateMachine::COMMIT_STATE_READY_TO_COMMIT,
1889 state.CommitState()); 1920 state.CommitState());
1890 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_COMMIT); 1921 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_COMMIT);
1891 1922
1892 EXPECT_TRUE(state.active_tree_needs_first_draw()); 1923 EXPECT_TRUE(state.active_tree_needs_first_draw());
1893 1924
1894 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_DRAW_AND_READBACK); 1925 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_DRAW_AND_READBACK);
1895 state.DidDrawIfPossibleCompleted(DrawSwapReadbackResult::DRAW_SUCCESS); 1926 state.DidSwapBuffers();
1927 state.DidDrawIfPossibleCompleted(DRAW_SUCCESS);
1928 state.DidSwapBuffersComplete();
1896 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); 1929 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE);
1897 1930
1898 // Should be waiting for the normal BeginMainFrame. 1931 // Should be waiting for the normal BeginMainFrame.
1899 EXPECT_EQ(SchedulerStateMachine::COMMIT_STATE_BEGIN_MAIN_FRAME_SENT, 1932 EXPECT_EQ(SchedulerStateMachine::COMMIT_STATE_BEGIN_MAIN_FRAME_SENT,
1900 state.CommitState()) 1933 state.CommitState())
1901 << *state.AsValue(); 1934 << *state.AsValue();
1902 } 1935 }
1903 1936
1904 TEST(SchedulerStateMachineTest, ImmediateBeginMainFrameAbortedWhileInvisible) { 1937 TEST(SchedulerStateMachineTest, ImmediateBeginMainFrameAbortedWhileInvisible) {
1905 SchedulerSettings scheduler_settings; 1938 SchedulerSettings scheduler_settings;
(...skipping 13 matching lines...) Expand all
1919 state.NotifyBeginMainFrameStarted(); 1952 state.NotifyBeginMainFrameStarted();
1920 state.NotifyReadyToCommit(); 1953 state.NotifyReadyToCommit();
1921 1954
1922 EXPECT_EQ(SchedulerStateMachine::COMMIT_STATE_READY_TO_COMMIT, 1955 EXPECT_EQ(SchedulerStateMachine::COMMIT_STATE_READY_TO_COMMIT,
1923 state.CommitState()); 1956 state.CommitState());
1924 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_COMMIT); 1957 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_COMMIT);
1925 1958
1926 EXPECT_TRUE(state.active_tree_needs_first_draw()); 1959 EXPECT_TRUE(state.active_tree_needs_first_draw());
1927 1960
1928 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_DRAW_AND_READBACK); 1961 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_DRAW_AND_READBACK);
1929 state.DidDrawIfPossibleCompleted(DrawSwapReadbackResult::DRAW_SUCCESS); 1962 state.DidSwapBuffers();
1963 state.DidDrawIfPossibleCompleted(DRAW_SUCCESS);
1964 state.DidSwapBuffersComplete();
1930 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); 1965 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE);
1931 1966
1932 // Should be waiting for BeginMainFrame. 1967 // Should be waiting for BeginMainFrame.
1933 EXPECT_EQ(SchedulerStateMachine::COMMIT_STATE_BEGIN_MAIN_FRAME_SENT, 1968 EXPECT_EQ(SchedulerStateMachine::COMMIT_STATE_BEGIN_MAIN_FRAME_SENT,
1934 state.CommitState()) 1969 state.CommitState())
1935 << *state.AsValue(); 1970 << *state.AsValue();
1936 1971
1937 // Become invisible and abort BeginMainFrame. 1972 // Become invisible and abort BeginMainFrame.
1938 state.SetVisible(false); 1973 state.SetVisible(false);
1939 state.BeginMainFrameAborted(false); 1974 state.BeginMainFrameAborted(false);
(...skipping 20 matching lines...) Expand all
1960 state.NotifyBeginMainFrameStarted(); 1995 state.NotifyBeginMainFrameStarted();
1961 state.NotifyReadyToCommit(); 1996 state.NotifyReadyToCommit();
1962 1997
1963 EXPECT_EQ(SchedulerStateMachine::COMMIT_STATE_READY_TO_COMMIT, 1998 EXPECT_EQ(SchedulerStateMachine::COMMIT_STATE_READY_TO_COMMIT,
1964 state.CommitState()); 1999 state.CommitState());
1965 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_COMMIT); 2000 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_COMMIT);
1966 2001
1967 EXPECT_TRUE(state.active_tree_needs_first_draw()); 2002 EXPECT_TRUE(state.active_tree_needs_first_draw());
1968 2003
1969 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_DRAW_AND_READBACK); 2004 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_DRAW_AND_READBACK);
1970 state.DidDrawIfPossibleCompleted(DrawSwapReadbackResult::DRAW_SUCCESS); 2005 state.DidSwapBuffers();
2006 state.DidDrawIfPossibleCompleted(DRAW_SUCCESS);
2007 state.DidSwapBuffersComplete();
1971 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); 2008 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE);
1972 } 2009 }
1973 2010
1974 TEST(SchedulerStateMachineTest, ReportIfNotDrawing) { 2011 TEST(SchedulerStateMachineTest, ReportIfNotDrawing) {
1975 SchedulerSettings default_scheduler_settings; 2012 SchedulerSettings default_scheduler_settings;
1976 StateMachine state(default_scheduler_settings); 2013 StateMachine state(default_scheduler_settings);
1977 state.SetCanStart(); 2014 state.SetCanStart();
1978 state.UpdateState(state.NextAction()); 2015 state.UpdateState(state.NextAction());
1979 state.CreateAndInitializeOutputSurfaceWithActivatedCommit(); 2016 state.CreateAndInitializeOutputSurfaceWithActivatedCommit();
1980 2017
(...skipping 152 matching lines...) Expand 10 before | Expand all | Expand 10 after
2133 state.SetNeedsAnimate(); 2170 state.SetNeedsAnimate();
2134 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); 2171 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE);
2135 2172
2136 state.OnBeginImplFrameDeadline(); 2173 state.OnBeginImplFrameDeadline();
2137 EXPECT_ACTION_UPDATE_STATE( 2174 EXPECT_ACTION_UPDATE_STATE(
2138 SchedulerStateMachine::ACTION_DRAW_AND_SWAP_IF_POSSIBLE); 2175 SchedulerStateMachine::ACTION_DRAW_AND_SWAP_IF_POSSIBLE);
2139 } 2176 }
2140 2177
2141 } // namespace 2178 } // namespace
2142 } // namespace cc 2179 } // 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