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