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