| 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 "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 Loading... |
| 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 Loading... |
| 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 Loading... |
| 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 Loading... |
| 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 Loading... |
| 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 Loading... |
| 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 Loading... |
| 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 Loading... |
| 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 Loading... |
| 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 Loading... |
| 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 Loading... |
| 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 Loading... |
| 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 Loading... |
| 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 Loading... |
| 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 Loading... |
| 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 Loading... |
| 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 Loading... |
| 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 Loading... |
| 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 Loading... |
| 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 |
| OLD | NEW |