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 219 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
230 // commit in that order. | 230 // commit in that order. |
231 state.NotifyReadyToActivate(); | 231 state.NotifyReadyToActivate(); |
232 EXPECT_ACTION_UPDATE_STATE( | 232 EXPECT_ACTION_UPDATE_STATE( |
233 SchedulerStateMachine::ACTION_ACTIVATE_PENDING_TREE); | 233 SchedulerStateMachine::ACTION_ACTIVATE_PENDING_TREE); |
234 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); | 234 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); |
235 EXPECT_EQ(state.CommitState(), | 235 EXPECT_EQ(state.CommitState(), |
236 SchedulerStateMachine::COMMIT_STATE_WAITING_FOR_FIRST_DRAW); | 236 SchedulerStateMachine::COMMIT_STATE_WAITING_FOR_FIRST_DRAW); |
237 | 237 |
238 EXPECT_TRUE(state.ShouldTriggerBeginImplFrameDeadlineEarly()); | 238 EXPECT_TRUE(state.ShouldTriggerBeginImplFrameDeadlineEarly()); |
239 state.OnBeginImplFrameDeadline(); | 239 state.OnBeginImplFrameDeadline(); |
| 240 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_ANIMATE); |
240 EXPECT_ACTION_UPDATE_STATE( | 241 EXPECT_ACTION_UPDATE_STATE( |
241 SchedulerStateMachine::ACTION_DRAW_AND_SWAP_IF_POSSIBLE); | 242 SchedulerStateMachine::ACTION_DRAW_AND_SWAP_IF_POSSIBLE); |
242 EXPECT_EQ(state.CommitState(), SchedulerStateMachine::COMMIT_STATE_IDLE); | 243 EXPECT_EQ(state.CommitState(), SchedulerStateMachine::COMMIT_STATE_IDLE); |
243 EXPECT_ACTION_UPDATE_STATE( | 244 EXPECT_ACTION_UPDATE_STATE( |
244 SchedulerStateMachine::ACTION_SEND_BEGIN_MAIN_FRAME); | 245 SchedulerStateMachine::ACTION_SEND_BEGIN_MAIN_FRAME); |
245 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); | 246 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); |
246 EXPECT_EQ(state.CommitState(), | 247 EXPECT_EQ(state.CommitState(), |
247 SchedulerStateMachine::COMMIT_STATE_BEGIN_MAIN_FRAME_SENT); | 248 SchedulerStateMachine::COMMIT_STATE_BEGIN_MAIN_FRAME_SENT); |
248 | 249 |
249 state.NotifyBeginMainFrameStarted(); | 250 state.NotifyBeginMainFrameStarted(); |
(...skipping 51 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
301 | 302 |
302 // Verify NotifyReadyToActivate unblocks activation, draw, and | 303 // Verify NotifyReadyToActivate unblocks activation, draw, and |
303 // commit in that order. | 304 // commit in that order. |
304 state.NotifyReadyToActivate(); | 305 state.NotifyReadyToActivate(); |
305 EXPECT_ACTION_UPDATE_STATE( | 306 EXPECT_ACTION_UPDATE_STATE( |
306 SchedulerStateMachine::ACTION_ACTIVATE_PENDING_TREE); | 307 SchedulerStateMachine::ACTION_ACTIVATE_PENDING_TREE); |
307 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); | 308 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); |
308 | 309 |
309 EXPECT_TRUE(state.ShouldTriggerBeginImplFrameDeadlineEarly()); | 310 EXPECT_TRUE(state.ShouldTriggerBeginImplFrameDeadlineEarly()); |
310 state.OnBeginImplFrameDeadline(); | 311 state.OnBeginImplFrameDeadline(); |
| 312 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_ANIMATE); |
311 EXPECT_ACTION_UPDATE_STATE( | 313 EXPECT_ACTION_UPDATE_STATE( |
312 SchedulerStateMachine::ACTION_DRAW_AND_SWAP_IF_POSSIBLE); | 314 SchedulerStateMachine::ACTION_DRAW_AND_SWAP_IF_POSSIBLE); |
313 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_COMMIT); | 315 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_COMMIT); |
314 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); | 316 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); |
315 EXPECT_EQ(state.CommitState(), SchedulerStateMachine::COMMIT_STATE_IDLE); | 317 EXPECT_EQ(state.CommitState(), SchedulerStateMachine::COMMIT_STATE_IDLE); |
316 } | 318 } |
317 | 319 |
318 TEST(SchedulerStateMachineTest, | 320 TEST(SchedulerStateMachineTest, |
319 TestFailedDrawForAnimationCheckerboardSetsNeedsCommitAndDoesNotDrawAgain) { | 321 TestFailedDrawForAnimationCheckerboardSetsNeedsCommitAndDoesNotDrawAgain) { |
320 SchedulerSettings default_scheduler_settings; | 322 SchedulerSettings default_scheduler_settings; |
321 StateMachine state(default_scheduler_settings); | 323 StateMachine state(default_scheduler_settings); |
322 state.SetCanStart(); | 324 state.SetCanStart(); |
323 state.UpdateState(state.NextAction()); | 325 state.UpdateState(state.NextAction()); |
324 state.CreateAndInitializeOutputSurfaceWithActivatedCommit(); | 326 state.CreateAndInitializeOutputSurfaceWithActivatedCommit(); |
325 state.SetVisible(true); | 327 state.SetVisible(true); |
326 state.SetCanDraw(true); | 328 state.SetCanDraw(true); |
327 state.SetNeedsRedraw(true); | 329 state.SetNeedsRedraw(true); |
328 EXPECT_TRUE(state.RedrawPending()); | 330 EXPECT_TRUE(state.RedrawPending()); |
329 EXPECT_TRUE(state.BeginFrameNeeded()); | 331 EXPECT_TRUE(state.BeginFrameNeeded()); |
330 state.OnBeginImplFrame(BeginFrameArgs::CreateForTesting()); | 332 state.OnBeginImplFrame(BeginFrameArgs::CreateForTesting()); |
| 333 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_ANIMATE); |
331 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); | 334 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); |
332 state.OnBeginImplFrameDeadline(); | 335 state.OnBeginImplFrameDeadline(); |
333 | 336 |
334 // We're drawing now. | 337 // We're drawing now. |
335 EXPECT_ACTION_UPDATE_STATE( | 338 EXPECT_ACTION_UPDATE_STATE( |
336 SchedulerStateMachine::ACTION_DRAW_AND_SWAP_IF_POSSIBLE); | 339 SchedulerStateMachine::ACTION_DRAW_AND_SWAP_IF_POSSIBLE); |
337 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); | 340 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); |
338 | 341 |
339 EXPECT_FALSE(state.RedrawPending()); | 342 EXPECT_FALSE(state.RedrawPending()); |
340 EXPECT_FALSE(state.CommitPending()); | 343 EXPECT_FALSE(state.CommitPending()); |
341 | 344 |
342 // Failing the draw makes us require a commit. | 345 // Failing the draw makes us require a commit. |
343 state.DidDrawIfPossibleCompleted( | 346 state.DidDrawIfPossibleCompleted( |
344 DrawSwapReadbackResult::DRAW_ABORTED_CHECKERBOARD_ANIMATIONS); | 347 DrawSwapReadbackResult::DRAW_ABORTED_CHECKERBOARD_ANIMATIONS); |
345 state.OnBeginImplFrame(BeginFrameArgs::CreateForTesting()); | 348 state.OnBeginImplFrame(BeginFrameArgs::CreateForTesting()); |
| 349 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_ANIMATE); |
346 EXPECT_ACTION_UPDATE_STATE( | 350 EXPECT_ACTION_UPDATE_STATE( |
347 SchedulerStateMachine::ACTION_SEND_BEGIN_MAIN_FRAME); | 351 SchedulerStateMachine::ACTION_SEND_BEGIN_MAIN_FRAME); |
348 EXPECT_TRUE(state.RedrawPending()); | 352 EXPECT_TRUE(state.RedrawPending()); |
349 EXPECT_TRUE(state.CommitPending()); | 353 EXPECT_TRUE(state.CommitPending()); |
350 } | 354 } |
351 | 355 |
352 TEST(SchedulerStateMachineTest, TestFailedDrawForMissingHighResNeedsCommit) { | 356 TEST(SchedulerStateMachineTest, TestFailedDrawForMissingHighResNeedsCommit) { |
353 SchedulerSettings default_scheduler_settings; | 357 SchedulerSettings default_scheduler_settings; |
354 StateMachine state(default_scheduler_settings); | 358 StateMachine state(default_scheduler_settings); |
355 state.SetCanStart(); | 359 state.SetCanStart(); |
356 state.UpdateState(state.NextAction()); | 360 state.UpdateState(state.NextAction()); |
357 state.CreateAndInitializeOutputSurfaceWithActivatedCommit(); | 361 state.CreateAndInitializeOutputSurfaceWithActivatedCommit(); |
358 state.SetVisible(true); | 362 state.SetVisible(true); |
359 state.SetCanDraw(true); | 363 state.SetCanDraw(true); |
360 state.SetNeedsRedraw(true); | 364 state.SetNeedsRedraw(true); |
361 EXPECT_TRUE(state.RedrawPending()); | 365 EXPECT_TRUE(state.RedrawPending()); |
362 EXPECT_TRUE(state.BeginFrameNeeded()); | 366 EXPECT_TRUE(state.BeginFrameNeeded()); |
363 | 367 |
364 state.OnBeginImplFrame(BeginFrameArgs::CreateForTesting()); | 368 state.OnBeginImplFrame(BeginFrameArgs::CreateForTesting()); |
| 369 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_ANIMATE); |
365 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); | 370 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); |
366 state.OnBeginImplFrameDeadline(); | 371 state.OnBeginImplFrameDeadline(); |
367 EXPECT_ACTION_UPDATE_STATE( | 372 EXPECT_ACTION_UPDATE_STATE( |
368 SchedulerStateMachine::ACTION_DRAW_AND_SWAP_IF_POSSIBLE); | 373 SchedulerStateMachine::ACTION_DRAW_AND_SWAP_IF_POSSIBLE); |
369 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); | 374 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); |
370 EXPECT_FALSE(state.RedrawPending()); | 375 EXPECT_FALSE(state.RedrawPending()); |
371 EXPECT_FALSE(state.CommitPending()); | 376 EXPECT_FALSE(state.CommitPending()); |
372 | 377 |
373 // Missing high res content requires a commit (but not a redraw) | 378 // Missing high res content requires a commit (but not a redraw) |
374 state.DidDrawIfPossibleCompleted( | 379 state.DidDrawIfPossibleCompleted( |
(...skipping 12 matching lines...) Expand all Loading... |
387 state.SetCanStart(); | 392 state.SetCanStart(); |
388 state.UpdateState(state.NextAction()); | 393 state.UpdateState(state.NextAction()); |
389 state.CreateAndInitializeOutputSurfaceWithActivatedCommit(); | 394 state.CreateAndInitializeOutputSurfaceWithActivatedCommit(); |
390 | 395 |
391 state.SetVisible(true); | 396 state.SetVisible(true); |
392 state.SetCanDraw(true); | 397 state.SetCanDraw(true); |
393 state.SetNeedsRedraw(true); | 398 state.SetNeedsRedraw(true); |
394 EXPECT_TRUE(state.RedrawPending()); | 399 EXPECT_TRUE(state.RedrawPending()); |
395 EXPECT_TRUE(state.BeginFrameNeeded()); | 400 EXPECT_TRUE(state.BeginFrameNeeded()); |
396 state.OnBeginImplFrame(BeginFrameArgs::CreateForTesting()); | 401 state.OnBeginImplFrame(BeginFrameArgs::CreateForTesting()); |
| 402 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_ANIMATE); |
397 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); | 403 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); |
398 state.OnBeginImplFrameDeadline(); | 404 state.OnBeginImplFrameDeadline(); |
399 | 405 |
400 // We're drawing now. | 406 // We're drawing now. |
401 EXPECT_ACTION_UPDATE_STATE( | 407 EXPECT_ACTION_UPDATE_STATE( |
402 SchedulerStateMachine::ACTION_DRAW_AND_SWAP_IF_POSSIBLE); | 408 SchedulerStateMachine::ACTION_DRAW_AND_SWAP_IF_POSSIBLE); |
403 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); | 409 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); |
404 EXPECT_FALSE(state.RedrawPending()); | 410 EXPECT_FALSE(state.RedrawPending()); |
405 EXPECT_FALSE(state.CommitPending()); | 411 EXPECT_FALSE(state.CommitPending()); |
406 | 412 |
407 // While still in the same BeginMainFrame callback on the main thread, | 413 // While still in the same BeginMainFrame callback on the main thread, |
408 // set needs redraw again. This should not redraw. | 414 // set needs redraw again. This should not redraw. |
409 state.SetNeedsRedraw(true); | 415 state.SetNeedsRedraw(true); |
410 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); | 416 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); |
411 | 417 |
412 // Failing the draw for animation checkerboards makes us require a commit. | 418 // Failing the draw for animation checkerboards makes us require a commit. |
413 state.DidDrawIfPossibleCompleted( | 419 state.DidDrawIfPossibleCompleted( |
414 DrawSwapReadbackResult::DRAW_ABORTED_CHECKERBOARD_ANIMATIONS); | 420 DrawSwapReadbackResult::DRAW_ABORTED_CHECKERBOARD_ANIMATIONS); |
415 state.OnBeginImplFrame(BeginFrameArgs::CreateForTesting()); | 421 state.OnBeginImplFrame(BeginFrameArgs::CreateForTesting()); |
| 422 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_ANIMATE); |
416 EXPECT_ACTION_UPDATE_STATE( | 423 EXPECT_ACTION_UPDATE_STATE( |
417 SchedulerStateMachine::ACTION_SEND_BEGIN_MAIN_FRAME); | 424 SchedulerStateMachine::ACTION_SEND_BEGIN_MAIN_FRAME); |
418 EXPECT_TRUE(state.RedrawPending()); | 425 EXPECT_TRUE(state.RedrawPending()); |
419 } | 426 } |
420 | 427 |
421 void TestFailedDrawsEventuallyForceDrawAfterNextCommit( | 428 void TestFailedDrawsEventuallyForceDrawAfterNextCommit( |
422 bool main_frame_before_draw_enabled) { | 429 bool main_frame_before_draw_enabled) { |
423 SchedulerSettings scheduler_settings; | 430 SchedulerSettings scheduler_settings; |
424 scheduler_settings.main_frame_before_draw_enabled = | 431 scheduler_settings.main_frame_before_draw_enabled = |
425 main_frame_before_draw_enabled; | 432 main_frame_before_draw_enabled; |
(...skipping 10 matching lines...) Expand all Loading... |
436 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); | 443 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); |
437 state.OnBeginImplFrame(BeginFrameArgs::CreateForTesting()); | 444 state.OnBeginImplFrame(BeginFrameArgs::CreateForTesting()); |
438 EXPECT_ACTION_UPDATE_STATE( | 445 EXPECT_ACTION_UPDATE_STATE( |
439 SchedulerStateMachine::ACTION_SEND_BEGIN_MAIN_FRAME); | 446 SchedulerStateMachine::ACTION_SEND_BEGIN_MAIN_FRAME); |
440 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); | 447 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); |
441 EXPECT_TRUE(state.CommitPending()); | 448 EXPECT_TRUE(state.CommitPending()); |
442 | 449 |
443 // Then initiate a draw. | 450 // Then initiate a draw. |
444 state.SetNeedsRedraw(true); | 451 state.SetNeedsRedraw(true); |
445 state.OnBeginImplFrameDeadline(); | 452 state.OnBeginImplFrameDeadline(); |
| 453 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_ANIMATE); |
446 EXPECT_ACTION_UPDATE_STATE( | 454 EXPECT_ACTION_UPDATE_STATE( |
447 SchedulerStateMachine::ACTION_DRAW_AND_SWAP_IF_POSSIBLE); | 455 SchedulerStateMachine::ACTION_DRAW_AND_SWAP_IF_POSSIBLE); |
448 | 456 |
449 // Fail the draw. | 457 // Fail the draw. |
450 state.DidDrawIfPossibleCompleted( | 458 state.DidDrawIfPossibleCompleted( |
451 DrawSwapReadbackResult::DRAW_ABORTED_CHECKERBOARD_ANIMATIONS); | 459 DrawSwapReadbackResult::DRAW_ABORTED_CHECKERBOARD_ANIMATIONS); |
452 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); | 460 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); |
453 EXPECT_TRUE(state.BeginFrameNeeded()); | 461 EXPECT_TRUE(state.BeginFrameNeeded()); |
454 EXPECT_TRUE(state.RedrawPending()); | 462 EXPECT_TRUE(state.RedrawPending()); |
455 // But the commit is ongoing. | 463 // But the commit is ongoing. |
456 EXPECT_TRUE(state.CommitPending()); | 464 EXPECT_TRUE(state.CommitPending()); |
457 | 465 |
458 // Finish the commit. Note, we should not yet be forcing a draw, but should | 466 // Finish the commit. Note, we should not yet be forcing a draw, but should |
459 // continue the commit as usual. | 467 // continue the commit as usual. |
460 state.NotifyBeginMainFrameStarted(); | 468 state.NotifyBeginMainFrameStarted(); |
461 state.NotifyReadyToCommit(); | 469 state.NotifyReadyToCommit(); |
462 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_COMMIT); | 470 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_COMMIT); |
463 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); | 471 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); |
464 EXPECT_TRUE(state.RedrawPending()); | 472 EXPECT_TRUE(state.RedrawPending()); |
465 | 473 |
466 // The redraw should be forced at the end of the next BeginImplFrame. | 474 // The redraw should be forced at the end of the next BeginImplFrame. |
467 state.OnBeginImplFrame(BeginFrameArgs::CreateForTesting()); | 475 state.OnBeginImplFrame(BeginFrameArgs::CreateForTesting()); |
| 476 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_ANIMATE); |
468 if (main_frame_before_draw_enabled) { | 477 if (main_frame_before_draw_enabled) { |
469 EXPECT_ACTION_UPDATE_STATE( | 478 EXPECT_ACTION_UPDATE_STATE( |
470 SchedulerStateMachine::ACTION_SEND_BEGIN_MAIN_FRAME); | 479 SchedulerStateMachine::ACTION_SEND_BEGIN_MAIN_FRAME); |
471 } | 480 } |
472 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); | 481 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); |
473 state.OnBeginImplFrameDeadline(); | 482 state.OnBeginImplFrameDeadline(); |
474 EXPECT_ACTION_UPDATE_STATE( | 483 EXPECT_ACTION_UPDATE_STATE( |
475 SchedulerStateMachine::ACTION_DRAW_AND_SWAP_FORCED); | 484 SchedulerStateMachine::ACTION_DRAW_AND_SWAP_FORCED); |
476 } | 485 } |
477 | 486 |
(...skipping 29 matching lines...) Expand all Loading... |
507 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); | 516 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); |
508 state.OnBeginImplFrame(BeginFrameArgs::CreateForTesting()); | 517 state.OnBeginImplFrame(BeginFrameArgs::CreateForTesting()); |
509 EXPECT_ACTION_UPDATE_STATE( | 518 EXPECT_ACTION_UPDATE_STATE( |
510 SchedulerStateMachine::ACTION_SEND_BEGIN_MAIN_FRAME); | 519 SchedulerStateMachine::ACTION_SEND_BEGIN_MAIN_FRAME); |
511 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); | 520 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); |
512 EXPECT_TRUE(state.CommitPending()); | 521 EXPECT_TRUE(state.CommitPending()); |
513 | 522 |
514 // Then initiate a draw. | 523 // Then initiate a draw. |
515 state.SetNeedsRedraw(true); | 524 state.SetNeedsRedraw(true); |
516 state.OnBeginImplFrameDeadline(); | 525 state.OnBeginImplFrameDeadline(); |
| 526 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_ANIMATE); |
517 EXPECT_ACTION_UPDATE_STATE( | 527 EXPECT_ACTION_UPDATE_STATE( |
518 SchedulerStateMachine::ACTION_DRAW_AND_SWAP_IF_POSSIBLE); | 528 SchedulerStateMachine::ACTION_DRAW_AND_SWAP_IF_POSSIBLE); |
519 | 529 |
520 // Fail the draw enough times to force a redraw, | 530 // Fail the draw enough times to force a redraw, |
521 // then once more for good measure. | 531 // then once more for good measure. |
522 for (int i = 0; i < draw_limit + 1; ++i) { | 532 for (int i = 0; i < draw_limit + 1; ++i) { |
523 state.DidDrawIfPossibleCompleted( | 533 state.DidDrawIfPossibleCompleted( |
524 DrawSwapReadbackResult::DRAW_ABORTED_CHECKERBOARD_ANIMATIONS); | 534 DrawSwapReadbackResult::DRAW_ABORTED_CHECKERBOARD_ANIMATIONS); |
525 } | 535 } |
526 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); | 536 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); |
(...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
559 state.SetCanStart(); | 569 state.SetCanStart(); |
560 state.UpdateState(state.NextAction()); | 570 state.UpdateState(state.NextAction()); |
561 state.CreateAndInitializeOutputSurfaceWithActivatedCommit(); | 571 state.CreateAndInitializeOutputSurfaceWithActivatedCommit(); |
562 state.SetVisible(true); | 572 state.SetVisible(true); |
563 state.SetCanDraw(true); | 573 state.SetCanDraw(true); |
564 | 574 |
565 // Start a draw. | 575 // Start a draw. |
566 state.SetNeedsRedraw(true); | 576 state.SetNeedsRedraw(true); |
567 EXPECT_TRUE(state.BeginFrameNeeded()); | 577 EXPECT_TRUE(state.BeginFrameNeeded()); |
568 state.OnBeginImplFrame(BeginFrameArgs::CreateForTesting()); | 578 state.OnBeginImplFrame(BeginFrameArgs::CreateForTesting()); |
| 579 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_ANIMATE); |
569 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); | 580 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); |
570 state.OnBeginImplFrameDeadline(); | 581 state.OnBeginImplFrameDeadline(); |
571 EXPECT_TRUE(state.RedrawPending()); | 582 EXPECT_TRUE(state.RedrawPending()); |
572 EXPECT_ACTION_UPDATE_STATE( | 583 EXPECT_ACTION_UPDATE_STATE( |
573 SchedulerStateMachine::ACTION_DRAW_AND_SWAP_IF_POSSIBLE); | 584 SchedulerStateMachine::ACTION_DRAW_AND_SWAP_IF_POSSIBLE); |
574 | 585 |
575 // Failing the draw for animation checkerboards makes us require a commit. | 586 // Failing the draw for animation checkerboards makes us require a commit. |
576 state.DidDrawIfPossibleCompleted( | 587 state.DidDrawIfPossibleCompleted( |
577 DrawSwapReadbackResult::DRAW_ABORTED_CHECKERBOARD_ANIMATIONS); | 588 DrawSwapReadbackResult::DRAW_ABORTED_CHECKERBOARD_ANIMATIONS); |
578 EXPECT_ACTION_UPDATE_STATE( | 589 EXPECT_ACTION_UPDATE_STATE( |
579 SchedulerStateMachine::ACTION_SEND_BEGIN_MAIN_FRAME); | 590 SchedulerStateMachine::ACTION_SEND_BEGIN_MAIN_FRAME); |
580 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); | 591 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); |
581 EXPECT_TRUE(state.RedrawPending()); | 592 EXPECT_TRUE(state.RedrawPending()); |
582 | 593 |
583 // We should not be trying to draw again now, but we have a commit pending. | 594 // We should not be trying to draw again now, but we have a commit pending. |
584 EXPECT_TRUE(state.BeginFrameNeeded()); | 595 EXPECT_TRUE(state.BeginFrameNeeded()); |
585 state.OnBeginImplFrame(BeginFrameArgs::CreateForTesting()); | 596 state.OnBeginImplFrame(BeginFrameArgs::CreateForTesting()); |
| 597 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_ANIMATE); |
586 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); | 598 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); |
587 | 599 |
588 // We should try to draw again at the end of the next BeginImplFrame on | 600 // We should try to draw again at the end of the next BeginImplFrame on |
589 // the impl thread. | 601 // the impl thread. |
590 state.OnBeginImplFrameDeadline(); | 602 state.OnBeginImplFrameDeadline(); |
591 EXPECT_ACTION_UPDATE_STATE( | 603 EXPECT_ACTION_UPDATE_STATE( |
592 SchedulerStateMachine::ACTION_DRAW_AND_SWAP_IF_POSSIBLE); | 604 SchedulerStateMachine::ACTION_DRAW_AND_SWAP_IF_POSSIBLE); |
593 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); | 605 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); |
594 } | 606 } |
595 | 607 |
596 TEST(SchedulerStateMachineTest, TestDoestDrawTwiceInSameFrame) { | 608 TEST(SchedulerStateMachineTest, TestDoestDrawTwiceInSameFrame) { |
597 SchedulerSettings default_scheduler_settings; | 609 SchedulerSettings default_scheduler_settings; |
598 StateMachine state(default_scheduler_settings); | 610 StateMachine state(default_scheduler_settings); |
599 state.SetCanStart(); | 611 state.SetCanStart(); |
600 state.UpdateState(state.NextAction()); | 612 state.UpdateState(state.NextAction()); |
601 state.CreateAndInitializeOutputSurfaceWithActivatedCommit(); | 613 state.CreateAndInitializeOutputSurfaceWithActivatedCommit(); |
602 state.SetVisible(true); | 614 state.SetVisible(true); |
603 state.SetCanDraw(true); | 615 state.SetCanDraw(true); |
604 state.SetNeedsRedraw(true); | 616 state.SetNeedsRedraw(true); |
605 | 617 |
606 // Draw the first frame. | 618 // Draw the first frame. |
607 EXPECT_TRUE(state.BeginFrameNeeded()); | 619 EXPECT_TRUE(state.BeginFrameNeeded()); |
608 state.OnBeginImplFrame(BeginFrameArgs::CreateForTesting()); | 620 state.OnBeginImplFrame(BeginFrameArgs::CreateForTesting()); |
| 621 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_ANIMATE); |
609 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); | 622 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); |
610 | 623 |
611 state.OnBeginImplFrameDeadline(); | 624 state.OnBeginImplFrameDeadline(); |
612 EXPECT_ACTION_UPDATE_STATE( | 625 EXPECT_ACTION_UPDATE_STATE( |
613 SchedulerStateMachine::ACTION_DRAW_AND_SWAP_IF_POSSIBLE); | 626 SchedulerStateMachine::ACTION_DRAW_AND_SWAP_IF_POSSIBLE); |
614 state.DidDrawIfPossibleCompleted(DrawSwapReadbackResult::DRAW_SUCCESS); | 627 state.DidDrawIfPossibleCompleted(DrawSwapReadbackResult::DRAW_SUCCESS); |
615 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); | 628 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); |
616 | 629 |
617 // Before the next BeginImplFrame, set needs redraw again. | 630 // Before the next BeginImplFrame, set needs redraw again. |
618 // This should not redraw until the next BeginImplFrame. | 631 // This should not redraw until the next BeginImplFrame. |
619 state.SetNeedsRedraw(true); | 632 state.SetNeedsRedraw(true); |
620 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); | 633 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); |
621 | 634 |
622 // Move to another frame. This should now draw. | 635 // Move to another frame. This should now draw. |
623 EXPECT_TRUE(state.BeginFrameNeeded()); | 636 EXPECT_TRUE(state.BeginFrameNeeded()); |
624 state.OnBeginImplFrame(BeginFrameArgs::CreateForTesting()); | 637 state.OnBeginImplFrame(BeginFrameArgs::CreateForTesting()); |
625 | 638 |
| 639 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_ANIMATE); |
626 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); | 640 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); |
627 | 641 |
628 state.OnBeginImplFrameDeadline(); | 642 state.OnBeginImplFrameDeadline(); |
629 EXPECT_ACTION_UPDATE_STATE( | 643 EXPECT_ACTION_UPDATE_STATE( |
630 SchedulerStateMachine::ACTION_DRAW_AND_SWAP_IF_POSSIBLE); | 644 SchedulerStateMachine::ACTION_DRAW_AND_SWAP_IF_POSSIBLE); |
631 state.DidDrawIfPossibleCompleted(DrawSwapReadbackResult::DRAW_SUCCESS); | 645 state.DidDrawIfPossibleCompleted(DrawSwapReadbackResult::DRAW_SUCCESS); |
632 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); | 646 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); |
633 | 647 |
634 // We just swapped, so we should proactively request another BeginImplFrame. | 648 // We just swapped, so we should proactively request another BeginImplFrame. |
635 EXPECT_TRUE(state.BeginFrameNeeded()); | 649 EXPECT_TRUE(state.BeginFrameNeeded()); |
(...skipping 43 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
679 bool request_readback = j; | 693 bool request_readback = j; |
680 | 694 |
681 StateMachine state(default_scheduler_settings); | 695 StateMachine state(default_scheduler_settings); |
682 state.SetCanStart(); | 696 state.SetCanStart(); |
683 state.UpdateState(state.NextAction()); | 697 state.UpdateState(state.NextAction()); |
684 state.CreateAndInitializeOutputSurfaceWithActivatedCommit(); | 698 state.CreateAndInitializeOutputSurfaceWithActivatedCommit(); |
685 state.SetCanDraw(true); | 699 state.SetCanDraw(true); |
686 state.SetCommitState(all_commit_states[i]); | 700 state.SetCommitState(all_commit_states[i]); |
687 state.SetBeginImplFrameState( | 701 state.SetBeginImplFrameState( |
688 SchedulerStateMachine::BEGIN_IMPL_FRAME_STATE_INSIDE_DEADLINE); | 702 SchedulerStateMachine::BEGIN_IMPL_FRAME_STATE_INSIDE_DEADLINE); |
| 703 |
689 if (request_readback) { | 704 if (request_readback) { |
690 state.SetNeedsForcedRedrawForReadback(); | 705 state.SetNeedsForcedRedrawForReadback(); |
691 } else { | 706 } else { |
692 state.SetNeedsRedraw(true); | 707 state.SetNeedsRedraw(true); |
693 state.SetVisible(true); | 708 state.SetVisible(true); |
694 } | 709 } |
695 | 710 |
696 SchedulerStateMachine::Action expected_action; | 711 SchedulerStateMachine::Action expected_action; |
697 if (request_readback) { | 712 if (request_readback) { |
698 expected_action = SchedulerStateMachine::ACTION_DRAW_AND_READBACK; | 713 expected_action = SchedulerStateMachine::ACTION_DRAW_AND_READBACK; |
699 } else if (all_commit_states[i] == | 714 } else if (all_commit_states[i] == |
700 SchedulerStateMachine::COMMIT_STATE_READY_TO_COMMIT) { | 715 SchedulerStateMachine::COMMIT_STATE_READY_TO_COMMIT) { |
701 expected_action = SchedulerStateMachine::ACTION_COMMIT; | 716 expected_action = SchedulerStateMachine::ACTION_COMMIT; |
702 } else { | 717 } else { |
703 expected_action = | 718 expected_action = |
704 SchedulerStateMachine::ACTION_DRAW_AND_SWAP_IF_POSSIBLE; | 719 SchedulerStateMachine::ACTION_DRAW_AND_SWAP_IF_POSSIBLE; |
| 720 EXPECT_EQ(state.NextAction(), SchedulerStateMachine::ACTION_ANIMATE) |
| 721 << *state.AsValue(); |
| 722 state.UpdateState(state.NextAction()); |
705 } | 723 } |
706 | 724 |
707 // Case 1: needs_commit=false. | 725 // Case 1: needs_commit=false. |
708 EXPECT_NE(state.BeginFrameNeeded(), request_readback) << *state.AsValue(); | 726 EXPECT_NE(state.BeginFrameNeeded(), request_readback) << *state.AsValue(); |
709 EXPECT_EQ(state.NextAction(), expected_action) << *state.AsValue(); | 727 EXPECT_EQ(state.NextAction(), expected_action) << *state.AsValue(); |
710 | 728 |
711 // Case 2: needs_commit=true. | 729 // Case 2: needs_commit=true. |
712 state.SetNeedsCommit(); | 730 state.SetNeedsCommit(); |
713 EXPECT_NE(state.BeginFrameNeeded(), request_readback) << *state.AsValue(); | 731 EXPECT_NE(state.BeginFrameNeeded(), request_readback) << *state.AsValue(); |
714 EXPECT_EQ(state.NextAction(), expected_action) << *state.AsValue(); | 732 EXPECT_EQ(state.NextAction(), expected_action) << *state.AsValue(); |
(...skipping 137 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
852 EXPECT_EQ(SchedulerStateMachine::ACTION_COMMIT, state.NextAction()); | 870 EXPECT_EQ(SchedulerStateMachine::ACTION_COMMIT, state.NextAction()); |
853 | 871 |
854 state.OnBeginImplFrame(BeginFrameArgs::CreateForTesting()); | 872 state.OnBeginImplFrame(BeginFrameArgs::CreateForTesting()); |
855 EXPECT_EQ(SchedulerStateMachine::BEGIN_IMPL_FRAME_STATE_BEGIN_FRAME_STARTING, | 873 EXPECT_EQ(SchedulerStateMachine::BEGIN_IMPL_FRAME_STATE_BEGIN_FRAME_STARTING, |
856 state.begin_impl_frame_state()); | 874 state.begin_impl_frame_state()); |
857 EXPECT_EQ(SchedulerStateMachine::ACTION_COMMIT, state.NextAction()); | 875 EXPECT_EQ(SchedulerStateMachine::ACTION_COMMIT, state.NextAction()); |
858 | 876 |
859 // Finish the commit, then make sure we start the next commit immediately | 877 // Finish the commit, then make sure we start the next commit immediately |
860 // and draw on the next BeginImplFrame. | 878 // and draw on the next BeginImplFrame. |
861 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_COMMIT); | 879 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_COMMIT); |
| 880 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_ANIMATE); |
862 if (main_frame_before_draw_enabled) { | 881 if (main_frame_before_draw_enabled) { |
863 EXPECT_ACTION_UPDATE_STATE( | 882 EXPECT_ACTION_UPDATE_STATE( |
864 SchedulerStateMachine::ACTION_SEND_BEGIN_MAIN_FRAME); | 883 SchedulerStateMachine::ACTION_SEND_BEGIN_MAIN_FRAME); |
865 } | 884 } |
866 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); | 885 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); |
867 | 886 |
868 state.OnBeginImplFrameDeadline(); | 887 state.OnBeginImplFrameDeadline(); |
869 | 888 |
870 EXPECT_TRUE(state.active_tree_needs_first_draw()); | 889 EXPECT_TRUE(state.active_tree_needs_first_draw()); |
871 EXPECT_ACTION_UPDATE_STATE( | 890 EXPECT_ACTION_UPDATE_STATE( |
(...skipping 46 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
918 // Commit. | 937 // Commit. |
919 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_COMMIT); | 938 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_COMMIT); |
920 EXPECT_TRUE(state.active_tree_needs_first_draw()); | 939 EXPECT_TRUE(state.active_tree_needs_first_draw()); |
921 EXPECT_TRUE(state.needs_redraw()); | 940 EXPECT_TRUE(state.needs_redraw()); |
922 | 941 |
923 // Expect to do nothing until BeginImplFrame deadline | 942 // Expect to do nothing until BeginImplFrame deadline |
924 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); | 943 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); |
925 | 944 |
926 // At BeginImplFrame deadline, draw. | 945 // At BeginImplFrame deadline, draw. |
927 state.OnBeginImplFrameDeadline(); | 946 state.OnBeginImplFrameDeadline(); |
| 947 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_ANIMATE); |
928 EXPECT_ACTION_UPDATE_STATE( | 948 EXPECT_ACTION_UPDATE_STATE( |
929 SchedulerStateMachine::ACTION_DRAW_AND_SWAP_IF_POSSIBLE); | 949 SchedulerStateMachine::ACTION_DRAW_AND_SWAP_IF_POSSIBLE); |
930 state.DidDrawIfPossibleCompleted(DrawSwapReadbackResult::DRAW_SUCCESS); | 950 state.DidDrawIfPossibleCompleted(DrawSwapReadbackResult::DRAW_SUCCESS); |
931 | 951 |
932 // Should be synchronized, no draw needed, no action needed. | 952 // Should be synchronized, no draw needed, no action needed. |
933 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); | 953 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); |
934 EXPECT_EQ(SchedulerStateMachine::COMMIT_STATE_IDLE, state.CommitState()); | 954 EXPECT_EQ(SchedulerStateMachine::COMMIT_STATE_IDLE, state.CommitState()); |
935 EXPECT_FALSE(state.needs_redraw()); | 955 EXPECT_FALSE(state.needs_redraw()); |
936 } | 956 } |
937 | 957 |
(...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
969 // First commit. | 989 // First commit. |
970 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_COMMIT); | 990 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_COMMIT); |
971 EXPECT_TRUE(state.active_tree_needs_first_draw()); | 991 EXPECT_TRUE(state.active_tree_needs_first_draw()); |
972 EXPECT_TRUE(state.needs_redraw()); | 992 EXPECT_TRUE(state.needs_redraw()); |
973 | 993 |
974 // Expect to do nothing until BeginImplFrame deadline. | 994 // Expect to do nothing until BeginImplFrame deadline. |
975 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); | 995 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); |
976 | 996 |
977 // At BeginImplFrame deadline, draw. | 997 // At BeginImplFrame deadline, draw. |
978 state.OnBeginImplFrameDeadline(); | 998 state.OnBeginImplFrameDeadline(); |
| 999 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_ANIMATE); |
979 EXPECT_ACTION_UPDATE_STATE( | 1000 EXPECT_ACTION_UPDATE_STATE( |
980 SchedulerStateMachine::ACTION_DRAW_AND_SWAP_IF_POSSIBLE); | 1001 SchedulerStateMachine::ACTION_DRAW_AND_SWAP_IF_POSSIBLE); |
981 state.DidDrawIfPossibleCompleted(DrawSwapReadbackResult::DRAW_SUCCESS); | 1002 state.DidDrawIfPossibleCompleted(DrawSwapReadbackResult::DRAW_SUCCESS); |
982 | 1003 |
983 // Should be synchronized, no draw needed, no action needed. | 1004 // Should be synchronized, no draw needed, no action needed. |
984 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); | 1005 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); |
985 EXPECT_EQ(SchedulerStateMachine::COMMIT_STATE_IDLE, state.CommitState()); | 1006 EXPECT_EQ(SchedulerStateMachine::COMMIT_STATE_IDLE, state.CommitState()); |
986 EXPECT_FALSE(state.needs_redraw()); | 1007 EXPECT_FALSE(state.needs_redraw()); |
987 | 1008 |
988 // Next BeginImplFrame should initiate second commit. | 1009 // Next BeginImplFrame should initiate second commit. |
(...skipping 88 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1077 state.BeginMainFrameAborted(true); | 1098 state.BeginMainFrameAborted(true); |
1078 | 1099 |
1079 // Verify that another commit doesn't start on the same frame. | 1100 // Verify that another commit doesn't start on the same frame. |
1080 EXPECT_EQ(SchedulerStateMachine::COMMIT_STATE_IDLE, state.CommitState()); | 1101 EXPECT_EQ(SchedulerStateMachine::COMMIT_STATE_IDLE, state.CommitState()); |
1081 EXPECT_EQ(SchedulerStateMachine::ACTION_NONE, state.NextAction()); | 1102 EXPECT_EQ(SchedulerStateMachine::ACTION_NONE, state.NextAction()); |
1082 EXPECT_FALSE(state.NeedsCommit()); | 1103 EXPECT_FALSE(state.NeedsCommit()); |
1083 | 1104 |
1084 // Start a new frame; draw because this is the first frame since output | 1105 // Start a new frame; draw because this is the first frame since output |
1085 // surface init'd. | 1106 // surface init'd. |
1086 state.OnBeginImplFrame(BeginFrameArgs::CreateForTesting()); | 1107 state.OnBeginImplFrame(BeginFrameArgs::CreateForTesting()); |
| 1108 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_ANIMATE); |
1087 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); | 1109 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); |
1088 state.OnBeginImplFrameDeadline(); | 1110 state.OnBeginImplFrameDeadline(); |
1089 EXPECT_ACTION_UPDATE_STATE( | 1111 EXPECT_ACTION_UPDATE_STATE( |
1090 SchedulerStateMachine::ACTION_DRAW_AND_SWAP_IF_POSSIBLE); | 1112 SchedulerStateMachine::ACTION_DRAW_AND_SWAP_IF_POSSIBLE); |
1091 | 1113 |
1092 // Verify another commit doesn't start on another frame either. | 1114 // Verify another commit doesn't start on another frame either. |
1093 EXPECT_EQ(SchedulerStateMachine::COMMIT_STATE_IDLE, state.CommitState()); | 1115 EXPECT_EQ(SchedulerStateMachine::COMMIT_STATE_IDLE, state.CommitState()); |
1094 EXPECT_EQ(SchedulerStateMachine::ACTION_NONE, state.NextAction()); | 1116 EXPECT_EQ(SchedulerStateMachine::ACTION_NONE, state.NextAction()); |
1095 EXPECT_FALSE(state.NeedsCommit()); | 1117 EXPECT_FALSE(state.NeedsCommit()); |
1096 | 1118 |
(...skipping 105 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1202 state.NotifyReadyToCommit(); | 1224 state.NotifyReadyToCommit(); |
1203 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_COMMIT); | 1225 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_COMMIT); |
1204 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); | 1226 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); |
1205 // Finishing the first commit after initializing an output surface should | 1227 // Finishing the first commit after initializing an output surface should |
1206 // automatically cause a redraw. | 1228 // automatically cause a redraw. |
1207 EXPECT_TRUE(state.RedrawPending()); | 1229 EXPECT_TRUE(state.RedrawPending()); |
1208 | 1230 |
1209 // Once the context is recreated, whether we draw should be based on | 1231 // Once the context is recreated, whether we draw should be based on |
1210 // SetCanDraw. | 1232 // SetCanDraw. |
1211 state.OnBeginImplFrame(BeginFrameArgs::CreateForTesting()); | 1233 state.OnBeginImplFrame(BeginFrameArgs::CreateForTesting()); |
| 1234 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_ANIMATE); |
1212 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); | 1235 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); |
1213 state.OnBeginImplFrameDeadline(); | 1236 state.OnBeginImplFrameDeadline(); |
1214 EXPECT_EQ(SchedulerStateMachine::ACTION_DRAW_AND_SWAP_IF_POSSIBLE, | 1237 EXPECT_EQ(SchedulerStateMachine::ACTION_DRAW_AND_SWAP_IF_POSSIBLE, |
1215 state.NextAction()); | 1238 state.NextAction()); |
1216 state.SetCanDraw(false); | 1239 state.SetCanDraw(false); |
1217 EXPECT_EQ(SchedulerStateMachine::ACTION_DRAW_AND_SWAP_ABORT, | 1240 EXPECT_EQ(SchedulerStateMachine::ACTION_DRAW_AND_SWAP_ABORT, |
1218 state.NextAction()); | 1241 state.NextAction()); |
1219 state.SetCanDraw(true); | 1242 state.SetCanDraw(true); |
1220 EXPECT_EQ(SchedulerStateMachine::ACTION_DRAW_AND_SWAP_IF_POSSIBLE, | 1243 EXPECT_EQ(SchedulerStateMachine::ACTION_DRAW_AND_SWAP_IF_POSSIBLE, |
1221 state.NextAction()); | 1244 state.NextAction()); |
1222 } | 1245 } |
1223 | 1246 |
1224 TEST(SchedulerStateMachineTest, TestContextLostWhileCommitInProgress) { | 1247 TEST(SchedulerStateMachineTest, TestContextLostWhileCommitInProgress) { |
1225 SchedulerSettings scheduler_settings; | 1248 SchedulerSettings scheduler_settings; |
1226 StateMachine state(scheduler_settings); | 1249 StateMachine state(scheduler_settings); |
1227 state.SetCanStart(); | 1250 state.SetCanStart(); |
1228 state.UpdateState(state.NextAction()); | 1251 state.UpdateState(state.NextAction()); |
1229 state.CreateAndInitializeOutputSurfaceWithActivatedCommit(); | 1252 state.CreateAndInitializeOutputSurfaceWithActivatedCommit(); |
1230 state.SetVisible(true); | 1253 state.SetVisible(true); |
1231 state.SetCanDraw(true); | 1254 state.SetCanDraw(true); |
1232 | 1255 |
1233 // Get a commit in flight. | 1256 // Get a commit in flight. |
1234 state.SetNeedsCommit(); | 1257 state.SetNeedsCommit(); |
1235 | 1258 |
1236 // Set damage and expect a draw. | 1259 // Set damage and expect a draw. |
1237 state.SetNeedsRedraw(true); | 1260 state.SetNeedsRedraw(true); |
1238 state.OnBeginImplFrame(BeginFrameArgs::CreateForTesting()); | 1261 state.OnBeginImplFrame(BeginFrameArgs::CreateForTesting()); |
| 1262 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_ANIMATE); |
1239 EXPECT_ACTION_UPDATE_STATE( | 1263 EXPECT_ACTION_UPDATE_STATE( |
1240 SchedulerStateMachine::ACTION_SEND_BEGIN_MAIN_FRAME); | 1264 SchedulerStateMachine::ACTION_SEND_BEGIN_MAIN_FRAME); |
1241 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); | 1265 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); |
1242 state.OnBeginImplFrameDeadline(); | 1266 state.OnBeginImplFrameDeadline(); |
1243 EXPECT_ACTION_UPDATE_STATE( | 1267 EXPECT_ACTION_UPDATE_STATE( |
1244 SchedulerStateMachine::ACTION_DRAW_AND_SWAP_IF_POSSIBLE); | 1268 SchedulerStateMachine::ACTION_DRAW_AND_SWAP_IF_POSSIBLE); |
1245 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); | 1269 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); |
1246 | 1270 |
1247 // Cause a lost context while the BeginMainFrame is in flight. | 1271 // Cause a lost context while the BeginMainFrame is in flight. |
1248 state.DidLoseOutputSurface(); | 1272 state.DidLoseOutputSurface(); |
(...skipping 44 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1293 state.SetVisible(true); | 1317 state.SetVisible(true); |
1294 state.SetCanDraw(true); | 1318 state.SetCanDraw(true); |
1295 | 1319 |
1296 // Get a commit in flight. | 1320 // Get a commit in flight. |
1297 state.SetNeedsCommit(); | 1321 state.SetNeedsCommit(); |
1298 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); | 1322 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); |
1299 | 1323 |
1300 // Set damage and expect a draw. | 1324 // Set damage and expect a draw. |
1301 state.SetNeedsRedraw(true); | 1325 state.SetNeedsRedraw(true); |
1302 state.OnBeginImplFrame(BeginFrameArgs::CreateForTesting()); | 1326 state.OnBeginImplFrame(BeginFrameArgs::CreateForTesting()); |
| 1327 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_ANIMATE); |
1303 EXPECT_ACTION_UPDATE_STATE( | 1328 EXPECT_ACTION_UPDATE_STATE( |
1304 SchedulerStateMachine::ACTION_SEND_BEGIN_MAIN_FRAME); | 1329 SchedulerStateMachine::ACTION_SEND_BEGIN_MAIN_FRAME); |
1305 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); | 1330 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); |
1306 state.OnBeginImplFrameDeadline(); | 1331 state.OnBeginImplFrameDeadline(); |
1307 EXPECT_ACTION_UPDATE_STATE( | 1332 EXPECT_ACTION_UPDATE_STATE( |
1308 SchedulerStateMachine::ACTION_DRAW_AND_SWAP_IF_POSSIBLE); | 1333 SchedulerStateMachine::ACTION_DRAW_AND_SWAP_IF_POSSIBLE); |
1309 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); | 1334 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); |
1310 | 1335 |
1311 // Cause a lost context while the BeginMainFrame is in flight. | 1336 // Cause a lost context while the BeginMainFrame is in flight. |
1312 state.DidLoseOutputSurface(); | 1337 state.DidLoseOutputSurface(); |
(...skipping 41 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1354 state.CreateAndInitializeOutputSurfaceWithActivatedCommit(); | 1379 state.CreateAndInitializeOutputSurfaceWithActivatedCommit(); |
1355 state.OnBeginImplFrame(BeginFrameArgs::CreateForTesting()); | 1380 state.OnBeginImplFrame(BeginFrameArgs::CreateForTesting()); |
1356 EXPECT_ACTION_UPDATE_STATE( | 1381 EXPECT_ACTION_UPDATE_STATE( |
1357 SchedulerStateMachine::ACTION_SEND_BEGIN_MAIN_FRAME); | 1382 SchedulerStateMachine::ACTION_SEND_BEGIN_MAIN_FRAME); |
1358 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); | 1383 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); |
1359 state.NotifyBeginMainFrameStarted(); | 1384 state.NotifyBeginMainFrameStarted(); |
1360 state.NotifyReadyToCommit(); | 1385 state.NotifyReadyToCommit(); |
1361 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_COMMIT); | 1386 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_COMMIT); |
1362 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); | 1387 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); |
1363 state.OnBeginImplFrameDeadline(); | 1388 state.OnBeginImplFrameDeadline(); |
| 1389 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_ANIMATE); |
1364 EXPECT_ACTION_UPDATE_STATE( | 1390 EXPECT_ACTION_UPDATE_STATE( |
1365 SchedulerStateMachine::ACTION_DRAW_AND_SWAP_IF_POSSIBLE); | 1391 SchedulerStateMachine::ACTION_DRAW_AND_SWAP_IF_POSSIBLE); |
1366 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); | 1392 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); |
1367 } | 1393 } |
1368 | 1394 |
1369 TEST(SchedulerStateMachineTest, TestFinishAllRenderingWhileContextLost) { | 1395 TEST(SchedulerStateMachineTest, TestFinishAllRenderingWhileContextLost) { |
1370 SchedulerSettings default_scheduler_settings; | 1396 SchedulerSettings default_scheduler_settings; |
1371 StateMachine state(default_scheduler_settings); | 1397 StateMachine state(default_scheduler_settings); |
1372 state.SetCanStart(); | 1398 state.SetCanStart(); |
1373 state.UpdateState(state.NextAction()); | 1399 state.UpdateState(state.NextAction()); |
(...skipping 143 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1517 state.readback_state()); | 1543 state.readback_state()); |
1518 EXPECT_EQ(SchedulerStateMachine::COMMIT_STATE_BEGIN_MAIN_FRAME_SENT, | 1544 EXPECT_EQ(SchedulerStateMachine::COMMIT_STATE_BEGIN_MAIN_FRAME_SENT, |
1519 state.CommitState()); | 1545 state.CommitState()); |
1520 | 1546 |
1521 // Finish the replacement commit. | 1547 // Finish the replacement commit. |
1522 state.NotifyBeginMainFrameStarted(); | 1548 state.NotifyBeginMainFrameStarted(); |
1523 state.NotifyReadyToCommit(); | 1549 state.NotifyReadyToCommit(); |
1524 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_COMMIT); | 1550 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_COMMIT); |
1525 | 1551 |
1526 state.OnBeginImplFrame(BeginFrameArgs::CreateForTesting()); | 1552 state.OnBeginImplFrame(BeginFrameArgs::CreateForTesting()); |
| 1553 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_ANIMATE); |
1527 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); | 1554 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); |
1528 state.OnBeginImplFrameDeadline(); | 1555 state.OnBeginImplFrameDeadline(); |
1529 EXPECT_ACTION_UPDATE_STATE( | 1556 EXPECT_ACTION_UPDATE_STATE( |
1530 SchedulerStateMachine::ACTION_DRAW_AND_SWAP_IF_POSSIBLE); | 1557 SchedulerStateMachine::ACTION_DRAW_AND_SWAP_IF_POSSIBLE); |
1531 EXPECT_EQ(SchedulerStateMachine::READBACK_STATE_IDLE, state.readback_state()); | 1558 EXPECT_EQ(SchedulerStateMachine::READBACK_STATE_IDLE, state.readback_state()); |
1532 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); | 1559 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); |
1533 } | 1560 } |
1534 | 1561 |
1535 TEST(SchedulerStateMachineTest, TestFinishCommitWhenCommitInProgress) { | 1562 TEST(SchedulerStateMachineTest, TestFinishCommitWhenCommitInProgress) { |
1536 SchedulerSettings default_scheduler_settings; | 1563 SchedulerSettings default_scheduler_settings; |
(...skipping 84 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1621 // New replacement commit is scheduled. | 1648 // New replacement commit is scheduled. |
1622 EXPECT_ACTION_UPDATE_STATE( | 1649 EXPECT_ACTION_UPDATE_STATE( |
1623 SchedulerStateMachine::ACTION_SEND_BEGIN_MAIN_FRAME); | 1650 SchedulerStateMachine::ACTION_SEND_BEGIN_MAIN_FRAME); |
1624 // Forced commit is started. | 1651 // Forced commit is started. |
1625 EXPECT_EQ(SchedulerStateMachine::READBACK_STATE_WAITING_FOR_COMMIT, | 1652 EXPECT_EQ(SchedulerStateMachine::READBACK_STATE_WAITING_FOR_COMMIT, |
1626 state.readback_state()); | 1653 state.readback_state()); |
1627 } | 1654 } |
1628 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); | 1655 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); |
1629 | 1656 |
1630 state.OnBeginImplFrame(BeginFrameArgs::CreateForTesting()); | 1657 state.OnBeginImplFrame(BeginFrameArgs::CreateForTesting()); |
| 1658 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_ANIMATE); |
1631 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); | 1659 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); |
1632 // Perform the draw & swap of replacement commit. | 1660 // Perform the draw & swap of replacement commit. |
1633 state.OnBeginImplFrameDeadline(); | 1661 state.OnBeginImplFrameDeadline(); |
1634 EXPECT_ACTION_UPDATE_STATE( | 1662 EXPECT_ACTION_UPDATE_STATE( |
1635 SchedulerStateMachine::ACTION_DRAW_AND_SWAP_IF_POSSIBLE); | 1663 SchedulerStateMachine::ACTION_DRAW_AND_SWAP_IF_POSSIBLE); |
1636 if (!settings.main_frame_before_draw_enabled) { | 1664 if (!settings.main_frame_before_draw_enabled) { |
1637 // New replacement commit is scheduled. | 1665 // New replacement commit is scheduled. |
1638 EXPECT_ACTION_UPDATE_STATE( | 1666 EXPECT_ACTION_UPDATE_STATE( |
1639 SchedulerStateMachine::ACTION_SEND_BEGIN_MAIN_FRAME); | 1667 SchedulerStateMachine::ACTION_SEND_BEGIN_MAIN_FRAME); |
1640 // Forced commit is started. | 1668 // Forced commit is started. |
(...skipping 19 matching lines...) Expand all Loading... |
1660 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); | 1688 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); |
1661 | 1689 |
1662 // Finish the replacement commit and draw it. | 1690 // Finish the replacement commit and draw it. |
1663 state.NotifyBeginMainFrameStarted(); | 1691 state.NotifyBeginMainFrameStarted(); |
1664 state.NotifyReadyToCommit(); | 1692 state.NotifyReadyToCommit(); |
1665 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_COMMIT); | 1693 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_COMMIT); |
1666 state.NotifyReadyToActivate(); | 1694 state.NotifyReadyToActivate(); |
1667 EXPECT_ACTION_UPDATE_STATE( | 1695 EXPECT_ACTION_UPDATE_STATE( |
1668 SchedulerStateMachine::ACTION_ACTIVATE_PENDING_TREE); | 1696 SchedulerStateMachine::ACTION_ACTIVATE_PENDING_TREE); |
1669 state.OnBeginImplFrame(BeginFrameArgs::CreateForTesting()); | 1697 state.OnBeginImplFrame(BeginFrameArgs::CreateForTesting()); |
| 1698 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_ANIMATE); |
1670 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); | 1699 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); |
1671 state.OnBeginImplFrameDeadline(); | 1700 state.OnBeginImplFrameDeadline(); |
1672 EXPECT_ACTION_UPDATE_STATE( | 1701 EXPECT_ACTION_UPDATE_STATE( |
1673 SchedulerStateMachine::ACTION_DRAW_AND_SWAP_IF_POSSIBLE); | 1702 SchedulerStateMachine::ACTION_DRAW_AND_SWAP_IF_POSSIBLE); |
1674 EXPECT_EQ(SchedulerStateMachine::READBACK_STATE_IDLE, state.readback_state()); | 1703 EXPECT_EQ(SchedulerStateMachine::READBACK_STATE_IDLE, state.readback_state()); |
1675 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); | 1704 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); |
1676 } | 1705 } |
1677 | 1706 |
1678 // Explicitly test when main_frame_before_draw_enabled = true. | 1707 // Explicitly test when main_frame_before_draw_enabled = true. |
1679 TEST(SchedulerStateMachineTest, | 1708 TEST(SchedulerStateMachineTest, |
(...skipping 50 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1730 state.NotifyReadyToActivate(); | 1759 state.NotifyReadyToActivate(); |
1731 EXPECT_ACTION_UPDATE_STATE( | 1760 EXPECT_ACTION_UPDATE_STATE( |
1732 SchedulerStateMachine::ACTION_ACTIVATE_PENDING_TREE); | 1761 SchedulerStateMachine::ACTION_ACTIVATE_PENDING_TREE); |
1733 // Replacement commit for requested forced commit is already scheduled. | 1762 // Replacement commit for requested forced commit is already scheduled. |
1734 EXPECT_EQ(SchedulerStateMachine::READBACK_STATE_WAITING_FOR_COMMIT, | 1763 EXPECT_EQ(SchedulerStateMachine::READBACK_STATE_WAITING_FOR_COMMIT, |
1735 state.readback_state()); | 1764 state.readback_state()); |
1736 EXPECT_FALSE(state.NeedsCommit()); | 1765 EXPECT_FALSE(state.NeedsCommit()); |
1737 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); | 1766 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); |
1738 | 1767 |
1739 state.OnBeginImplFrame(BeginFrameArgs::CreateForTesting()); | 1768 state.OnBeginImplFrame(BeginFrameArgs::CreateForTesting()); |
| 1769 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_ANIMATE); |
1740 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); | 1770 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); |
1741 // Perform the draw & swap of replacement commit. | 1771 // Perform the draw & swap of replacement commit. |
1742 state.OnBeginImplFrameDeadline(); | 1772 state.OnBeginImplFrameDeadline(); |
1743 EXPECT_ACTION_UPDATE_STATE( | 1773 EXPECT_ACTION_UPDATE_STATE( |
1744 SchedulerStateMachine::ACTION_DRAW_AND_SWAP_IF_POSSIBLE); | 1774 SchedulerStateMachine::ACTION_DRAW_AND_SWAP_IF_POSSIBLE); |
1745 EXPECT_ACTION_UPDATE_STATE( | 1775 EXPECT_ACTION_UPDATE_STATE( |
1746 SchedulerStateMachine::ACTION_NONE); | 1776 SchedulerStateMachine::ACTION_NONE); |
1747 | 1777 |
1748 // forced commit is started. | 1778 // forced commit is started. |
1749 state.NotifyBeginMainFrameStarted(); | 1779 state.NotifyBeginMainFrameStarted(); |
(...skipping 217 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1967 // This test mirrors what happens during the first frame of a scroll gesture. | 1997 // This test mirrors what happens during the first frame of a scroll gesture. |
1968 // First we get the input event and a BeginFrame. | 1998 // First we get the input event and a BeginFrame. |
1969 state.OnBeginImplFrame(BeginFrameArgs::CreateForTesting()); | 1999 state.OnBeginImplFrame(BeginFrameArgs::CreateForTesting()); |
1970 | 2000 |
1971 // As a response the compositor requests a redraw and a commit to tell the | 2001 // As a response the compositor requests a redraw and a commit to tell the |
1972 // main thread about the new scroll offset. | 2002 // main thread about the new scroll offset. |
1973 state.SetNeedsRedraw(true); | 2003 state.SetNeedsRedraw(true); |
1974 state.SetNeedsCommit(); | 2004 state.SetNeedsCommit(); |
1975 | 2005 |
1976 // We should start the commit normally. | 2006 // We should start the commit normally. |
| 2007 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_ANIMATE); |
1977 EXPECT_ACTION_UPDATE_STATE( | 2008 EXPECT_ACTION_UPDATE_STATE( |
1978 SchedulerStateMachine::ACTION_SEND_BEGIN_MAIN_FRAME); | 2009 SchedulerStateMachine::ACTION_SEND_BEGIN_MAIN_FRAME); |
1979 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); | 2010 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); |
1980 | 2011 |
1981 // Since only the scroll offset changed, the main thread will abort the | 2012 // Since only the scroll offset changed, the main thread will abort the |
1982 // commit. | 2013 // commit. |
1983 state.BeginMainFrameAborted(true); | 2014 state.BeginMainFrameAborted(true); |
1984 | 2015 |
1985 // Since the commit was aborted, we should draw right away instead of waiting | 2016 // Since the commit was aborted, we should draw right away instead of waiting |
1986 // for the deadline. | 2017 // for the deadline. |
1987 EXPECT_TRUE(state.ShouldTriggerBeginImplFrameDeadlineEarly()); | 2018 EXPECT_TRUE(state.ShouldTriggerBeginImplFrameDeadlineEarly()); |
1988 } | 2019 } |
1989 | 2020 |
1990 TEST(SchedulerStateMachineTest, TestTriggerDeadlineEarlyForSmoothness) { | 2021 TEST(SchedulerStateMachineTest, TestTriggerDeadlineEarlyForSmoothness) { |
1991 SchedulerSettings settings; | 2022 SchedulerSettings settings; |
1992 settings.impl_side_painting = true; | 2023 settings.impl_side_painting = true; |
1993 StateMachine state(settings); | 2024 StateMachine state(settings); |
1994 state.SetCanStart(); | 2025 state.SetCanStart(); |
1995 state.UpdateState(state.NextAction()); | 2026 state.UpdateState(state.NextAction()); |
1996 state.CreateAndInitializeOutputSurfaceWithActivatedCommit(); | 2027 state.CreateAndInitializeOutputSurfaceWithActivatedCommit(); |
1997 state.SetVisible(true); | 2028 state.SetVisible(true); |
1998 state.SetCanDraw(true); | 2029 state.SetCanDraw(true); |
1999 | 2030 |
2000 // This test ensures that impl-draws are prioritized over main thread updates | 2031 // This test ensures that impl-draws are prioritized over main thread updates |
2001 // in prefer smoothness mode. | 2032 // in prefer smoothness mode. |
2002 state.OnBeginImplFrame(BeginFrameArgs::CreateForTesting()); | 2033 state.OnBeginImplFrame(BeginFrameArgs::CreateForTesting()); |
2003 state.SetNeedsRedraw(true); | 2034 state.SetNeedsRedraw(true); |
2004 state.SetNeedsCommit(); | 2035 state.SetNeedsCommit(); |
| 2036 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_ANIMATE); |
2005 EXPECT_ACTION_UPDATE_STATE( | 2037 EXPECT_ACTION_UPDATE_STATE( |
2006 SchedulerStateMachine::ACTION_SEND_BEGIN_MAIN_FRAME); | 2038 SchedulerStateMachine::ACTION_SEND_BEGIN_MAIN_FRAME); |
2007 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); | 2039 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); |
2008 | 2040 |
2009 // The deadline is not triggered early until we enter prefer smoothness mode. | 2041 // The deadline is not triggered early until we enter prefer smoothness mode. |
2010 EXPECT_FALSE(state.ShouldTriggerBeginImplFrameDeadlineEarly()); | 2042 EXPECT_FALSE(state.ShouldTriggerBeginImplFrameDeadlineEarly()); |
2011 state.SetSmoothnessTakesPriority(true); | 2043 state.SetSmoothnessTakesPriority(true); |
2012 EXPECT_TRUE(state.ShouldTriggerBeginImplFrameDeadlineEarly()); | 2044 EXPECT_TRUE(state.ShouldTriggerBeginImplFrameDeadlineEarly()); |
2013 } | 2045 } |
2014 | 2046 |
| 2047 TEST(SchedulerStateMachineTest, TestSetNeedsAnimate) { |
| 2048 SchedulerSettings settings; |
| 2049 settings.impl_side_painting = true; |
| 2050 StateMachine state(settings); |
| 2051 state.SetCanStart(); |
| 2052 state.UpdateState(state.NextAction()); |
| 2053 state.CreateAndInitializeOutputSurfaceWithActivatedCommit(); |
| 2054 state.SetVisible(true); |
| 2055 state.SetCanDraw(true); |
| 2056 |
| 2057 // Test requesting an animation that, when run, causes us to draw. |
| 2058 state.SetNeedsAnimate(); |
| 2059 EXPECT_TRUE(state.BeginFrameNeeded()); |
| 2060 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); |
| 2061 |
| 2062 state.OnBeginImplFrame(BeginFrameArgs::CreateForTesting()); |
| 2063 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_ANIMATE); |
| 2064 |
| 2065 state.OnBeginImplFrameDeadlinePending(); |
| 2066 state.OnBeginImplFrameDeadline(); |
| 2067 EXPECT_ACTION_UPDATE_STATE( |
| 2068 SchedulerStateMachine::ACTION_DRAW_AND_SWAP_IF_POSSIBLE); |
| 2069 } |
| 2070 |
| 2071 TEST(SchedulerStateMachineTest, TestAnimateBeforeCommit) { |
| 2072 SchedulerSettings settings; |
| 2073 settings.impl_side_painting = true; |
| 2074 StateMachine state(settings); |
| 2075 state.SetCanStart(); |
| 2076 state.UpdateState(state.NextAction()); |
| 2077 state.CreateAndInitializeOutputSurfaceWithActivatedCommit(); |
| 2078 state.SetVisible(true); |
| 2079 state.SetCanDraw(true); |
| 2080 |
| 2081 // Check that animations are updated before we start a commit. |
| 2082 state.SetNeedsAnimate(); |
| 2083 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); |
| 2084 state.SetNeedsCommit(); |
| 2085 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); |
| 2086 EXPECT_TRUE(state.BeginFrameNeeded()); |
| 2087 |
| 2088 state.OnBeginImplFrame(BeginFrameArgs::CreateForTesting()); |
| 2089 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_ANIMATE); |
| 2090 EXPECT_ACTION_UPDATE_STATE( |
| 2091 SchedulerStateMachine::ACTION_SEND_BEGIN_MAIN_FRAME); |
| 2092 |
| 2093 state.OnBeginImplFrameDeadlinePending(); |
| 2094 state.OnBeginImplFrameDeadline(); |
| 2095 EXPECT_ACTION_UPDATE_STATE( |
| 2096 SchedulerStateMachine::ACTION_DRAW_AND_SWAP_IF_POSSIBLE); |
| 2097 } |
| 2098 |
| 2099 TEST(SchedulerStateMachineTest, TestSetNeedsAnimateAfterAnimate) { |
| 2100 SchedulerSettings settings; |
| 2101 settings.impl_side_painting = true; |
| 2102 StateMachine state(settings); |
| 2103 state.SetCanStart(); |
| 2104 state.UpdateState(state.NextAction()); |
| 2105 state.CreateAndInitializeOutputSurfaceWithActivatedCommit(); |
| 2106 state.SetVisible(true); |
| 2107 state.SetCanDraw(true); |
| 2108 |
| 2109 // Test requesting an animation after we have already animated during this |
| 2110 // frame. |
| 2111 state.SetNeedsRedraw(true); |
| 2112 EXPECT_TRUE(state.BeginFrameNeeded()); |
| 2113 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); |
| 2114 |
| 2115 state.OnBeginImplFrame(BeginFrameArgs::CreateForTesting()); |
| 2116 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_ANIMATE); |
| 2117 |
| 2118 state.SetNeedsAnimate(); |
| 2119 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); |
| 2120 |
| 2121 state.OnBeginImplFrameDeadline(); |
| 2122 EXPECT_ACTION_UPDATE_STATE( |
| 2123 SchedulerStateMachine::ACTION_DRAW_AND_SWAP_IF_POSSIBLE); |
| 2124 } |
| 2125 |
2015 } // namespace | 2126 } // namespace |
2016 } // namespace cc | 2127 } // namespace cc |
OLD | NEW |