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