OLD | NEW |
1 // Copyright 2011 The Chromium Authors. All rights reserved. | 1 // Copyright 2011 The Chromium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #include "cc/scheduler/scheduler_state_machine.h" | 5 #include "cc/scheduler/scheduler_state_machine.h" |
6 | 6 |
7 #include "base/trace_event/trace_event.h" | 7 #include "base/trace_event/trace_event.h" |
8 #include "cc/scheduler/scheduler.h" | 8 #include "cc/scheduler/scheduler.h" |
9 #include "cc/test/begin_frame_args_test.h" | 9 #include "cc/test/begin_frame_args_test.h" |
10 #include "testing/gtest/include/gtest/gtest.h" | 10 #include "testing/gtest/include/gtest/gtest.h" |
(...skipping 23 matching lines...) Expand all Loading... |
34 << state.AsValue()->ToString() | 34 << state.AsValue()->ToString() |
35 | 35 |
36 #define EXPECT_ACTION_UPDATE_STATE(action) \ | 36 #define EXPECT_ACTION_UPDATE_STATE(action) \ |
37 EXPECT_ACTION(action); \ | 37 EXPECT_ACTION(action); \ |
38 if (action == SchedulerStateMachine::ACTION_DRAW_AND_SWAP_IF_POSSIBLE || \ | 38 if (action == SchedulerStateMachine::ACTION_DRAW_AND_SWAP_IF_POSSIBLE || \ |
39 action == SchedulerStateMachine::ACTION_DRAW_AND_SWAP_FORCED) { \ | 39 action == SchedulerStateMachine::ACTION_DRAW_AND_SWAP_FORCED) { \ |
40 EXPECT_IMPL_FRAME_STATE( \ | 40 EXPECT_IMPL_FRAME_STATE( \ |
41 SchedulerStateMachine::BEGIN_IMPL_FRAME_STATE_INSIDE_DEADLINE); \ | 41 SchedulerStateMachine::BEGIN_IMPL_FRAME_STATE_INSIDE_DEADLINE); \ |
42 } \ | 42 } \ |
43 state.WillAction(action); \ | 43 state.WillAction(action); \ |
| 44 state.DidAction(action); \ |
44 if (action == SchedulerStateMachine::ACTION_NONE) { \ | 45 if (action == SchedulerStateMachine::ACTION_NONE) { \ |
45 if (state.begin_impl_frame_state() == \ | 46 if (state.begin_impl_frame_state() == \ |
46 SchedulerStateMachine::BEGIN_IMPL_FRAME_STATE_BEGIN_FRAME_STARTING) \ | 47 SchedulerStateMachine::BEGIN_IMPL_FRAME_STATE_BEGIN_FRAME_STARTING) \ |
47 state.OnBeginImplFrameDeadlinePending(); \ | 48 state.OnBeginImplFrameDeadlinePending(); \ |
48 if (state.begin_impl_frame_state() == \ | 49 if (state.begin_impl_frame_state() == \ |
49 SchedulerStateMachine::BEGIN_IMPL_FRAME_STATE_INSIDE_DEADLINE) \ | 50 SchedulerStateMachine::BEGIN_IMPL_FRAME_STATE_INSIDE_DEADLINE) \ |
50 state.OnBeginImplFrameIdle(); \ | 51 state.OnBeginImplFrameIdle(); \ |
51 } | 52 } |
52 | 53 |
53 #define SET_UP_STATE(state) \ | 54 #define SET_UP_STATE(state) \ |
(...skipping 292 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
346 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_ANIMATE); | 347 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_ANIMATE); |
347 EXPECT_ACTION_UPDATE_STATE( | 348 EXPECT_ACTION_UPDATE_STATE( |
348 SchedulerStateMachine::ACTION_DRAW_AND_SWAP_IF_POSSIBLE); | 349 SchedulerStateMachine::ACTION_DRAW_AND_SWAP_IF_POSSIBLE); |
349 state.DidSwapBuffers(); | 350 state.DidSwapBuffers(); |
350 state.DidSwapBuffersComplete(); | 351 state.DidSwapBuffersComplete(); |
351 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); | 352 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); |
352 EXPECT_MAIN_FRAME_STATE(SchedulerStateMachine::BEGIN_MAIN_FRAME_STATE_IDLE); | 353 EXPECT_MAIN_FRAME_STATE(SchedulerStateMachine::BEGIN_MAIN_FRAME_STATE_IDLE); |
353 } | 354 } |
354 | 355 |
355 TEST(SchedulerStateMachineTest, | 356 TEST(SchedulerStateMachineTest, |
356 TestFailedDrawForAnimationCheckerboardSetsNeedsCommitAndDoesNotDrawAgain) { | 357 FailedDrawForAnimationCheckerboardSetsNeedsCommitAndRetriesDraw) { |
357 SchedulerSettings default_scheduler_settings; | |
358 StateMachine state(default_scheduler_settings); | |
359 SET_UP_STATE(state) | |
360 state.SetNeedsRedraw(true); | |
361 EXPECT_TRUE(state.RedrawPending()); | |
362 EXPECT_TRUE(state.BeginFrameNeeded()); | |
363 state.OnBeginImplFrame(); | |
364 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_ANIMATE); | |
365 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); | |
366 state.OnBeginImplFrameDeadline(); | |
367 | |
368 // We're drawing now. | |
369 EXPECT_ACTION_UPDATE_STATE( | |
370 SchedulerStateMachine::ACTION_DRAW_AND_SWAP_IF_POSSIBLE); | |
371 state.DidSwapBuffers(); | |
372 state.DidSwapBuffersComplete(); | |
373 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); | |
374 | |
375 EXPECT_FALSE(state.RedrawPending()); | |
376 EXPECT_FALSE(state.CommitPending()); | |
377 | |
378 // Failing the draw makes us require a commit. | |
379 state.DidDrawIfPossibleCompleted(DRAW_ABORTED_CHECKERBOARD_ANIMATIONS); | |
380 state.OnBeginImplFrame(); | |
381 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_ANIMATE); | |
382 EXPECT_ACTION_UPDATE_STATE( | |
383 SchedulerStateMachine::ACTION_SEND_BEGIN_MAIN_FRAME); | |
384 EXPECT_TRUE(state.RedrawPending()); | |
385 EXPECT_TRUE(state.CommitPending()); | |
386 } | |
387 | |
388 TEST(SchedulerStateMachineTest, TestFailedDrawForMissingHighResNeedsCommit) { | |
389 SchedulerSettings default_scheduler_settings; | 358 SchedulerSettings default_scheduler_settings; |
390 StateMachine state(default_scheduler_settings); | 359 StateMachine state(default_scheduler_settings); |
391 SET_UP_STATE(state) | 360 SET_UP_STATE(state) |
392 state.SetNeedsRedraw(true); | 361 state.SetNeedsRedraw(true); |
393 EXPECT_TRUE(state.RedrawPending()); | 362 EXPECT_TRUE(state.RedrawPending()); |
394 EXPECT_TRUE(state.BeginFrameNeeded()); | 363 EXPECT_TRUE(state.BeginFrameNeeded()); |
395 | 364 |
| 365 // Start a frame. |
396 state.OnBeginImplFrame(); | 366 state.OnBeginImplFrame(); |
397 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_ANIMATE); | 367 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_ANIMATE); |
398 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); | 368 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); |
| 369 state.OnBeginImplFrameDeadlinePending(); |
| 370 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); |
| 371 EXPECT_FALSE(state.CommitPending()); |
| 372 |
| 373 // Failing a draw triggers request for a new BeginMainFrame. |
399 state.OnBeginImplFrameDeadline(); | 374 state.OnBeginImplFrameDeadline(); |
| 375 state.SetDrawResult(DRAW_ABORTED_CHECKERBOARD_ANIMATIONS); |
400 EXPECT_ACTION_UPDATE_STATE( | 376 EXPECT_ACTION_UPDATE_STATE( |
401 SchedulerStateMachine::ACTION_DRAW_AND_SWAP_IF_POSSIBLE); | 377 SchedulerStateMachine::ACTION_DRAW_AND_SWAP_IF_POSSIBLE); |
402 state.DidSwapBuffers(); | 378 state.DidSwapBuffers(); |
| 379 EXPECT_ACTION_UPDATE_STATE( |
| 380 SchedulerStateMachine::ACTION_SEND_BEGIN_MAIN_FRAME); |
| 381 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); |
| 382 state.OnBeginImplFrameIdle(); |
| 383 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); |
403 state.DidSwapBuffersComplete(); | 384 state.DidSwapBuffersComplete(); |
404 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); | 385 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); |
405 EXPECT_FALSE(state.RedrawPending()); | |
406 EXPECT_FALSE(state.CommitPending()); | |
407 | 386 |
408 // Missing high res content requires a commit (but not a redraw) | 387 // It's okay to attempt more draws just in case additional raster |
409 state.DidDrawIfPossibleCompleted(DRAW_ABORTED_MISSING_HIGH_RES_CONTENT); | 388 // finishes and the requested commit wasn't actually necessary. |
| 389 EXPECT_TRUE(state.CommitPending()); |
| 390 EXPECT_TRUE(state.RedrawPending()); |
410 state.OnBeginImplFrame(); | 391 state.OnBeginImplFrame(); |
| 392 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_ANIMATE); |
| 393 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); |
| 394 state.OnBeginImplFrameDeadlinePending(); |
| 395 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); |
| 396 state.OnBeginImplFrameDeadline(); |
| 397 state.SetDrawResult(DRAW_ABORTED_CHECKERBOARD_ANIMATIONS); |
411 EXPECT_ACTION_UPDATE_STATE( | 398 EXPECT_ACTION_UPDATE_STATE( |
412 SchedulerStateMachine::ACTION_SEND_BEGIN_MAIN_FRAME); | 399 SchedulerStateMachine::ACTION_DRAW_AND_SWAP_IF_POSSIBLE); |
413 EXPECT_FALSE(state.RedrawPending()); | 400 state.DidSwapBuffers(); |
414 EXPECT_TRUE(state.CommitPending()); | 401 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); |
| 402 state.OnBeginImplFrameIdle(); |
| 403 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); |
| 404 state.DidSwapBuffersComplete(); |
| 405 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); |
415 } | 406 } |
416 | 407 |
417 TEST(SchedulerStateMachineTest, | 408 TEST(SchedulerStateMachineTest, FailedDrawForMissingHighResNeedsCommit) { |
418 TestsetNeedsRedrawDuringFailedDrawDoesNotRemoveNeedsRedraw) { | |
419 SchedulerSettings default_scheduler_settings; | 409 SchedulerSettings default_scheduler_settings; |
420 StateMachine state(default_scheduler_settings); | 410 StateMachine state(default_scheduler_settings); |
421 SET_UP_STATE(state) | 411 SET_UP_STATE(state) |
422 state.SetNeedsRedraw(true); | 412 state.SetNeedsRedraw(true); |
423 EXPECT_TRUE(state.RedrawPending()); | 413 EXPECT_TRUE(state.RedrawPending()); |
424 EXPECT_TRUE(state.BeginFrameNeeded()); | 414 EXPECT_TRUE(state.BeginFrameNeeded()); |
| 415 |
| 416 // Start a frame. |
425 state.OnBeginImplFrame(); | 417 state.OnBeginImplFrame(); |
426 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_ANIMATE); | 418 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_ANIMATE); |
427 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); | 419 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); |
| 420 state.OnBeginImplFrameDeadlinePending(); |
| 421 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); |
| 422 EXPECT_FALSE(state.CommitPending()); |
| 423 |
| 424 // Failing a draw triggers because of high res tiles missing |
| 425 // request for a new BeginMainFrame. |
428 state.OnBeginImplFrameDeadline(); | 426 state.OnBeginImplFrameDeadline(); |
429 | 427 state.SetDrawResult(DRAW_ABORTED_MISSING_HIGH_RES_CONTENT); |
430 // We're drawing now. | |
431 EXPECT_ACTION_UPDATE_STATE( | 428 EXPECT_ACTION_UPDATE_STATE( |
432 SchedulerStateMachine::ACTION_DRAW_AND_SWAP_IF_POSSIBLE); | 429 SchedulerStateMachine::ACTION_DRAW_AND_SWAP_IF_POSSIBLE); |
433 state.DidSwapBuffers(); | 430 state.DidSwapBuffers(); |
| 431 EXPECT_ACTION_UPDATE_STATE( |
| 432 SchedulerStateMachine::ACTION_SEND_BEGIN_MAIN_FRAME); |
| 433 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); |
| 434 state.OnBeginImplFrameIdle(); |
| 435 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); |
434 state.DidSwapBuffersComplete(); | 436 state.DidSwapBuffersComplete(); |
435 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); | 437 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); |
| 438 |
| 439 // It doesn't request a draw until we get a new commit though. |
| 440 EXPECT_TRUE(state.CommitPending()); |
436 EXPECT_FALSE(state.RedrawPending()); | 441 EXPECT_FALSE(state.RedrawPending()); |
437 EXPECT_FALSE(state.CommitPending()); | 442 state.OnBeginImplFrame(); |
438 | 443 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); |
439 // While still in the same BeginMainFrame callback on the main thread, | 444 state.OnBeginImplFrameDeadlinePending(); |
440 // set needs redraw again. This should not redraw. | 445 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); |
441 state.SetNeedsRedraw(true); | 446 state.OnBeginImplFrameDeadline(); |
| 447 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); |
| 448 state.OnBeginImplFrameIdle(); |
442 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); | 449 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); |
443 | 450 |
444 // Failing the draw for animation checkerboards makes us require a commit. | 451 // Finish the commit and activation. |
445 state.DidDrawIfPossibleCompleted(DRAW_ABORTED_CHECKERBOARD_ANIMATIONS); | 452 state.NotifyBeginMainFrameStarted(); |
| 453 state.NotifyReadyToCommit(); |
| 454 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_COMMIT); |
| 455 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); |
| 456 state.NotifyReadyToActivate(); |
| 457 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_ACTIVATE_SYNC_TREE); |
| 458 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); |
| 459 EXPECT_TRUE(state.RedrawPending()); |
| 460 |
| 461 // Verify we draw with the new frame. |
446 state.OnBeginImplFrame(); | 462 state.OnBeginImplFrame(); |
447 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_ANIMATE); | 463 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_ANIMATE); |
| 464 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); |
| 465 state.OnBeginImplFrameDeadlinePending(); |
| 466 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); |
| 467 state.OnBeginImplFrameDeadline(); |
448 EXPECT_ACTION_UPDATE_STATE( | 468 EXPECT_ACTION_UPDATE_STATE( |
449 SchedulerStateMachine::ACTION_SEND_BEGIN_MAIN_FRAME); | 469 SchedulerStateMachine::ACTION_DRAW_AND_SWAP_IF_POSSIBLE); |
450 EXPECT_TRUE(state.RedrawPending()); | 470 state.DidSwapBuffers(); |
| 471 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); |
| 472 state.OnBeginImplFrameIdle(); |
| 473 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); |
451 } | 474 } |
452 | 475 |
453 TEST(SchedulerStateMachineTest, | 476 TEST(SchedulerStateMachineTest, |
454 TestFailedDrawsEventuallyForceDrawAfterNextCommit) { | 477 TestFailedDrawsEventuallyForceDrawAfterNextCommit) { |
455 SchedulerSettings scheduler_settings; | 478 SchedulerSettings scheduler_settings; |
456 scheduler_settings.maximum_number_of_failed_draws_before_draw_is_forced = 1; | 479 scheduler_settings.maximum_number_of_failed_draws_before_draw_is_forced = 1; |
457 StateMachine state(scheduler_settings); | 480 StateMachine state(scheduler_settings); |
458 SET_UP_STATE(state) | 481 SET_UP_STATE(state) |
459 | 482 |
460 // Start a commit. | 483 // Start a commit. |
461 state.SetNeedsBeginMainFrame(); | 484 state.SetNeedsBeginMainFrame(); |
462 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); | 485 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); |
463 state.OnBeginImplFrame(); | 486 state.OnBeginImplFrame(); |
464 EXPECT_ACTION_UPDATE_STATE( | 487 EXPECT_ACTION_UPDATE_STATE( |
465 SchedulerStateMachine::ACTION_SEND_BEGIN_MAIN_FRAME); | 488 SchedulerStateMachine::ACTION_SEND_BEGIN_MAIN_FRAME); |
466 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); | 489 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); |
467 EXPECT_TRUE(state.CommitPending()); | 490 EXPECT_TRUE(state.CommitPending()); |
468 | 491 |
469 // Then initiate a draw. | 492 // Then initiate a draw that fails. |
470 state.SetNeedsRedraw(true); | 493 state.SetNeedsRedraw(true); |
471 state.OnBeginImplFrameDeadline(); | 494 state.OnBeginImplFrameDeadline(); |
472 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_ANIMATE); | 495 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_ANIMATE); |
| 496 state.SetDrawResult(DRAW_ABORTED_CHECKERBOARD_ANIMATIONS); |
473 EXPECT_ACTION_UPDATE_STATE( | 497 EXPECT_ACTION_UPDATE_STATE( |
474 SchedulerStateMachine::ACTION_DRAW_AND_SWAP_IF_POSSIBLE); | 498 SchedulerStateMachine::ACTION_DRAW_AND_SWAP_IF_POSSIBLE); |
475 | |
476 // Fail the draw. | |
477 state.DidDrawIfPossibleCompleted(DRAW_ABORTED_CHECKERBOARD_ANIMATIONS); | |
478 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); | 499 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); |
479 EXPECT_TRUE(state.BeginFrameNeeded()); | 500 EXPECT_TRUE(state.BeginFrameNeeded()); |
480 EXPECT_TRUE(state.RedrawPending()); | 501 EXPECT_TRUE(state.RedrawPending()); |
481 // But the commit is ongoing. | |
482 EXPECT_TRUE(state.CommitPending()); | 502 EXPECT_TRUE(state.CommitPending()); |
483 | 503 |
484 // Finish the commit. Note, we should not yet be forcing a draw, but should | 504 // Finish the commit. Note, we should not yet be forcing a draw, but should |
485 // continue the commit as usual. | 505 // continue the commit as usual. |
486 state.NotifyBeginMainFrameStarted(); | 506 state.NotifyBeginMainFrameStarted(); |
487 state.NotifyReadyToCommit(); | 507 state.NotifyReadyToCommit(); |
488 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_COMMIT); | 508 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_COMMIT); |
489 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); | 509 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); |
490 EXPECT_TRUE(state.RedrawPending()); | 510 EXPECT_TRUE(state.RedrawPending()); |
491 | 511 |
(...skipping 11 matching lines...) Expand all Loading... |
503 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); | 523 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); |
504 state.OnBeginImplFrameDeadline(); | 524 state.OnBeginImplFrameDeadline(); |
505 EXPECT_ACTION_UPDATE_STATE( | 525 EXPECT_ACTION_UPDATE_STATE( |
506 SchedulerStateMachine::ACTION_DRAW_AND_SWAP_FORCED); | 526 SchedulerStateMachine::ACTION_DRAW_AND_SWAP_FORCED); |
507 state.DidSwapBuffers(); | 527 state.DidSwapBuffers(); |
508 state.DidSwapBuffersComplete(); | 528 state.DidSwapBuffersComplete(); |
509 } | 529 } |
510 | 530 |
511 TEST(SchedulerStateMachineTest, TestFailedDrawsDoNotRestartForcedDraw) { | 531 TEST(SchedulerStateMachineTest, TestFailedDrawsDoNotRestartForcedDraw) { |
512 SchedulerSettings scheduler_settings; | 532 SchedulerSettings scheduler_settings; |
513 int draw_limit = 1; | 533 int draw_limit = 2; |
514 scheduler_settings.maximum_number_of_failed_draws_before_draw_is_forced = | 534 scheduler_settings.maximum_number_of_failed_draws_before_draw_is_forced = |
515 draw_limit; | 535 draw_limit; |
516 StateMachine state(scheduler_settings); | 536 StateMachine state(scheduler_settings); |
517 SET_UP_STATE(state) | 537 SET_UP_STATE(state) |
518 | 538 |
519 // Start a commit. | 539 // Start a commit. |
520 state.SetNeedsBeginMainFrame(); | 540 state.SetNeedsBeginMainFrame(); |
521 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); | 541 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); |
522 state.OnBeginImplFrame(); | 542 state.OnBeginImplFrame(); |
523 EXPECT_ACTION_UPDATE_STATE( | 543 EXPECT_ACTION_UPDATE_STATE( |
524 SchedulerStateMachine::ACTION_SEND_BEGIN_MAIN_FRAME); | 544 SchedulerStateMachine::ACTION_SEND_BEGIN_MAIN_FRAME); |
525 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); | 545 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); |
526 EXPECT_TRUE(state.CommitPending()); | 546 EXPECT_TRUE(state.CommitPending()); |
527 | 547 |
528 // Then initiate a draw. | 548 // Then initiate a draw. |
529 state.SetNeedsRedraw(true); | 549 state.SetNeedsRedraw(true); |
530 state.OnBeginImplFrameDeadline(); | 550 state.OnBeginImplFrameDeadline(); |
531 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_ANIMATE); | 551 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_ANIMATE); |
532 EXPECT_ACTION_UPDATE_STATE( | 552 EXPECT_ACTION_UPDATE_STATE( |
533 SchedulerStateMachine::ACTION_DRAW_AND_SWAP_IF_POSSIBLE); | 553 SchedulerStateMachine::ACTION_DRAW_AND_SWAP_IF_POSSIBLE); |
534 | 554 |
535 // Fail the draw enough times to force a redraw, | 555 // Fail the draw enough times to force a redraw. |
536 // then once more for good measure. | 556 for (int i = 0; i < draw_limit; ++i) { |
537 for (int i = 0; i < draw_limit + 1; ++i) | 557 state.SetNeedsRedraw(true); |
538 state.DidDrawIfPossibleCompleted(DRAW_ABORTED_CHECKERBOARD_ANIMATIONS); | 558 state.OnBeginImplFrame(); |
539 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); | 559 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_ANIMATE); |
| 560 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); |
| 561 state.OnBeginImplFrameDeadlinePending(); |
| 562 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); |
| 563 state.OnBeginImplFrameDeadline(); |
| 564 state.SetDrawResult(DRAW_ABORTED_CHECKERBOARD_ANIMATIONS); |
| 565 EXPECT_ACTION_UPDATE_STATE( |
| 566 SchedulerStateMachine::ACTION_DRAW_AND_SWAP_IF_POSSIBLE); |
| 567 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); |
| 568 state.OnBeginImplFrameIdle(); |
| 569 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); |
| 570 } |
| 571 |
540 EXPECT_TRUE(state.BeginFrameNeeded()); | 572 EXPECT_TRUE(state.BeginFrameNeeded()); |
541 EXPECT_TRUE(state.RedrawPending()); | 573 EXPECT_TRUE(state.RedrawPending()); |
542 // But the commit is ongoing. | 574 // But the commit is ongoing. |
543 EXPECT_TRUE(state.CommitPending()); | 575 EXPECT_TRUE(state.CommitPending()); |
544 EXPECT_TRUE(state.ForcedRedrawState() == | 576 EXPECT_TRUE(state.ForcedRedrawState() == |
545 SchedulerStateMachine::FORCED_REDRAW_STATE_WAITING_FOR_COMMIT); | 577 SchedulerStateMachine::FORCED_REDRAW_STATE_WAITING_FOR_COMMIT); |
546 | 578 |
547 state.NotifyBeginMainFrameStarted(); | 579 state.NotifyBeginMainFrameStarted(); |
548 state.NotifyReadyToCommit(); | 580 state.NotifyReadyToCommit(); |
549 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_COMMIT); | 581 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_COMMIT); |
550 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); | 582 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); |
551 EXPECT_TRUE(state.RedrawPending()); | 583 EXPECT_TRUE(state.RedrawPending()); |
552 EXPECT_FALSE(state.CommitPending()); | 584 EXPECT_FALSE(state.CommitPending()); |
553 | 585 |
554 // Now force redraw should be in waiting for activation | 586 // Now force redraw should be in waiting for activation |
555 EXPECT_TRUE(state.ForcedRedrawState() == | 587 EXPECT_TRUE(state.ForcedRedrawState() == |
556 SchedulerStateMachine::FORCED_REDRAW_STATE_WAITING_FOR_ACTIVATION); | 588 SchedulerStateMachine::FORCED_REDRAW_STATE_WAITING_FOR_ACTIVATION); |
557 | 589 |
558 // After failing additional draws, we should still be in a forced | 590 // After failing additional draws, we should still be in a forced |
559 // redraw, but not back in WAITING_FOR_COMMIT. | 591 // redraw, but not back in WAITING_FOR_COMMIT. |
560 for (int i = 0; i < draw_limit + 1; ++i) | 592 for (int i = 0; i < draw_limit; ++i) { |
561 state.DidDrawIfPossibleCompleted(DRAW_ABORTED_CHECKERBOARD_ANIMATIONS); | 593 state.SetNeedsRedraw(true); |
| 594 state.OnBeginImplFrame(); |
| 595 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_ANIMATE); |
| 596 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); |
| 597 state.OnBeginImplFrameDeadlinePending(); |
| 598 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); |
| 599 state.OnBeginImplFrameDeadline(); |
| 600 state.SetDrawResult(DRAW_ABORTED_CHECKERBOARD_ANIMATIONS); |
| 601 EXPECT_ACTION_UPDATE_STATE( |
| 602 SchedulerStateMachine::ACTION_DRAW_AND_SWAP_IF_POSSIBLE); |
| 603 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); |
| 604 state.OnBeginImplFrameIdle(); |
| 605 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); |
| 606 } |
562 EXPECT_TRUE(state.RedrawPending()); | 607 EXPECT_TRUE(state.RedrawPending()); |
563 EXPECT_TRUE(state.ForcedRedrawState() == | 608 EXPECT_TRUE(state.ForcedRedrawState() == |
564 SchedulerStateMachine::FORCED_REDRAW_STATE_WAITING_FOR_ACTIVATION); | 609 SchedulerStateMachine::FORCED_REDRAW_STATE_WAITING_FOR_ACTIVATION); |
565 } | 610 } |
566 | 611 |
567 TEST(SchedulerStateMachineTest, TestFailedDrawIsRetriedInNextBeginImplFrame) { | 612 TEST(SchedulerStateMachineTest, TestFailedDrawIsRetriedInNextBeginImplFrame) { |
568 SchedulerSettings default_scheduler_settings; | 613 SchedulerSettings default_scheduler_settings; |
569 StateMachine state(default_scheduler_settings); | 614 StateMachine state(default_scheduler_settings); |
570 SET_UP_STATE(state) | 615 SET_UP_STATE(state) |
571 | 616 |
572 // Start a draw. | 617 // Start a draw. |
573 state.SetNeedsRedraw(true); | 618 state.SetNeedsRedraw(true); |
574 EXPECT_TRUE(state.BeginFrameNeeded()); | 619 EXPECT_TRUE(state.BeginFrameNeeded()); |
575 state.OnBeginImplFrame(); | 620 state.OnBeginImplFrame(); |
576 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_ANIMATE); | 621 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_ANIMATE); |
577 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); | 622 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); |
578 state.OnBeginImplFrameDeadline(); | 623 state.OnBeginImplFrameDeadline(); |
579 EXPECT_TRUE(state.RedrawPending()); | 624 EXPECT_TRUE(state.RedrawPending()); |
| 625 state.SetDrawResult(DRAW_ABORTED_CHECKERBOARD_ANIMATIONS); |
580 EXPECT_ACTION_UPDATE_STATE( | 626 EXPECT_ACTION_UPDATE_STATE( |
581 SchedulerStateMachine::ACTION_DRAW_AND_SWAP_IF_POSSIBLE); | 627 SchedulerStateMachine::ACTION_DRAW_AND_SWAP_IF_POSSIBLE); |
582 | 628 |
583 // Failing the draw for animation checkerboards makes us require a commit. | 629 // Failing the draw for animation checkerboards makes us require a commit. |
584 state.DidDrawIfPossibleCompleted(DRAW_ABORTED_CHECKERBOARD_ANIMATIONS); | |
585 EXPECT_ACTION_UPDATE_STATE( | 630 EXPECT_ACTION_UPDATE_STATE( |
586 SchedulerStateMachine::ACTION_SEND_BEGIN_MAIN_FRAME); | 631 SchedulerStateMachine::ACTION_SEND_BEGIN_MAIN_FRAME); |
587 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); | 632 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); |
588 EXPECT_TRUE(state.RedrawPending()); | 633 EXPECT_TRUE(state.RedrawPending()); |
589 | 634 |
590 // We should not be trying to draw again now, but we have a commit pending. | 635 // We should not be trying to draw again now, but we have a commit pending. |
591 EXPECT_TRUE(state.BeginFrameNeeded()); | 636 EXPECT_TRUE(state.BeginFrameNeeded()); |
592 state.OnBeginImplFrame(); | 637 state.OnBeginImplFrame(); |
593 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_ANIMATE); | 638 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_ANIMATE); |
594 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); | 639 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); |
(...skipping 17 matching lines...) Expand all Loading... |
612 // Draw the first frame. | 657 // Draw the first frame. |
613 EXPECT_TRUE(state.BeginFrameNeeded()); | 658 EXPECT_TRUE(state.BeginFrameNeeded()); |
614 state.OnBeginImplFrame(); | 659 state.OnBeginImplFrame(); |
615 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_ANIMATE); | 660 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_ANIMATE); |
616 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); | 661 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); |
617 | 662 |
618 state.OnBeginImplFrameDeadline(); | 663 state.OnBeginImplFrameDeadline(); |
619 EXPECT_ACTION_UPDATE_STATE( | 664 EXPECT_ACTION_UPDATE_STATE( |
620 SchedulerStateMachine::ACTION_DRAW_AND_SWAP_IF_POSSIBLE); | 665 SchedulerStateMachine::ACTION_DRAW_AND_SWAP_IF_POSSIBLE); |
621 state.DidSwapBuffers(); | 666 state.DidSwapBuffers(); |
622 state.DidDrawIfPossibleCompleted(DRAW_SUCCESS); | |
623 state.DidSwapBuffersComplete(); | 667 state.DidSwapBuffersComplete(); |
624 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); | 668 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); |
625 | 669 |
626 // Before the next BeginImplFrame, set needs redraw again. | 670 // Before the next BeginImplFrame, set needs redraw again. |
627 // This should not redraw until the next BeginImplFrame. | 671 // This should not redraw until the next BeginImplFrame. |
628 state.SetNeedsRedraw(true); | 672 state.SetNeedsRedraw(true); |
629 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); | 673 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); |
630 | 674 |
631 // Move to another frame. This should now draw. | 675 // Move to another frame. This should now draw. |
632 EXPECT_TRUE(state.BeginFrameNeeded()); | 676 EXPECT_TRUE(state.BeginFrameNeeded()); |
633 state.OnBeginImplFrame(); | 677 state.OnBeginImplFrame(); |
634 | 678 |
635 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_ANIMATE); | 679 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_ANIMATE); |
636 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); | 680 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); |
637 | 681 |
638 state.OnBeginImplFrameDeadline(); | 682 state.OnBeginImplFrameDeadline(); |
639 EXPECT_ACTION_UPDATE_STATE( | 683 EXPECT_ACTION_UPDATE_STATE( |
640 SchedulerStateMachine::ACTION_DRAW_AND_SWAP_IF_POSSIBLE); | 684 SchedulerStateMachine::ACTION_DRAW_AND_SWAP_IF_POSSIBLE); |
641 state.DidSwapBuffers(); | 685 state.DidSwapBuffers(); |
642 state.DidDrawIfPossibleCompleted(DRAW_SUCCESS); | |
643 state.DidSwapBuffersComplete(); | 686 state.DidSwapBuffersComplete(); |
644 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); | 687 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); |
645 | 688 |
646 // We just swapped, so we should proactively request another BeginImplFrame. | 689 // We just swapped, so we should proactively request another BeginImplFrame. |
647 EXPECT_TRUE(state.BeginFrameNeeded()); | 690 EXPECT_TRUE(state.BeginFrameNeeded()); |
648 } | 691 } |
649 | 692 |
650 TEST(SchedulerStateMachineTest, TestNextActionDrawsOnBeginImplFrame) { | 693 TEST(SchedulerStateMachineTest, TestNextActionDrawsOnBeginImplFrame) { |
651 SchedulerSettings default_scheduler_settings; | 694 SchedulerSettings default_scheduler_settings; |
652 | 695 |
(...skipping 211 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
864 EXPECT_ACTION_UPDATE_STATE( | 907 EXPECT_ACTION_UPDATE_STATE( |
865 SchedulerStateMachine::ACTION_SEND_BEGIN_MAIN_FRAME); | 908 SchedulerStateMachine::ACTION_SEND_BEGIN_MAIN_FRAME); |
866 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); | 909 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); |
867 | 910 |
868 state.OnBeginImplFrameDeadline(); | 911 state.OnBeginImplFrameDeadline(); |
869 | 912 |
870 EXPECT_TRUE(state.active_tree_needs_first_draw()); | 913 EXPECT_TRUE(state.active_tree_needs_first_draw()); |
871 EXPECT_ACTION_UPDATE_STATE( | 914 EXPECT_ACTION_UPDATE_STATE( |
872 SchedulerStateMachine::ACTION_DRAW_AND_SWAP_IF_POSSIBLE); | 915 SchedulerStateMachine::ACTION_DRAW_AND_SWAP_IF_POSSIBLE); |
873 state.DidSwapBuffers(); | 916 state.DidSwapBuffers(); |
874 state.DidDrawIfPossibleCompleted(DRAW_SUCCESS); | |
875 state.DidSwapBuffersComplete(); | 917 state.DidSwapBuffersComplete(); |
876 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); | 918 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); |
877 } | 919 } |
878 | 920 |
879 TEST(SchedulerStateMachineTest, TestFullCycle) { | 921 TEST(SchedulerStateMachineTest, TestFullCycle) { |
880 SchedulerSettings default_scheduler_settings; | 922 SchedulerSettings default_scheduler_settings; |
881 StateMachine state(default_scheduler_settings); | 923 StateMachine state(default_scheduler_settings); |
882 SET_UP_STATE(state) | 924 SET_UP_STATE(state) |
883 | 925 |
884 // Start clean and set commit. | 926 // Start clean and set commit. |
(...skipping 24 matching lines...) Expand all Loading... |
909 | 951 |
910 // Expect to do nothing until BeginImplFrame deadline | 952 // Expect to do nothing until BeginImplFrame deadline |
911 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); | 953 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); |
912 | 954 |
913 // At BeginImplFrame deadline, draw. | 955 // At BeginImplFrame deadline, draw. |
914 state.OnBeginImplFrameDeadline(); | 956 state.OnBeginImplFrameDeadline(); |
915 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_ANIMATE); | 957 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_ANIMATE); |
916 EXPECT_ACTION_UPDATE_STATE( | 958 EXPECT_ACTION_UPDATE_STATE( |
917 SchedulerStateMachine::ACTION_DRAW_AND_SWAP_IF_POSSIBLE); | 959 SchedulerStateMachine::ACTION_DRAW_AND_SWAP_IF_POSSIBLE); |
918 state.DidSwapBuffers(); | 960 state.DidSwapBuffers(); |
919 state.DidDrawIfPossibleCompleted(DRAW_SUCCESS); | |
920 state.DidSwapBuffersComplete(); | 961 state.DidSwapBuffersComplete(); |
921 | 962 |
922 // Should be synchronized, no draw needed, no action needed. | 963 // Should be synchronized, no draw needed, no action needed. |
923 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); | 964 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); |
924 EXPECT_MAIN_FRAME_STATE(SchedulerStateMachine::BEGIN_MAIN_FRAME_STATE_IDLE); | 965 EXPECT_MAIN_FRAME_STATE(SchedulerStateMachine::BEGIN_MAIN_FRAME_STATE_IDLE); |
925 EXPECT_FALSE(state.needs_redraw()); | 966 EXPECT_FALSE(state.needs_redraw()); |
926 } | 967 } |
927 | 968 |
928 TEST(SchedulerStateMachineTest, CommitWithoutDrawWithPendingTree) { | 969 TEST(SchedulerStateMachineTest, CommitWithoutDrawWithPendingTree) { |
929 SchedulerSettings default_scheduler_settings; | 970 SchedulerSettings default_scheduler_settings; |
(...skipping 118 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1048 // Haven't draw since last commit, do not begin new main frame. | 1089 // Haven't draw since last commit, do not begin new main frame. |
1049 state.OnBeginImplFrame(); | 1090 state.OnBeginImplFrame(); |
1050 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_ANIMATE); | 1091 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_ANIMATE); |
1051 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); | 1092 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); |
1052 | 1093 |
1053 // At BeginImplFrame deadline, draw. This draws unblocks BeginMainFrame. | 1094 // At BeginImplFrame deadline, draw. This draws unblocks BeginMainFrame. |
1054 state.OnBeginImplFrameDeadline(); | 1095 state.OnBeginImplFrameDeadline(); |
1055 EXPECT_ACTION_UPDATE_STATE( | 1096 EXPECT_ACTION_UPDATE_STATE( |
1056 SchedulerStateMachine::ACTION_DRAW_AND_SWAP_IF_POSSIBLE); | 1097 SchedulerStateMachine::ACTION_DRAW_AND_SWAP_IF_POSSIBLE); |
1057 state.DidSwapBuffers(); | 1098 state.DidSwapBuffers(); |
1058 state.DidDrawIfPossibleCompleted(DRAW_SUCCESS); | |
1059 state.DidSwapBuffersComplete(); | 1099 state.DidSwapBuffersComplete(); |
1060 | 1100 |
1061 // Now will be able to start main frame. | 1101 // Now will be able to start main frame. |
1062 EXPECT_MAIN_FRAME_STATE(SchedulerStateMachine::BEGIN_MAIN_FRAME_STATE_IDLE); | 1102 EXPECT_MAIN_FRAME_STATE(SchedulerStateMachine::BEGIN_MAIN_FRAME_STATE_IDLE); |
1063 EXPECT_FALSE(state.needs_redraw()); | 1103 EXPECT_FALSE(state.needs_redraw()); |
1064 EXPECT_ACTION_UPDATE_STATE( | 1104 EXPECT_ACTION_UPDATE_STATE( |
1065 SchedulerStateMachine::ACTION_SEND_BEGIN_MAIN_FRAME); | 1105 SchedulerStateMachine::ACTION_SEND_BEGIN_MAIN_FRAME); |
1066 } | 1106 } |
1067 | 1107 |
1068 TEST(SchedulerStateMachineTest, TestFullCycleWithCommitRequestInbetween) { | 1108 TEST(SchedulerStateMachineTest, TestFullCycleWithCommitRequestInbetween) { |
(...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1100 | 1140 |
1101 // Expect to do nothing until BeginImplFrame deadline. | 1141 // Expect to do nothing until BeginImplFrame deadline. |
1102 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); | 1142 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); |
1103 | 1143 |
1104 // At BeginImplFrame deadline, draw. | 1144 // At BeginImplFrame deadline, draw. |
1105 state.OnBeginImplFrameDeadline(); | 1145 state.OnBeginImplFrameDeadline(); |
1106 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_ANIMATE); | 1146 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_ANIMATE); |
1107 EXPECT_ACTION_UPDATE_STATE( | 1147 EXPECT_ACTION_UPDATE_STATE( |
1108 SchedulerStateMachine::ACTION_DRAW_AND_SWAP_IF_POSSIBLE); | 1148 SchedulerStateMachine::ACTION_DRAW_AND_SWAP_IF_POSSIBLE); |
1109 state.DidSwapBuffers(); | 1149 state.DidSwapBuffers(); |
1110 state.DidDrawIfPossibleCompleted(DRAW_SUCCESS); | |
1111 state.DidSwapBuffersComplete(); | 1150 state.DidSwapBuffersComplete(); |
1112 | 1151 |
1113 // Should be synchronized, no draw needed, no action needed. | 1152 // Should be synchronized, no draw needed, no action needed. |
1114 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); | 1153 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); |
1115 EXPECT_MAIN_FRAME_STATE(SchedulerStateMachine::BEGIN_MAIN_FRAME_STATE_IDLE); | 1154 EXPECT_MAIN_FRAME_STATE(SchedulerStateMachine::BEGIN_MAIN_FRAME_STATE_IDLE); |
1116 EXPECT_FALSE(state.needs_redraw()); | 1155 EXPECT_FALSE(state.needs_redraw()); |
1117 | 1156 |
1118 // Next BeginImplFrame should initiate second commit. | 1157 // Next BeginImplFrame should initiate second commit. |
1119 state.OnBeginImplFrame(); | 1158 state.OnBeginImplFrame(); |
1120 EXPECT_ACTION_UPDATE_STATE( | 1159 EXPECT_ACTION_UPDATE_STATE( |
(...skipping 862 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1983 EXPECT_FALSE(state.ProactiveBeginFrameWanted()); | 2022 EXPECT_FALSE(state.ProactiveBeginFrameWanted()); |
1984 bool commit_has_no_updates = true; | 2023 bool commit_has_no_updates = true; |
1985 state.WillCommit(commit_has_no_updates); | 2024 state.WillCommit(commit_has_no_updates); |
1986 EXPECT_TRUE(state.ProactiveBeginFrameWanted()); | 2025 EXPECT_TRUE(state.ProactiveBeginFrameWanted()); |
1987 state.OnBeginImplFrame(); | 2026 state.OnBeginImplFrame(); |
1988 EXPECT_FALSE(state.ProactiveBeginFrameWanted()); | 2027 EXPECT_FALSE(state.ProactiveBeginFrameWanted()); |
1989 } | 2028 } |
1990 | 2029 |
1991 } // namespace | 2030 } // namespace |
1992 } // namespace cc | 2031 } // namespace cc |
OLD | NEW |