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