| 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 180 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 191 | 191 |
| 192 // We're drawing now. | 192 // We're drawing now. |
| 193 EXPECT_ACTION_UPDATE_STATE( | 193 EXPECT_ACTION_UPDATE_STATE( |
| 194 SchedulerStateMachine::ACTION_DRAW_AND_SWAP_IF_POSSIBLE); | 194 SchedulerStateMachine::ACTION_DRAW_AND_SWAP_IF_POSSIBLE); |
| 195 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); | 195 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); |
| 196 | 196 |
| 197 EXPECT_FALSE(state.RedrawPending()); | 197 EXPECT_FALSE(state.RedrawPending()); |
| 198 EXPECT_FALSE(state.CommitPending()); | 198 EXPECT_FALSE(state.CommitPending()); |
| 199 | 199 |
| 200 // Failing the draw makes us require a commit. | 200 // Failing the draw makes us require a commit. |
| 201 state.DidDrawIfPossibleCompleted(false); | 201 state.DidDrawIfPossibleCompleted( |
| 202 DrawSwapReadbackResult::DRAW_ABORTED_CHECKERBOARD_ANIMATIONS); |
| 202 state.OnBeginImplFrame(BeginFrameArgs::CreateForTesting()); | 203 state.OnBeginImplFrame(BeginFrameArgs::CreateForTesting()); |
| 203 EXPECT_ACTION_UPDATE_STATE( | 204 EXPECT_ACTION_UPDATE_STATE( |
| 204 SchedulerStateMachine::ACTION_SEND_BEGIN_MAIN_FRAME); | 205 SchedulerStateMachine::ACTION_SEND_BEGIN_MAIN_FRAME); |
| 205 EXPECT_TRUE(state.RedrawPending()); | 206 EXPECT_TRUE(state.RedrawPending()); |
| 206 EXPECT_TRUE(state.CommitPending()); | 207 EXPECT_TRUE(state.CommitPending()); |
| 207 } | 208 } |
| 208 | 209 |
| 209 TEST(SchedulerStateMachineTest, | 210 TEST(SchedulerStateMachineTest, |
| 210 TestsetNeedsRedrawDuringFailedDrawDoesNotRemoveNeedsRedraw) { | 211 TestsetNeedsRedrawDuringFailedDrawDoesNotRemoveNeedsRedraw) { |
| 211 SchedulerSettings default_scheduler_settings; | 212 SchedulerSettings default_scheduler_settings; |
| (...skipping 16 matching lines...) Expand all Loading... |
| 228 SchedulerStateMachine::ACTION_DRAW_AND_SWAP_IF_POSSIBLE); | 229 SchedulerStateMachine::ACTION_DRAW_AND_SWAP_IF_POSSIBLE); |
| 229 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); | 230 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); |
| 230 EXPECT_FALSE(state.RedrawPending()); | 231 EXPECT_FALSE(state.RedrawPending()); |
| 231 EXPECT_FALSE(state.CommitPending()); | 232 EXPECT_FALSE(state.CommitPending()); |
| 232 | 233 |
| 233 // While still in the same BeginMainFrame callback on the main thread, | 234 // While still in the same BeginMainFrame callback on the main thread, |
| 234 // set needs redraw again. This should not redraw. | 235 // set needs redraw again. This should not redraw. |
| 235 state.SetNeedsRedraw(true); | 236 state.SetNeedsRedraw(true); |
| 236 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); | 237 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); |
| 237 | 238 |
| 238 // Failing the draw makes us require a commit. | 239 // Failing the draw for animation checkerboards makes us require a commit. |
| 239 state.DidDrawIfPossibleCompleted(false); | 240 state.DidDrawIfPossibleCompleted( |
| 241 DrawSwapReadbackResult::DRAW_ABORTED_CHECKERBOARD_ANIMATIONS); |
| 240 state.OnBeginImplFrame(BeginFrameArgs::CreateForTesting()); | 242 state.OnBeginImplFrame(BeginFrameArgs::CreateForTesting()); |
| 241 EXPECT_ACTION_UPDATE_STATE( | 243 EXPECT_ACTION_UPDATE_STATE( |
| 242 SchedulerStateMachine::ACTION_SEND_BEGIN_MAIN_FRAME); | 244 SchedulerStateMachine::ACTION_SEND_BEGIN_MAIN_FRAME); |
| 243 EXPECT_TRUE(state.RedrawPending()); | 245 EXPECT_TRUE(state.RedrawPending()); |
| 244 } | 246 } |
| 245 | 247 |
| 246 void TestFailedDrawsWillEventuallyForceADrawAfterTheNextCommit( | 248 void TestFailedDrawsWillEventuallyForceADrawAfterTheNextCommit( |
| 247 bool deadline_scheduling_enabled) { | 249 bool deadline_scheduling_enabled) { |
| 248 SchedulerSettings scheduler_settings; | 250 SchedulerSettings scheduler_settings; |
| 249 scheduler_settings.maximum_number_of_failed_draws_before_draw_is_forced_ = 1; | 251 scheduler_settings.maximum_number_of_failed_draws_before_draw_is_forced_ = 1; |
| (...skipping 20 matching lines...) Expand all Loading... |
| 270 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); | 272 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); |
| 271 EXPECT_TRUE(state.CommitPending()); | 273 EXPECT_TRUE(state.CommitPending()); |
| 272 | 274 |
| 273 // Then initiate a draw. | 275 // Then initiate a draw. |
| 274 state.SetNeedsRedraw(true); | 276 state.SetNeedsRedraw(true); |
| 275 state.OnBeginImplFrameDeadline(); | 277 state.OnBeginImplFrameDeadline(); |
| 276 EXPECT_ACTION_UPDATE_STATE( | 278 EXPECT_ACTION_UPDATE_STATE( |
| 277 SchedulerStateMachine::ACTION_DRAW_AND_SWAP_IF_POSSIBLE); | 279 SchedulerStateMachine::ACTION_DRAW_AND_SWAP_IF_POSSIBLE); |
| 278 | 280 |
| 279 // Fail the draw. | 281 // Fail the draw. |
| 280 state.DidDrawIfPossibleCompleted(false); | 282 state.DidDrawIfPossibleCompleted( |
| 283 DrawSwapReadbackResult::DRAW_ABORTED_CHECKERBOARD_ANIMATIONS); |
| 281 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); | 284 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); |
| 282 EXPECT_TRUE(state.BeginImplFrameNeeded()); | 285 EXPECT_TRUE(state.BeginImplFrameNeeded()); |
| 283 EXPECT_TRUE(state.RedrawPending()); | 286 EXPECT_TRUE(state.RedrawPending()); |
| 284 // But the commit is ongoing. | 287 // But the commit is ongoing. |
| 285 EXPECT_TRUE(state.CommitPending()); | 288 EXPECT_TRUE(state.CommitPending()); |
| 286 | 289 |
| 287 // Finish the commit. Note, we should not yet be forcing a draw, but should | 290 // Finish the commit. Note, we should not yet be forcing a draw, but should |
| 288 // continue the commit as usual. | 291 // continue the commit as usual. |
| 289 state.FinishCommit(); | 292 state.FinishCommit(); |
| 290 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_COMMIT); | 293 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_COMMIT); |
| (...skipping 18 matching lines...) Expand all Loading... |
| 309 TEST(SchedulerStateMachineTest, | 312 TEST(SchedulerStateMachineTest, |
| 310 TestFailedDrawsWillEventuallyForceADrawAfterTheNextCommit_Deadline) { | 313 TestFailedDrawsWillEventuallyForceADrawAfterTheNextCommit_Deadline) { |
| 311 bool deadline_scheduling_enabled = true; | 314 bool deadline_scheduling_enabled = true; |
| 312 TestFailedDrawsWillEventuallyForceADrawAfterTheNextCommit( | 315 TestFailedDrawsWillEventuallyForceADrawAfterTheNextCommit( |
| 313 deadline_scheduling_enabled); | 316 deadline_scheduling_enabled); |
| 314 } | 317 } |
| 315 | 318 |
| 316 void TestFailedDrawsDoNotRestartForcedDraw( | 319 void TestFailedDrawsDoNotRestartForcedDraw( |
| 317 bool deadline_scheduling_enabled) { | 320 bool deadline_scheduling_enabled) { |
| 318 SchedulerSettings scheduler_settings; | 321 SchedulerSettings scheduler_settings; |
| 319 int drawLimit = 1; | 322 int draw_limit = 1; |
| 320 scheduler_settings.maximum_number_of_failed_draws_before_draw_is_forced_ = | 323 scheduler_settings.maximum_number_of_failed_draws_before_draw_is_forced_ = |
| 321 drawLimit; | 324 draw_limit; |
| 322 scheduler_settings.deadline_scheduling_enabled = deadline_scheduling_enabled; | 325 scheduler_settings.deadline_scheduling_enabled = deadline_scheduling_enabled; |
| 323 scheduler_settings.impl_side_painting = true; | 326 scheduler_settings.impl_side_painting = true; |
| 324 StateMachine state(scheduler_settings); | 327 StateMachine state(scheduler_settings); |
| 325 state.SetCanStart(); | 328 state.SetCanStart(); |
| 326 state.UpdateState(state.NextAction()); | 329 state.UpdateState(state.NextAction()); |
| 327 state.CreateAndInitializeOutputSurfaceWithActivatedCommit(); | 330 state.CreateAndInitializeOutputSurfaceWithActivatedCommit(); |
| 328 state.SetVisible(true); | 331 state.SetVisible(true); |
| 329 state.SetCanDraw(true); | 332 state.SetCanDraw(true); |
| 330 | 333 |
| 331 // Start a commit. | 334 // Start a commit. |
| (...skipping 12 matching lines...) Expand all Loading... |
| 344 EXPECT_TRUE(state.CommitPending()); | 347 EXPECT_TRUE(state.CommitPending()); |
| 345 | 348 |
| 346 // Then initiate a draw. | 349 // Then initiate a draw. |
| 347 state.SetNeedsRedraw(true); | 350 state.SetNeedsRedraw(true); |
| 348 state.OnBeginImplFrameDeadline(); | 351 state.OnBeginImplFrameDeadline(); |
| 349 EXPECT_ACTION_UPDATE_STATE( | 352 EXPECT_ACTION_UPDATE_STATE( |
| 350 SchedulerStateMachine::ACTION_DRAW_AND_SWAP_IF_POSSIBLE); | 353 SchedulerStateMachine::ACTION_DRAW_AND_SWAP_IF_POSSIBLE); |
| 351 | 354 |
| 352 // Fail the draw enough times to force a redraw, | 355 // Fail the draw enough times to force a redraw, |
| 353 // then once more for good measure. | 356 // then once more for good measure. |
| 354 for (int i = 0; i < drawLimit; ++i) | 357 for (int i = 0; i < draw_limit + 1; ++i) { |
| 355 state.DidDrawIfPossibleCompleted(false); | 358 state.DidDrawIfPossibleCompleted( |
| 356 state.DidDrawIfPossibleCompleted(false); | 359 DrawSwapReadbackResult::DRAW_ABORTED_CHECKERBOARD_ANIMATIONS); |
| 360 } |
| 357 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); | 361 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); |
| 358 EXPECT_TRUE(state.BeginImplFrameNeeded()); | 362 EXPECT_TRUE(state.BeginImplFrameNeeded()); |
| 359 EXPECT_TRUE(state.RedrawPending()); | 363 EXPECT_TRUE(state.RedrawPending()); |
| 360 // But the commit is ongoing. | 364 // But the commit is ongoing. |
| 361 EXPECT_TRUE(state.CommitPending()); | 365 EXPECT_TRUE(state.CommitPending()); |
| 362 EXPECT_TRUE(state.ForcedRedrawState() == | 366 EXPECT_TRUE(state.ForcedRedrawState() == |
| 363 SchedulerStateMachine::FORCED_REDRAW_STATE_WAITING_FOR_COMMIT); | 367 SchedulerStateMachine::FORCED_REDRAW_STATE_WAITING_FOR_COMMIT); |
| 364 | 368 |
| 365 state.FinishCommit(); | 369 state.FinishCommit(); |
| 366 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_COMMIT); | 370 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_COMMIT); |
| 367 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); | 371 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); |
| 368 EXPECT_TRUE(state.RedrawPending()); | 372 EXPECT_TRUE(state.RedrawPending()); |
| 369 EXPECT_FALSE(state.CommitPending()); | 373 EXPECT_FALSE(state.CommitPending()); |
| 370 | 374 |
| 371 // Now force redraw should be in waiting for activation | 375 // Now force redraw should be in waiting for activation |
| 372 EXPECT_TRUE(state.ForcedRedrawState() == | 376 EXPECT_TRUE(state.ForcedRedrawState() == |
| 373 SchedulerStateMachine::FORCED_REDRAW_STATE_WAITING_FOR_ACTIVATION); | 377 SchedulerStateMachine::FORCED_REDRAW_STATE_WAITING_FOR_ACTIVATION); |
| 374 | 378 |
| 375 // After failing additional draws, we should still be in a forced | 379 // After failing additional draws, we should still be in a forced |
| 376 // redraw, but not back in WAITING_FOR_COMMIT. | 380 // redraw, but not back in WAITING_FOR_COMMIT. |
| 377 for (int i = 0; i < drawLimit; ++i) | 381 for (int i = 0; i < draw_limit + 1; ++i) { |
| 378 state.DidDrawIfPossibleCompleted(false); | 382 state.DidDrawIfPossibleCompleted( |
| 379 state.DidDrawIfPossibleCompleted(false); | 383 DrawSwapReadbackResult::DRAW_ABORTED_CHECKERBOARD_ANIMATIONS); |
| 384 } |
| 380 EXPECT_TRUE(state.RedrawPending()); | 385 EXPECT_TRUE(state.RedrawPending()); |
| 381 EXPECT_TRUE(state.ForcedRedrawState() == | 386 EXPECT_TRUE(state.ForcedRedrawState() == |
| 382 SchedulerStateMachine::FORCED_REDRAW_STATE_WAITING_FOR_ACTIVATION); | 387 SchedulerStateMachine::FORCED_REDRAW_STATE_WAITING_FOR_ACTIVATION); |
| 383 } | 388 } |
| 384 | 389 |
| 385 TEST(SchedulerStateMachineTest, | 390 TEST(SchedulerStateMachineTest, |
| 386 TestFailedDrawsDoNotRestartForcedDraw) { | 391 TestFailedDrawsDoNotRestartForcedDraw) { |
| 387 bool deadline_scheduling_enabled = false; | 392 bool deadline_scheduling_enabled = false; |
| 388 TestFailedDrawsDoNotRestartForcedDraw( | 393 TestFailedDrawsDoNotRestartForcedDraw( |
| 389 deadline_scheduling_enabled); | 394 deadline_scheduling_enabled); |
| (...skipping 18 matching lines...) Expand all Loading... |
| 408 // Start a draw. | 413 // Start a draw. |
| 409 state.SetNeedsRedraw(true); | 414 state.SetNeedsRedraw(true); |
| 410 EXPECT_TRUE(state.BeginImplFrameNeeded()); | 415 EXPECT_TRUE(state.BeginImplFrameNeeded()); |
| 411 state.OnBeginImplFrame(BeginFrameArgs::CreateForTesting()); | 416 state.OnBeginImplFrame(BeginFrameArgs::CreateForTesting()); |
| 412 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); | 417 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); |
| 413 state.OnBeginImplFrameDeadline(); | 418 state.OnBeginImplFrameDeadline(); |
| 414 EXPECT_TRUE(state.RedrawPending()); | 419 EXPECT_TRUE(state.RedrawPending()); |
| 415 EXPECT_ACTION_UPDATE_STATE( | 420 EXPECT_ACTION_UPDATE_STATE( |
| 416 SchedulerStateMachine::ACTION_DRAW_AND_SWAP_IF_POSSIBLE); | 421 SchedulerStateMachine::ACTION_DRAW_AND_SWAP_IF_POSSIBLE); |
| 417 | 422 |
| 418 // Fail the draw | 423 // Failing the draw for animation checkerboards makes us require a commit. |
| 419 state.DidDrawIfPossibleCompleted(false); | 424 state.DidDrawIfPossibleCompleted( |
| 425 DrawSwapReadbackResult::DRAW_ABORTED_CHECKERBOARD_ANIMATIONS); |
| 420 EXPECT_ACTION_UPDATE_STATE( | 426 EXPECT_ACTION_UPDATE_STATE( |
| 421 SchedulerStateMachine::ACTION_SEND_BEGIN_MAIN_FRAME); | 427 SchedulerStateMachine::ACTION_SEND_BEGIN_MAIN_FRAME); |
| 422 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); | 428 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); |
| 423 EXPECT_TRUE(state.RedrawPending()); | 429 EXPECT_TRUE(state.RedrawPending()); |
| 424 | 430 |
| 425 // We should not be trying to draw again now, but we have a commit pending. | 431 // We should not be trying to draw again now, but we have a commit pending. |
| 426 EXPECT_TRUE(state.BeginImplFrameNeeded()); | 432 EXPECT_TRUE(state.BeginImplFrameNeeded()); |
| 427 state.OnBeginImplFrame(BeginFrameArgs::CreateForTesting()); | 433 state.OnBeginImplFrame(BeginFrameArgs::CreateForTesting()); |
| 428 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); | 434 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); |
| 429 | 435 |
| (...skipping 16 matching lines...) Expand all Loading... |
| 446 state.SetNeedsRedraw(true); | 452 state.SetNeedsRedraw(true); |
| 447 | 453 |
| 448 // Draw the first frame. | 454 // Draw the first frame. |
| 449 EXPECT_TRUE(state.BeginImplFrameNeeded()); | 455 EXPECT_TRUE(state.BeginImplFrameNeeded()); |
| 450 state.OnBeginImplFrame(BeginFrameArgs::CreateForTesting()); | 456 state.OnBeginImplFrame(BeginFrameArgs::CreateForTesting()); |
| 451 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); | 457 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); |
| 452 | 458 |
| 453 state.OnBeginImplFrameDeadline(); | 459 state.OnBeginImplFrameDeadline(); |
| 454 EXPECT_ACTION_UPDATE_STATE( | 460 EXPECT_ACTION_UPDATE_STATE( |
| 455 SchedulerStateMachine::ACTION_DRAW_AND_SWAP_IF_POSSIBLE); | 461 SchedulerStateMachine::ACTION_DRAW_AND_SWAP_IF_POSSIBLE); |
| 456 state.DidDrawIfPossibleCompleted(true); | 462 state.DidDrawIfPossibleCompleted(DrawSwapReadbackResult::DRAW_SUCCESS); |
| 457 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); | 463 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); |
| 458 | 464 |
| 459 // Before the next BeginImplFrame, set needs redraw again. | 465 // Before the next BeginImplFrame, set needs redraw again. |
| 460 // This should not redraw until the next BeginImplFrame. | 466 // This should not redraw until the next BeginImplFrame. |
| 461 state.SetNeedsRedraw(true); | 467 state.SetNeedsRedraw(true); |
| 462 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); | 468 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); |
| 463 | 469 |
| 464 // Move to another frame. This should now draw. | 470 // Move to another frame. This should now draw. |
| 465 EXPECT_TRUE(state.BeginImplFrameNeeded()); | 471 EXPECT_TRUE(state.BeginImplFrameNeeded()); |
| 466 state.OnBeginImplFrame(BeginFrameArgs::CreateForTesting()); | 472 state.OnBeginImplFrame(BeginFrameArgs::CreateForTesting()); |
| 467 | 473 |
| 468 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); | 474 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); |
| 469 | 475 |
| 470 state.OnBeginImplFrameDeadline(); | 476 state.OnBeginImplFrameDeadline(); |
| 471 EXPECT_ACTION_UPDATE_STATE( | 477 EXPECT_ACTION_UPDATE_STATE( |
| 472 SchedulerStateMachine::ACTION_DRAW_AND_SWAP_IF_POSSIBLE); | 478 SchedulerStateMachine::ACTION_DRAW_AND_SWAP_IF_POSSIBLE); |
| 473 state.DidDrawIfPossibleCompleted(true); | 479 state.DidDrawIfPossibleCompleted(DrawSwapReadbackResult::DRAW_SUCCESS); |
| 474 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); | 480 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); |
| 475 | 481 |
| 476 // We just swapped, so we should proactively request another BeginImplFrame. | 482 // We just swapped, so we should proactively request another BeginImplFrame. |
| 477 EXPECT_TRUE(state.BeginImplFrameNeeded()); | 483 EXPECT_TRUE(state.BeginImplFrameNeeded()); |
| 478 } | 484 } |
| 479 | 485 |
| 480 TEST(SchedulerStateMachineTest, TestNextActionDrawsOnBeginImplFrame) { | 486 TEST(SchedulerStateMachineTest, TestNextActionDrawsOnBeginImplFrame) { |
| 481 SchedulerSettings default_scheduler_settings; | 487 SchedulerSettings default_scheduler_settings; |
| 482 | 488 |
| 483 // When not in BeginImplFrame deadline, or in BeginImplFrame deadline | 489 // When not in BeginImplFrame deadline, or in BeginImplFrame deadline |
| (...skipping 224 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 708 EXPECT_EQ(SchedulerStateMachine::ACTION_COMMIT, state.NextAction()); | 714 EXPECT_EQ(SchedulerStateMachine::ACTION_COMMIT, state.NextAction()); |
| 709 | 715 |
| 710 // Commit and make sure we draw on next BeginImplFrame | 716 // Commit and make sure we draw on next BeginImplFrame |
| 711 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_COMMIT); | 717 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_COMMIT); |
| 712 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); | 718 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); |
| 713 state.OnBeginImplFrameDeadline(); | 719 state.OnBeginImplFrameDeadline(); |
| 714 EXPECT_EQ(SchedulerStateMachine::COMMIT_STATE_WAITING_FOR_FIRST_DRAW, | 720 EXPECT_EQ(SchedulerStateMachine::COMMIT_STATE_WAITING_FOR_FIRST_DRAW, |
| 715 state.CommitState()); | 721 state.CommitState()); |
| 716 EXPECT_ACTION_UPDATE_STATE( | 722 EXPECT_ACTION_UPDATE_STATE( |
| 717 SchedulerStateMachine::ACTION_DRAW_AND_SWAP_IF_POSSIBLE); | 723 SchedulerStateMachine::ACTION_DRAW_AND_SWAP_IF_POSSIBLE); |
| 718 state.DidDrawIfPossibleCompleted(true); | 724 state.DidDrawIfPossibleCompleted(DrawSwapReadbackResult::DRAW_SUCCESS); |
| 719 | 725 |
| 720 // Verify that another commit will start immediately after draw. | 726 // Verify that another commit will start immediately after draw. |
| 721 EXPECT_ACTION_UPDATE_STATE( | 727 EXPECT_ACTION_UPDATE_STATE( |
| 722 SchedulerStateMachine::ACTION_SEND_BEGIN_MAIN_FRAME); | 728 SchedulerStateMachine::ACTION_SEND_BEGIN_MAIN_FRAME); |
| 723 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); | 729 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); |
| 724 } | 730 } |
| 725 | 731 |
| 726 TEST(SchedulerStateMachineTest, TestFullCycle) { | 732 TEST(SchedulerStateMachineTest, TestFullCycle) { |
| 727 SchedulerSettings default_scheduler_settings; | 733 SchedulerSettings default_scheduler_settings; |
| 728 StateMachine state(default_scheduler_settings); | 734 StateMachine state(default_scheduler_settings); |
| (...skipping 26 matching lines...) Expand all Loading... |
| 755 state.CommitState()); | 761 state.CommitState()); |
| 756 EXPECT_TRUE(state.needs_redraw()); | 762 EXPECT_TRUE(state.needs_redraw()); |
| 757 | 763 |
| 758 // Expect to do nothing until BeginImplFrame deadline | 764 // Expect to do nothing until BeginImplFrame deadline |
| 759 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); | 765 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); |
| 760 | 766 |
| 761 // At BeginImplFrame deadline, draw. | 767 // At BeginImplFrame deadline, draw. |
| 762 state.OnBeginImplFrameDeadline(); | 768 state.OnBeginImplFrameDeadline(); |
| 763 EXPECT_ACTION_UPDATE_STATE( | 769 EXPECT_ACTION_UPDATE_STATE( |
| 764 SchedulerStateMachine::ACTION_DRAW_AND_SWAP_IF_POSSIBLE); | 770 SchedulerStateMachine::ACTION_DRAW_AND_SWAP_IF_POSSIBLE); |
| 765 state.DidDrawIfPossibleCompleted(true); | 771 state.DidDrawIfPossibleCompleted(DrawSwapReadbackResult::DRAW_SUCCESS); |
| 766 | 772 |
| 767 // Should be synchronized, no draw needed, no action needed. | 773 // Should be synchronized, no draw needed, no action needed. |
| 768 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); | 774 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); |
| 769 EXPECT_EQ(SchedulerStateMachine::COMMIT_STATE_IDLE, state.CommitState()); | 775 EXPECT_EQ(SchedulerStateMachine::COMMIT_STATE_IDLE, state.CommitState()); |
| 770 EXPECT_FALSE(state.needs_redraw()); | 776 EXPECT_FALSE(state.needs_redraw()); |
| 771 } | 777 } |
| 772 | 778 |
| 773 TEST(SchedulerStateMachineTest, TestFullCycleWithCommitRequestInbetween) { | 779 TEST(SchedulerStateMachineTest, TestFullCycleWithCommitRequestInbetween) { |
| 774 SchedulerSettings default_scheduler_settings; | 780 SchedulerSettings default_scheduler_settings; |
| 775 StateMachine state(default_scheduler_settings); | 781 StateMachine state(default_scheduler_settings); |
| (...skipping 30 matching lines...) Expand all Loading... |
| 806 state.CommitState()); | 812 state.CommitState()); |
| 807 EXPECT_TRUE(state.needs_redraw()); | 813 EXPECT_TRUE(state.needs_redraw()); |
| 808 | 814 |
| 809 // Expect to do nothing until BeginImplFrame deadline. | 815 // Expect to do nothing until BeginImplFrame deadline. |
| 810 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); | 816 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); |
| 811 | 817 |
| 812 // At BeginImplFrame deadline, draw. | 818 // At BeginImplFrame deadline, draw. |
| 813 state.OnBeginImplFrameDeadline(); | 819 state.OnBeginImplFrameDeadline(); |
| 814 EXPECT_ACTION_UPDATE_STATE( | 820 EXPECT_ACTION_UPDATE_STATE( |
| 815 SchedulerStateMachine::ACTION_DRAW_AND_SWAP_IF_POSSIBLE); | 821 SchedulerStateMachine::ACTION_DRAW_AND_SWAP_IF_POSSIBLE); |
| 816 state.DidDrawIfPossibleCompleted(true); | 822 state.DidDrawIfPossibleCompleted(DrawSwapReadbackResult::DRAW_SUCCESS); |
| 817 | 823 |
| 818 // Should be synchronized, no draw needed, no action needed. | 824 // Should be synchronized, no draw needed, no action needed. |
| 819 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); | 825 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); |
| 820 EXPECT_EQ(SchedulerStateMachine::COMMIT_STATE_IDLE, state.CommitState()); | 826 EXPECT_EQ(SchedulerStateMachine::COMMIT_STATE_IDLE, state.CommitState()); |
| 821 EXPECT_FALSE(state.needs_redraw()); | 827 EXPECT_FALSE(state.needs_redraw()); |
| 822 | 828 |
| 823 // Next BeginImplFrame should initiate second commit. | 829 // Next BeginImplFrame should initiate second commit. |
| 824 state.OnBeginImplFrame(BeginFrameArgs::CreateForTesting()); | 830 state.OnBeginImplFrame(BeginFrameArgs::CreateForTesting()); |
| 825 EXPECT_ACTION_UPDATE_STATE( | 831 EXPECT_ACTION_UPDATE_STATE( |
| 826 SchedulerStateMachine::ACTION_SEND_BEGIN_MAIN_FRAME); | 832 SchedulerStateMachine::ACTION_SEND_BEGIN_MAIN_FRAME); |
| (...skipping 615 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1442 state.FinishCommit(); | 1448 state.FinishCommit(); |
| 1443 | 1449 |
| 1444 EXPECT_EQ(SchedulerStateMachine::COMMIT_STATE_READY_TO_COMMIT, | 1450 EXPECT_EQ(SchedulerStateMachine::COMMIT_STATE_READY_TO_COMMIT, |
| 1445 state.CommitState()); | 1451 state.CommitState()); |
| 1446 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_COMMIT); | 1452 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_COMMIT); |
| 1447 | 1453 |
| 1448 EXPECT_EQ(SchedulerStateMachine::COMMIT_STATE_WAITING_FOR_FIRST_DRAW, | 1454 EXPECT_EQ(SchedulerStateMachine::COMMIT_STATE_WAITING_FOR_FIRST_DRAW, |
| 1449 state.CommitState()); | 1455 state.CommitState()); |
| 1450 | 1456 |
| 1451 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_DRAW_AND_READBACK); | 1457 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_DRAW_AND_READBACK); |
| 1452 state.DidDrawIfPossibleCompleted(true); | 1458 state.DidDrawIfPossibleCompleted(DrawSwapReadbackResult::DRAW_SUCCESS); |
| 1453 | 1459 |
| 1454 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); | 1460 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); |
| 1455 | 1461 |
| 1456 // Should be waiting for the normal BeginMainFrame. | 1462 // Should be waiting for the normal BeginMainFrame. |
| 1457 EXPECT_EQ(SchedulerStateMachine::COMMIT_STATE_FRAME_IN_PROGRESS, | 1463 EXPECT_EQ(SchedulerStateMachine::COMMIT_STATE_FRAME_IN_PROGRESS, |
| 1458 state.CommitState()); | 1464 state.CommitState()); |
| 1459 } | 1465 } |
| 1460 | 1466 |
| 1461 void TestImmediateFinishCommitDuringCommit(bool deadline_scheduling_enabled) { | 1467 void TestImmediateFinishCommitDuringCommit(bool deadline_scheduling_enabled) { |
| 1462 SchedulerSettings scheduler_settings; | 1468 SchedulerSettings scheduler_settings; |
| (...skipping 22 matching lines...) Expand all Loading... |
| 1485 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); | 1491 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); |
| 1486 state.FinishCommit(); | 1492 state.FinishCommit(); |
| 1487 EXPECT_EQ(SchedulerStateMachine::COMMIT_STATE_READY_TO_COMMIT, | 1493 EXPECT_EQ(SchedulerStateMachine::COMMIT_STATE_READY_TO_COMMIT, |
| 1488 state.CommitState()); | 1494 state.CommitState()); |
| 1489 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_COMMIT); | 1495 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_COMMIT); |
| 1490 | 1496 |
| 1491 EXPECT_EQ(SchedulerStateMachine::COMMIT_STATE_WAITING_FOR_FIRST_DRAW, | 1497 EXPECT_EQ(SchedulerStateMachine::COMMIT_STATE_WAITING_FOR_FIRST_DRAW, |
| 1492 state.CommitState()); | 1498 state.CommitState()); |
| 1493 | 1499 |
| 1494 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_DRAW_AND_READBACK); | 1500 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_DRAW_AND_READBACK); |
| 1495 state.DidDrawIfPossibleCompleted(true); | 1501 state.DidDrawIfPossibleCompleted(DrawSwapReadbackResult::DRAW_SUCCESS); |
| 1496 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); | 1502 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); |
| 1497 | 1503 |
| 1498 // Should be waiting for the normal BeginMainFrame. | 1504 // Should be waiting for the normal BeginMainFrame. |
| 1499 EXPECT_EQ(SchedulerStateMachine::COMMIT_STATE_FRAME_IN_PROGRESS, | 1505 EXPECT_EQ(SchedulerStateMachine::COMMIT_STATE_FRAME_IN_PROGRESS, |
| 1500 state.CommitState()) | 1506 state.CommitState()) |
| 1501 << *state.AsValue(); | 1507 << *state.AsValue(); |
| 1502 } | 1508 } |
| 1503 | 1509 |
| 1504 TEST(SchedulerStateMachineTest, TestImmediateFinishCommitDuringCommit) { | 1510 TEST(SchedulerStateMachineTest, TestImmediateFinishCommitDuringCommit) { |
| 1505 bool deadline_scheduling_enabled = false; | 1511 bool deadline_scheduling_enabled = false; |
| (...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1539 state.FinishCommit(); | 1545 state.FinishCommit(); |
| 1540 | 1546 |
| 1541 EXPECT_EQ(SchedulerStateMachine::COMMIT_STATE_READY_TO_COMMIT, | 1547 EXPECT_EQ(SchedulerStateMachine::COMMIT_STATE_READY_TO_COMMIT, |
| 1542 state.CommitState()); | 1548 state.CommitState()); |
| 1543 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_COMMIT); | 1549 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_COMMIT); |
| 1544 | 1550 |
| 1545 EXPECT_EQ(SchedulerStateMachine::COMMIT_STATE_WAITING_FOR_FIRST_DRAW, | 1551 EXPECT_EQ(SchedulerStateMachine::COMMIT_STATE_WAITING_FOR_FIRST_DRAW, |
| 1546 state.CommitState()); | 1552 state.CommitState()); |
| 1547 | 1553 |
| 1548 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_DRAW_AND_READBACK); | 1554 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_DRAW_AND_READBACK); |
| 1549 state.DidDrawIfPossibleCompleted(true); | 1555 state.DidDrawIfPossibleCompleted(DrawSwapReadbackResult::DRAW_SUCCESS); |
| 1550 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); | 1556 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); |
| 1551 | 1557 |
| 1552 // Should be waiting for BeginMainFrame. | 1558 // Should be waiting for BeginMainFrame. |
| 1553 EXPECT_EQ(SchedulerStateMachine::COMMIT_STATE_FRAME_IN_PROGRESS, | 1559 EXPECT_EQ(SchedulerStateMachine::COMMIT_STATE_FRAME_IN_PROGRESS, |
| 1554 state.CommitState()) | 1560 state.CommitState()) |
| 1555 << *state.AsValue(); | 1561 << *state.AsValue(); |
| 1556 | 1562 |
| 1557 // Become invisible and abort BeginMainFrame. | 1563 // Become invisible and abort BeginMainFrame. |
| 1558 state.SetVisible(false); | 1564 state.SetVisible(false); |
| 1559 state.BeginMainFrameAborted(false); | 1565 state.BeginMainFrameAborted(false); |
| (...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1595 state.FinishCommit(); | 1601 state.FinishCommit(); |
| 1596 | 1602 |
| 1597 EXPECT_EQ(SchedulerStateMachine::COMMIT_STATE_READY_TO_COMMIT, | 1603 EXPECT_EQ(SchedulerStateMachine::COMMIT_STATE_READY_TO_COMMIT, |
| 1598 state.CommitState()); | 1604 state.CommitState()); |
| 1599 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_COMMIT); | 1605 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_COMMIT); |
| 1600 | 1606 |
| 1601 EXPECT_EQ(SchedulerStateMachine::COMMIT_STATE_WAITING_FOR_FIRST_DRAW, | 1607 EXPECT_EQ(SchedulerStateMachine::COMMIT_STATE_WAITING_FOR_FIRST_DRAW, |
| 1602 state.CommitState()); | 1608 state.CommitState()); |
| 1603 | 1609 |
| 1604 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_DRAW_AND_READBACK); | 1610 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_DRAW_AND_READBACK); |
| 1605 state.DidDrawIfPossibleCompleted(true); | 1611 state.DidDrawIfPossibleCompleted(DrawSwapReadbackResult::DRAW_SUCCESS); |
| 1606 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); | 1612 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); |
| 1607 } | 1613 } |
| 1608 | 1614 |
| 1609 TEST(SchedulerStateMachineTest, ReportIfNotDrawing) { | 1615 TEST(SchedulerStateMachineTest, ReportIfNotDrawing) { |
| 1610 SchedulerSettings default_scheduler_settings; | 1616 SchedulerSettings default_scheduler_settings; |
| 1611 StateMachine state(default_scheduler_settings); | 1617 StateMachine state(default_scheduler_settings); |
| 1612 state.SetCanStart(); | 1618 state.SetCanStart(); |
| 1613 state.UpdateState(state.NextAction()); | 1619 state.UpdateState(state.NextAction()); |
| 1614 state.CreateAndInitializeOutputSurfaceWithActivatedCommit(); | 1620 state.CreateAndInitializeOutputSurfaceWithActivatedCommit(); |
| 1615 | 1621 |
| (...skipping 140 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1756 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); | 1762 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); |
| 1757 | 1763 |
| 1758 // The deadline is not triggered early until we enter prefer smoothness mode. | 1764 // The deadline is not triggered early until we enter prefer smoothness mode. |
| 1759 EXPECT_FALSE(state.ShouldTriggerBeginImplFrameDeadlineEarly()); | 1765 EXPECT_FALSE(state.ShouldTriggerBeginImplFrameDeadlineEarly()); |
| 1760 state.SetSmoothnessTakesPriority(true); | 1766 state.SetSmoothnessTakesPriority(true); |
| 1761 EXPECT_TRUE(state.ShouldTriggerBeginImplFrameDeadlineEarly()); | 1767 EXPECT_TRUE(state.ShouldTriggerBeginImplFrameDeadlineEarly()); |
| 1762 } | 1768 } |
| 1763 | 1769 |
| 1764 } // namespace | 1770 } // namespace |
| 1765 } // namespace cc | 1771 } // namespace cc |
| OLD | NEW |