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 222 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
233 SchedulerStateMachine::ACTION_ACTIVATE_PENDING_TREE); | 233 SchedulerStateMachine::ACTION_ACTIVATE_PENDING_TREE); |
234 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); | 234 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); |
235 EXPECT_EQ(state.CommitState(), | 235 EXPECT_EQ(state.CommitState(), |
236 SchedulerStateMachine::COMMIT_STATE_WAITING_FOR_FIRST_DRAW); | 236 SchedulerStateMachine::COMMIT_STATE_WAITING_FOR_FIRST_DRAW); |
237 | 237 |
238 EXPECT_TRUE(state.ShouldTriggerBeginImplFrameDeadlineEarly()); | 238 EXPECT_TRUE(state.ShouldTriggerBeginImplFrameDeadlineEarly()); |
239 state.OnBeginImplFrameDeadline(); | 239 state.OnBeginImplFrameDeadline(); |
240 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_ANIMATE); | 240 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_ANIMATE); |
241 EXPECT_ACTION_UPDATE_STATE( | 241 EXPECT_ACTION_UPDATE_STATE( |
242 SchedulerStateMachine::ACTION_DRAW_AND_SWAP_IF_POSSIBLE); | 242 SchedulerStateMachine::ACTION_DRAW_AND_SWAP_IF_POSSIBLE); |
| 243 state.DidSwapBuffers(); |
| 244 state.DidSwapBuffersComplete(); |
243 EXPECT_EQ(state.CommitState(), SchedulerStateMachine::COMMIT_STATE_IDLE); | 245 EXPECT_EQ(state.CommitState(), SchedulerStateMachine::COMMIT_STATE_IDLE); |
244 EXPECT_ACTION_UPDATE_STATE( | 246 EXPECT_ACTION_UPDATE_STATE( |
245 SchedulerStateMachine::ACTION_SEND_BEGIN_MAIN_FRAME); | 247 SchedulerStateMachine::ACTION_SEND_BEGIN_MAIN_FRAME); |
246 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); | 248 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); |
247 EXPECT_EQ(state.CommitState(), | 249 EXPECT_EQ(state.CommitState(), |
248 SchedulerStateMachine::COMMIT_STATE_BEGIN_MAIN_FRAME_SENT); | 250 SchedulerStateMachine::COMMIT_STATE_BEGIN_MAIN_FRAME_SENT); |
249 | 251 |
250 state.NotifyBeginMainFrameStarted(); | 252 state.NotifyBeginMainFrameStarted(); |
251 state.NotifyReadyToCommit(); | 253 state.NotifyReadyToCommit(); |
252 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_COMMIT); | 254 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_COMMIT); |
(...skipping 52 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
305 state.NotifyReadyToActivate(); | 307 state.NotifyReadyToActivate(); |
306 EXPECT_ACTION_UPDATE_STATE( | 308 EXPECT_ACTION_UPDATE_STATE( |
307 SchedulerStateMachine::ACTION_ACTIVATE_PENDING_TREE); | 309 SchedulerStateMachine::ACTION_ACTIVATE_PENDING_TREE); |
308 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); | 310 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); |
309 | 311 |
310 EXPECT_TRUE(state.ShouldTriggerBeginImplFrameDeadlineEarly()); | 312 EXPECT_TRUE(state.ShouldTriggerBeginImplFrameDeadlineEarly()); |
311 state.OnBeginImplFrameDeadline(); | 313 state.OnBeginImplFrameDeadline(); |
312 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_ANIMATE); | 314 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_ANIMATE); |
313 EXPECT_ACTION_UPDATE_STATE( | 315 EXPECT_ACTION_UPDATE_STATE( |
314 SchedulerStateMachine::ACTION_DRAW_AND_SWAP_IF_POSSIBLE); | 316 SchedulerStateMachine::ACTION_DRAW_AND_SWAP_IF_POSSIBLE); |
| 317 state.DidSwapBuffers(); |
| 318 state.DidSwapBuffersComplete(); |
315 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_COMMIT); | 319 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_COMMIT); |
316 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); | 320 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); |
317 EXPECT_EQ(state.CommitState(), SchedulerStateMachine::COMMIT_STATE_IDLE); | 321 EXPECT_EQ(state.CommitState(), SchedulerStateMachine::COMMIT_STATE_IDLE); |
318 } | 322 } |
319 | 323 |
320 TEST(SchedulerStateMachineTest, | 324 TEST(SchedulerStateMachineTest, |
321 TestFailedDrawForAnimationCheckerboardSetsNeedsCommitAndDoesNotDrawAgain) { | 325 TestFailedDrawForAnimationCheckerboardSetsNeedsCommitAndDoesNotDrawAgain) { |
322 SchedulerSettings default_scheduler_settings; | 326 SchedulerSettings default_scheduler_settings; |
323 StateMachine state(default_scheduler_settings); | 327 StateMachine state(default_scheduler_settings); |
324 state.SetCanStart(); | 328 state.SetCanStart(); |
325 state.UpdateState(state.NextAction()); | 329 state.UpdateState(state.NextAction()); |
326 state.CreateAndInitializeOutputSurfaceWithActivatedCommit(); | 330 state.CreateAndInitializeOutputSurfaceWithActivatedCommit(); |
327 state.SetVisible(true); | 331 state.SetVisible(true); |
328 state.SetCanDraw(true); | 332 state.SetCanDraw(true); |
329 state.SetNeedsRedraw(true); | 333 state.SetNeedsRedraw(true); |
330 EXPECT_TRUE(state.RedrawPending()); | 334 EXPECT_TRUE(state.RedrawPending()); |
331 EXPECT_TRUE(state.BeginFrameNeeded()); | 335 EXPECT_TRUE(state.BeginFrameNeeded()); |
332 state.OnBeginImplFrame(BeginFrameArgs::CreateForTesting()); | 336 state.OnBeginImplFrame(BeginFrameArgs::CreateForTesting()); |
333 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_ANIMATE); | 337 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_ANIMATE); |
334 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); | 338 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); |
335 state.OnBeginImplFrameDeadline(); | 339 state.OnBeginImplFrameDeadline(); |
336 | 340 |
337 // We're drawing now. | 341 // We're drawing now. |
338 EXPECT_ACTION_UPDATE_STATE( | 342 EXPECT_ACTION_UPDATE_STATE( |
339 SchedulerStateMachine::ACTION_DRAW_AND_SWAP_IF_POSSIBLE); | 343 SchedulerStateMachine::ACTION_DRAW_AND_SWAP_IF_POSSIBLE); |
| 344 state.DidSwapBuffers(); |
| 345 state.DidSwapBuffersComplete(); |
340 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); | 346 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); |
341 | 347 |
342 EXPECT_FALSE(state.RedrawPending()); | 348 EXPECT_FALSE(state.RedrawPending()); |
343 EXPECT_FALSE(state.CommitPending()); | 349 EXPECT_FALSE(state.CommitPending()); |
344 | 350 |
345 // Failing the draw makes us require a commit. | 351 // Failing the draw makes us require a commit. |
346 state.DidDrawIfPossibleCompleted( | 352 state.DidDrawIfPossibleCompleted(DRAW_ABORTED_CHECKERBOARD_ANIMATIONS); |
347 DrawSwapReadbackResult::DRAW_ABORTED_CHECKERBOARD_ANIMATIONS); | |
348 state.OnBeginImplFrame(BeginFrameArgs::CreateForTesting()); | 353 state.OnBeginImplFrame(BeginFrameArgs::CreateForTesting()); |
349 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_ANIMATE); | 354 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_ANIMATE); |
350 EXPECT_ACTION_UPDATE_STATE( | 355 EXPECT_ACTION_UPDATE_STATE( |
351 SchedulerStateMachine::ACTION_SEND_BEGIN_MAIN_FRAME); | 356 SchedulerStateMachine::ACTION_SEND_BEGIN_MAIN_FRAME); |
352 EXPECT_TRUE(state.RedrawPending()); | 357 EXPECT_TRUE(state.RedrawPending()); |
353 EXPECT_TRUE(state.CommitPending()); | 358 EXPECT_TRUE(state.CommitPending()); |
354 } | 359 } |
355 | 360 |
356 TEST(SchedulerStateMachineTest, TestFailedDrawForMissingHighResNeedsCommit) { | 361 TEST(SchedulerStateMachineTest, TestFailedDrawForMissingHighResNeedsCommit) { |
357 SchedulerSettings default_scheduler_settings; | 362 SchedulerSettings default_scheduler_settings; |
358 StateMachine state(default_scheduler_settings); | 363 StateMachine state(default_scheduler_settings); |
359 state.SetCanStart(); | 364 state.SetCanStart(); |
360 state.UpdateState(state.NextAction()); | 365 state.UpdateState(state.NextAction()); |
361 state.CreateAndInitializeOutputSurfaceWithActivatedCommit(); | 366 state.CreateAndInitializeOutputSurfaceWithActivatedCommit(); |
362 state.SetVisible(true); | 367 state.SetVisible(true); |
363 state.SetCanDraw(true); | 368 state.SetCanDraw(true); |
364 state.SetNeedsRedraw(true); | 369 state.SetNeedsRedraw(true); |
365 EXPECT_TRUE(state.RedrawPending()); | 370 EXPECT_TRUE(state.RedrawPending()); |
366 EXPECT_TRUE(state.BeginFrameNeeded()); | 371 EXPECT_TRUE(state.BeginFrameNeeded()); |
367 | 372 |
368 state.OnBeginImplFrame(BeginFrameArgs::CreateForTesting()); | 373 state.OnBeginImplFrame(BeginFrameArgs::CreateForTesting()); |
369 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_ANIMATE); | 374 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_ANIMATE); |
370 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); | 375 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); |
371 state.OnBeginImplFrameDeadline(); | 376 state.OnBeginImplFrameDeadline(); |
372 EXPECT_ACTION_UPDATE_STATE( | 377 EXPECT_ACTION_UPDATE_STATE( |
373 SchedulerStateMachine::ACTION_DRAW_AND_SWAP_IF_POSSIBLE); | 378 SchedulerStateMachine::ACTION_DRAW_AND_SWAP_IF_POSSIBLE); |
| 379 state.DidSwapBuffers(); |
| 380 state.DidSwapBuffersComplete(); |
374 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); | 381 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); |
375 EXPECT_FALSE(state.RedrawPending()); | 382 EXPECT_FALSE(state.RedrawPending()); |
376 EXPECT_FALSE(state.CommitPending()); | 383 EXPECT_FALSE(state.CommitPending()); |
377 | 384 |
378 // Missing high res content requires a commit (but not a redraw) | 385 // Missing high res content requires a commit (but not a redraw) |
379 state.DidDrawIfPossibleCompleted( | 386 state.DidDrawIfPossibleCompleted(DRAW_ABORTED_MISSING_HIGH_RES_CONTENT); |
380 DrawSwapReadbackResult::DRAW_ABORTED_MISSING_HIGH_RES_CONTENT); | |
381 state.OnBeginImplFrame(BeginFrameArgs::CreateForTesting()); | 387 state.OnBeginImplFrame(BeginFrameArgs::CreateForTesting()); |
382 EXPECT_ACTION_UPDATE_STATE( | 388 EXPECT_ACTION_UPDATE_STATE( |
383 SchedulerStateMachine::ACTION_SEND_BEGIN_MAIN_FRAME); | 389 SchedulerStateMachine::ACTION_SEND_BEGIN_MAIN_FRAME); |
384 EXPECT_FALSE(state.RedrawPending()); | 390 EXPECT_FALSE(state.RedrawPending()); |
385 EXPECT_TRUE(state.CommitPending()); | 391 EXPECT_TRUE(state.CommitPending()); |
386 } | 392 } |
387 | 393 |
388 TEST(SchedulerStateMachineTest, | 394 TEST(SchedulerStateMachineTest, |
389 TestsetNeedsRedrawDuringFailedDrawDoesNotRemoveNeedsRedraw) { | 395 TestsetNeedsRedrawDuringFailedDrawDoesNotRemoveNeedsRedraw) { |
390 SchedulerSettings default_scheduler_settings; | 396 SchedulerSettings default_scheduler_settings; |
391 StateMachine state(default_scheduler_settings); | 397 StateMachine state(default_scheduler_settings); |
392 state.SetCanStart(); | 398 state.SetCanStart(); |
393 state.UpdateState(state.NextAction()); | 399 state.UpdateState(state.NextAction()); |
394 state.CreateAndInitializeOutputSurfaceWithActivatedCommit(); | 400 state.CreateAndInitializeOutputSurfaceWithActivatedCommit(); |
395 | 401 |
396 state.SetVisible(true); | 402 state.SetVisible(true); |
397 state.SetCanDraw(true); | 403 state.SetCanDraw(true); |
398 state.SetNeedsRedraw(true); | 404 state.SetNeedsRedraw(true); |
399 EXPECT_TRUE(state.RedrawPending()); | 405 EXPECT_TRUE(state.RedrawPending()); |
400 EXPECT_TRUE(state.BeginFrameNeeded()); | 406 EXPECT_TRUE(state.BeginFrameNeeded()); |
401 state.OnBeginImplFrame(BeginFrameArgs::CreateForTesting()); | 407 state.OnBeginImplFrame(BeginFrameArgs::CreateForTesting()); |
402 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_ANIMATE); | 408 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_ANIMATE); |
403 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); | 409 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); |
404 state.OnBeginImplFrameDeadline(); | 410 state.OnBeginImplFrameDeadline(); |
405 | 411 |
406 // We're drawing now. | 412 // We're drawing now. |
407 EXPECT_ACTION_UPDATE_STATE( | 413 EXPECT_ACTION_UPDATE_STATE( |
408 SchedulerStateMachine::ACTION_DRAW_AND_SWAP_IF_POSSIBLE); | 414 SchedulerStateMachine::ACTION_DRAW_AND_SWAP_IF_POSSIBLE); |
| 415 state.DidSwapBuffers(); |
| 416 state.DidSwapBuffersComplete(); |
409 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); | 417 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); |
410 EXPECT_FALSE(state.RedrawPending()); | 418 EXPECT_FALSE(state.RedrawPending()); |
411 EXPECT_FALSE(state.CommitPending()); | 419 EXPECT_FALSE(state.CommitPending()); |
412 | 420 |
413 // While still in the same BeginMainFrame callback on the main thread, | 421 // While still in the same BeginMainFrame callback on the main thread, |
414 // set needs redraw again. This should not redraw. | 422 // set needs redraw again. This should not redraw. |
415 state.SetNeedsRedraw(true); | 423 state.SetNeedsRedraw(true); |
416 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); | 424 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); |
417 | 425 |
418 // Failing the draw for animation checkerboards makes us require a commit. | 426 // Failing the draw for animation checkerboards makes us require a commit. |
419 state.DidDrawIfPossibleCompleted( | 427 state.DidDrawIfPossibleCompleted(DRAW_ABORTED_CHECKERBOARD_ANIMATIONS); |
420 DrawSwapReadbackResult::DRAW_ABORTED_CHECKERBOARD_ANIMATIONS); | |
421 state.OnBeginImplFrame(BeginFrameArgs::CreateForTesting()); | 428 state.OnBeginImplFrame(BeginFrameArgs::CreateForTesting()); |
422 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_ANIMATE); | 429 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_ANIMATE); |
423 EXPECT_ACTION_UPDATE_STATE( | 430 EXPECT_ACTION_UPDATE_STATE( |
424 SchedulerStateMachine::ACTION_SEND_BEGIN_MAIN_FRAME); | 431 SchedulerStateMachine::ACTION_SEND_BEGIN_MAIN_FRAME); |
425 EXPECT_TRUE(state.RedrawPending()); | 432 EXPECT_TRUE(state.RedrawPending()); |
426 } | 433 } |
427 | 434 |
428 void TestFailedDrawsEventuallyForceDrawAfterNextCommit( | 435 void TestFailedDrawsEventuallyForceDrawAfterNextCommit( |
429 bool main_frame_before_draw_enabled) { | 436 bool main_frame_before_draw_enabled) { |
430 SchedulerSettings scheduler_settings; | 437 SchedulerSettings scheduler_settings; |
(...skipping 17 matching lines...) Expand all Loading... |
448 EXPECT_TRUE(state.CommitPending()); | 455 EXPECT_TRUE(state.CommitPending()); |
449 | 456 |
450 // Then initiate a draw. | 457 // Then initiate a draw. |
451 state.SetNeedsRedraw(true); | 458 state.SetNeedsRedraw(true); |
452 state.OnBeginImplFrameDeadline(); | 459 state.OnBeginImplFrameDeadline(); |
453 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_ANIMATE); | 460 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_ANIMATE); |
454 EXPECT_ACTION_UPDATE_STATE( | 461 EXPECT_ACTION_UPDATE_STATE( |
455 SchedulerStateMachine::ACTION_DRAW_AND_SWAP_IF_POSSIBLE); | 462 SchedulerStateMachine::ACTION_DRAW_AND_SWAP_IF_POSSIBLE); |
456 | 463 |
457 // Fail the draw. | 464 // Fail the draw. |
458 state.DidDrawIfPossibleCompleted( | 465 state.DidDrawIfPossibleCompleted(DRAW_ABORTED_CHECKERBOARD_ANIMATIONS); |
459 DrawSwapReadbackResult::DRAW_ABORTED_CHECKERBOARD_ANIMATIONS); | |
460 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); | 466 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); |
461 EXPECT_TRUE(state.BeginFrameNeeded()); | 467 EXPECT_TRUE(state.BeginFrameNeeded()); |
462 EXPECT_TRUE(state.RedrawPending()); | 468 EXPECT_TRUE(state.RedrawPending()); |
463 // But the commit is ongoing. | 469 // But the commit is ongoing. |
464 EXPECT_TRUE(state.CommitPending()); | 470 EXPECT_TRUE(state.CommitPending()); |
465 | 471 |
466 // Finish the commit. Note, we should not yet be forcing a draw, but should | 472 // Finish the commit. Note, we should not yet be forcing a draw, but should |
467 // continue the commit as usual. | 473 // continue the commit as usual. |
468 state.NotifyBeginMainFrameStarted(); | 474 state.NotifyBeginMainFrameStarted(); |
469 state.NotifyReadyToCommit(); | 475 state.NotifyReadyToCommit(); |
470 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_COMMIT); | 476 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_COMMIT); |
471 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); | 477 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); |
472 EXPECT_TRUE(state.RedrawPending()); | 478 EXPECT_TRUE(state.RedrawPending()); |
473 | 479 |
474 // The redraw should be forced at the end of the next BeginImplFrame. | 480 // The redraw should be forced at the end of the next BeginImplFrame. |
475 state.OnBeginImplFrame(BeginFrameArgs::CreateForTesting()); | 481 state.OnBeginImplFrame(BeginFrameArgs::CreateForTesting()); |
476 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_ANIMATE); | 482 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_ANIMATE); |
477 if (main_frame_before_draw_enabled) { | 483 if (main_frame_before_draw_enabled) { |
478 EXPECT_ACTION_UPDATE_STATE( | 484 EXPECT_ACTION_UPDATE_STATE( |
479 SchedulerStateMachine::ACTION_SEND_BEGIN_MAIN_FRAME); | 485 SchedulerStateMachine::ACTION_SEND_BEGIN_MAIN_FRAME); |
480 } | 486 } |
481 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); | 487 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); |
482 state.OnBeginImplFrameDeadline(); | 488 state.OnBeginImplFrameDeadline(); |
483 EXPECT_ACTION_UPDATE_STATE( | 489 EXPECT_ACTION_UPDATE_STATE( |
484 SchedulerStateMachine::ACTION_DRAW_AND_SWAP_FORCED); | 490 SchedulerStateMachine::ACTION_DRAW_AND_SWAP_FORCED); |
| 491 state.DidSwapBuffers(); |
| 492 state.DidSwapBuffersComplete(); |
485 } | 493 } |
486 | 494 |
487 TEST(SchedulerStateMachineTest, | 495 TEST(SchedulerStateMachineTest, |
488 TestFailedDrawsEventuallyForceDrawAfterNextCommit) { | 496 TestFailedDrawsEventuallyForceDrawAfterNextCommit) { |
489 bool main_frame_before_draw_enabled = false; | 497 bool main_frame_before_draw_enabled = false; |
490 TestFailedDrawsEventuallyForceDrawAfterNextCommit( | 498 TestFailedDrawsEventuallyForceDrawAfterNextCommit( |
491 main_frame_before_draw_enabled); | 499 main_frame_before_draw_enabled); |
492 } | 500 } |
493 | 501 |
494 TEST(SchedulerStateMachineTest, | 502 TEST(SchedulerStateMachineTest, |
(...skipping 27 matching lines...) Expand all Loading... |
522 | 530 |
523 // Then initiate a draw. | 531 // Then initiate a draw. |
524 state.SetNeedsRedraw(true); | 532 state.SetNeedsRedraw(true); |
525 state.OnBeginImplFrameDeadline(); | 533 state.OnBeginImplFrameDeadline(); |
526 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_ANIMATE); | 534 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_ANIMATE); |
527 EXPECT_ACTION_UPDATE_STATE( | 535 EXPECT_ACTION_UPDATE_STATE( |
528 SchedulerStateMachine::ACTION_DRAW_AND_SWAP_IF_POSSIBLE); | 536 SchedulerStateMachine::ACTION_DRAW_AND_SWAP_IF_POSSIBLE); |
529 | 537 |
530 // Fail the draw enough times to force a redraw, | 538 // Fail the draw enough times to force a redraw, |
531 // then once more for good measure. | 539 // then once more for good measure. |
532 for (int i = 0; i < draw_limit + 1; ++i) { | 540 for (int i = 0; i < draw_limit + 1; ++i) |
533 state.DidDrawIfPossibleCompleted( | 541 state.DidDrawIfPossibleCompleted(DRAW_ABORTED_CHECKERBOARD_ANIMATIONS); |
534 DrawSwapReadbackResult::DRAW_ABORTED_CHECKERBOARD_ANIMATIONS); | |
535 } | |
536 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); | 542 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); |
537 EXPECT_TRUE(state.BeginFrameNeeded()); | 543 EXPECT_TRUE(state.BeginFrameNeeded()); |
538 EXPECT_TRUE(state.RedrawPending()); | 544 EXPECT_TRUE(state.RedrawPending()); |
539 // But the commit is ongoing. | 545 // But the commit is ongoing. |
540 EXPECT_TRUE(state.CommitPending()); | 546 EXPECT_TRUE(state.CommitPending()); |
541 EXPECT_TRUE(state.ForcedRedrawState() == | 547 EXPECT_TRUE(state.ForcedRedrawState() == |
542 SchedulerStateMachine::FORCED_REDRAW_STATE_WAITING_FOR_COMMIT); | 548 SchedulerStateMachine::FORCED_REDRAW_STATE_WAITING_FOR_COMMIT); |
543 | 549 |
544 state.NotifyBeginMainFrameStarted(); | 550 state.NotifyBeginMainFrameStarted(); |
545 state.NotifyReadyToCommit(); | 551 state.NotifyReadyToCommit(); |
546 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_COMMIT); | 552 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_COMMIT); |
547 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); | 553 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); |
548 EXPECT_TRUE(state.RedrawPending()); | 554 EXPECT_TRUE(state.RedrawPending()); |
549 EXPECT_FALSE(state.CommitPending()); | 555 EXPECT_FALSE(state.CommitPending()); |
550 | 556 |
551 // Now force redraw should be in waiting for activation | 557 // Now force redraw should be in waiting for activation |
552 EXPECT_TRUE(state.ForcedRedrawState() == | 558 EXPECT_TRUE(state.ForcedRedrawState() == |
553 SchedulerStateMachine::FORCED_REDRAW_STATE_WAITING_FOR_ACTIVATION); | 559 SchedulerStateMachine::FORCED_REDRAW_STATE_WAITING_FOR_ACTIVATION); |
554 | 560 |
555 // After failing additional draws, we should still be in a forced | 561 // After failing additional draws, we should still be in a forced |
556 // redraw, but not back in WAITING_FOR_COMMIT. | 562 // redraw, but not back in WAITING_FOR_COMMIT. |
557 for (int i = 0; i < draw_limit + 1; ++i) { | 563 for (int i = 0; i < draw_limit + 1; ++i) |
558 state.DidDrawIfPossibleCompleted( | 564 state.DidDrawIfPossibleCompleted(DRAW_ABORTED_CHECKERBOARD_ANIMATIONS); |
559 DrawSwapReadbackResult::DRAW_ABORTED_CHECKERBOARD_ANIMATIONS); | |
560 } | |
561 EXPECT_TRUE(state.RedrawPending()); | 565 EXPECT_TRUE(state.RedrawPending()); |
562 EXPECT_TRUE(state.ForcedRedrawState() == | 566 EXPECT_TRUE(state.ForcedRedrawState() == |
563 SchedulerStateMachine::FORCED_REDRAW_STATE_WAITING_FOR_ACTIVATION); | 567 SchedulerStateMachine::FORCED_REDRAW_STATE_WAITING_FOR_ACTIVATION); |
564 } | 568 } |
565 | 569 |
566 TEST(SchedulerStateMachineTest, TestFailedDrawIsRetriedInNextBeginImplFrame) { | 570 TEST(SchedulerStateMachineTest, TestFailedDrawIsRetriedInNextBeginImplFrame) { |
567 SchedulerSettings default_scheduler_settings; | 571 SchedulerSettings default_scheduler_settings; |
568 StateMachine state(default_scheduler_settings); | 572 StateMachine state(default_scheduler_settings); |
569 state.SetCanStart(); | 573 state.SetCanStart(); |
570 state.UpdateState(state.NextAction()); | 574 state.UpdateState(state.NextAction()); |
571 state.CreateAndInitializeOutputSurfaceWithActivatedCommit(); | 575 state.CreateAndInitializeOutputSurfaceWithActivatedCommit(); |
572 state.SetVisible(true); | 576 state.SetVisible(true); |
573 state.SetCanDraw(true); | 577 state.SetCanDraw(true); |
574 | 578 |
575 // Start a draw. | 579 // Start a draw. |
576 state.SetNeedsRedraw(true); | 580 state.SetNeedsRedraw(true); |
577 EXPECT_TRUE(state.BeginFrameNeeded()); | 581 EXPECT_TRUE(state.BeginFrameNeeded()); |
578 state.OnBeginImplFrame(BeginFrameArgs::CreateForTesting()); | 582 state.OnBeginImplFrame(BeginFrameArgs::CreateForTesting()); |
579 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_ANIMATE); | 583 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_ANIMATE); |
580 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); | 584 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); |
581 state.OnBeginImplFrameDeadline(); | 585 state.OnBeginImplFrameDeadline(); |
582 EXPECT_TRUE(state.RedrawPending()); | 586 EXPECT_TRUE(state.RedrawPending()); |
583 EXPECT_ACTION_UPDATE_STATE( | 587 EXPECT_ACTION_UPDATE_STATE( |
584 SchedulerStateMachine::ACTION_DRAW_AND_SWAP_IF_POSSIBLE); | 588 SchedulerStateMachine::ACTION_DRAW_AND_SWAP_IF_POSSIBLE); |
585 | 589 |
586 // Failing the draw for animation checkerboards makes us require a commit. | 590 // Failing the draw for animation checkerboards makes us require a commit. |
587 state.DidDrawIfPossibleCompleted( | 591 state.DidDrawIfPossibleCompleted(DRAW_ABORTED_CHECKERBOARD_ANIMATIONS); |
588 DrawSwapReadbackResult::DRAW_ABORTED_CHECKERBOARD_ANIMATIONS); | |
589 EXPECT_ACTION_UPDATE_STATE( | 592 EXPECT_ACTION_UPDATE_STATE( |
590 SchedulerStateMachine::ACTION_SEND_BEGIN_MAIN_FRAME); | 593 SchedulerStateMachine::ACTION_SEND_BEGIN_MAIN_FRAME); |
591 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); | 594 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); |
592 EXPECT_TRUE(state.RedrawPending()); | 595 EXPECT_TRUE(state.RedrawPending()); |
593 | 596 |
594 // We should not be trying to draw again now, but we have a commit pending. | 597 // We should not be trying to draw again now, but we have a commit pending. |
595 EXPECT_TRUE(state.BeginFrameNeeded()); | 598 EXPECT_TRUE(state.BeginFrameNeeded()); |
596 state.OnBeginImplFrame(BeginFrameArgs::CreateForTesting()); | 599 state.OnBeginImplFrame(BeginFrameArgs::CreateForTesting()); |
597 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_ANIMATE); | 600 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_ANIMATE); |
598 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); | 601 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); |
599 | 602 |
600 // We should try to draw again at the end of the next BeginImplFrame on | 603 // We should try to draw again at the end of the next BeginImplFrame on |
601 // the impl thread. | 604 // the impl thread. |
602 state.OnBeginImplFrameDeadline(); | 605 state.OnBeginImplFrameDeadline(); |
603 EXPECT_ACTION_UPDATE_STATE( | 606 EXPECT_ACTION_UPDATE_STATE( |
604 SchedulerStateMachine::ACTION_DRAW_AND_SWAP_IF_POSSIBLE); | 607 SchedulerStateMachine::ACTION_DRAW_AND_SWAP_IF_POSSIBLE); |
| 608 state.DidSwapBuffers(); |
| 609 state.DidSwapBuffersComplete(); |
605 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); | 610 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); |
606 } | 611 } |
607 | 612 |
608 TEST(SchedulerStateMachineTest, TestDoestDrawTwiceInSameFrame) { | 613 TEST(SchedulerStateMachineTest, TestDoestDrawTwiceInSameFrame) { |
609 SchedulerSettings default_scheduler_settings; | 614 SchedulerSettings default_scheduler_settings; |
610 StateMachine state(default_scheduler_settings); | 615 StateMachine state(default_scheduler_settings); |
611 state.SetCanStart(); | 616 state.SetCanStart(); |
612 state.UpdateState(state.NextAction()); | 617 state.UpdateState(state.NextAction()); |
613 state.CreateAndInitializeOutputSurfaceWithActivatedCommit(); | 618 state.CreateAndInitializeOutputSurfaceWithActivatedCommit(); |
614 state.SetVisible(true); | 619 state.SetVisible(true); |
615 state.SetCanDraw(true); | 620 state.SetCanDraw(true); |
616 state.SetNeedsRedraw(true); | 621 state.SetNeedsRedraw(true); |
617 | 622 |
618 // Draw the first frame. | 623 // Draw the first frame. |
619 EXPECT_TRUE(state.BeginFrameNeeded()); | 624 EXPECT_TRUE(state.BeginFrameNeeded()); |
620 state.OnBeginImplFrame(BeginFrameArgs::CreateForTesting()); | 625 state.OnBeginImplFrame(BeginFrameArgs::CreateForTesting()); |
621 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_ANIMATE); | 626 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_ANIMATE); |
622 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); | 627 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); |
623 | 628 |
624 state.OnBeginImplFrameDeadline(); | 629 state.OnBeginImplFrameDeadline(); |
625 EXPECT_ACTION_UPDATE_STATE( | 630 EXPECT_ACTION_UPDATE_STATE( |
626 SchedulerStateMachine::ACTION_DRAW_AND_SWAP_IF_POSSIBLE); | 631 SchedulerStateMachine::ACTION_DRAW_AND_SWAP_IF_POSSIBLE); |
627 state.DidDrawIfPossibleCompleted(DrawSwapReadbackResult::DRAW_SUCCESS); | 632 state.DidSwapBuffers(); |
| 633 state.DidDrawIfPossibleCompleted(DRAW_SUCCESS); |
| 634 state.DidSwapBuffersComplete(); |
628 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); | 635 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); |
629 | 636 |
630 // Before the next BeginImplFrame, set needs redraw again. | 637 // Before the next BeginImplFrame, set needs redraw again. |
631 // This should not redraw until the next BeginImplFrame. | 638 // This should not redraw until the next BeginImplFrame. |
632 state.SetNeedsRedraw(true); | 639 state.SetNeedsRedraw(true); |
633 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); | 640 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); |
634 | 641 |
635 // Move to another frame. This should now draw. | 642 // Move to another frame. This should now draw. |
636 EXPECT_TRUE(state.BeginFrameNeeded()); | 643 EXPECT_TRUE(state.BeginFrameNeeded()); |
637 state.OnBeginImplFrame(BeginFrameArgs::CreateForTesting()); | 644 state.OnBeginImplFrame(BeginFrameArgs::CreateForTesting()); |
638 | 645 |
639 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_ANIMATE); | 646 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_ANIMATE); |
640 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); | 647 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); |
641 | 648 |
642 state.OnBeginImplFrameDeadline(); | 649 state.OnBeginImplFrameDeadline(); |
643 EXPECT_ACTION_UPDATE_STATE( | 650 EXPECT_ACTION_UPDATE_STATE( |
644 SchedulerStateMachine::ACTION_DRAW_AND_SWAP_IF_POSSIBLE); | 651 SchedulerStateMachine::ACTION_DRAW_AND_SWAP_IF_POSSIBLE); |
645 state.DidDrawIfPossibleCompleted(DrawSwapReadbackResult::DRAW_SUCCESS); | 652 state.DidSwapBuffers(); |
| 653 state.DidDrawIfPossibleCompleted(DRAW_SUCCESS); |
| 654 state.DidSwapBuffersComplete(); |
646 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); | 655 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); |
647 | 656 |
648 // We just swapped, so we should proactively request another BeginImplFrame. | 657 // We just swapped, so we should proactively request another BeginImplFrame. |
649 EXPECT_TRUE(state.BeginFrameNeeded()); | 658 EXPECT_TRUE(state.BeginFrameNeeded()); |
650 } | 659 } |
651 | 660 |
652 TEST(SchedulerStateMachineTest, TestNextActionDrawsOnBeginImplFrame) { | 661 TEST(SchedulerStateMachineTest, TestNextActionDrawsOnBeginImplFrame) { |
653 SchedulerSettings default_scheduler_settings; | 662 SchedulerSettings default_scheduler_settings; |
654 | 663 |
655 // When not in BeginImplFrame deadline, or in BeginImplFrame deadline | 664 // When not in BeginImplFrame deadline, or in BeginImplFrame deadline |
(...skipping 226 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
882 EXPECT_ACTION_UPDATE_STATE( | 891 EXPECT_ACTION_UPDATE_STATE( |
883 SchedulerStateMachine::ACTION_SEND_BEGIN_MAIN_FRAME); | 892 SchedulerStateMachine::ACTION_SEND_BEGIN_MAIN_FRAME); |
884 } | 893 } |
885 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); | 894 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); |
886 | 895 |
887 state.OnBeginImplFrameDeadline(); | 896 state.OnBeginImplFrameDeadline(); |
888 | 897 |
889 EXPECT_TRUE(state.active_tree_needs_first_draw()); | 898 EXPECT_TRUE(state.active_tree_needs_first_draw()); |
890 EXPECT_ACTION_UPDATE_STATE( | 899 EXPECT_ACTION_UPDATE_STATE( |
891 SchedulerStateMachine::ACTION_DRAW_AND_SWAP_IF_POSSIBLE); | 900 SchedulerStateMachine::ACTION_DRAW_AND_SWAP_IF_POSSIBLE); |
892 state.DidDrawIfPossibleCompleted(DrawSwapReadbackResult::DRAW_SUCCESS); | 901 state.DidSwapBuffers(); |
| 902 state.DidDrawIfPossibleCompleted(DRAW_SUCCESS); |
| 903 state.DidSwapBuffersComplete(); |
893 if (!main_frame_before_draw_enabled) { | 904 if (!main_frame_before_draw_enabled) { |
894 EXPECT_ACTION_UPDATE_STATE( | 905 EXPECT_ACTION_UPDATE_STATE( |
895 SchedulerStateMachine::ACTION_SEND_BEGIN_MAIN_FRAME); | 906 SchedulerStateMachine::ACTION_SEND_BEGIN_MAIN_FRAME); |
896 } | 907 } |
897 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); | 908 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); |
898 } | 909 } |
899 | 910 |
900 TEST(SchedulerStateMachineTest, TestSetNeedsCommitIsNotLost) { | 911 TEST(SchedulerStateMachineTest, TestSetNeedsCommitIsNotLost) { |
901 bool main_frame_before_draw_enabled = false; | 912 bool main_frame_before_draw_enabled = false; |
902 TestSetNeedsCommitIsNotLost(main_frame_before_draw_enabled); | 913 TestSetNeedsCommitIsNotLost(main_frame_before_draw_enabled); |
(...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
940 EXPECT_TRUE(state.needs_redraw()); | 951 EXPECT_TRUE(state.needs_redraw()); |
941 | 952 |
942 // Expect to do nothing until BeginImplFrame deadline | 953 // Expect to do nothing until BeginImplFrame deadline |
943 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); | 954 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); |
944 | 955 |
945 // At BeginImplFrame deadline, draw. | 956 // At BeginImplFrame deadline, draw. |
946 state.OnBeginImplFrameDeadline(); | 957 state.OnBeginImplFrameDeadline(); |
947 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_ANIMATE); | 958 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_ANIMATE); |
948 EXPECT_ACTION_UPDATE_STATE( | 959 EXPECT_ACTION_UPDATE_STATE( |
949 SchedulerStateMachine::ACTION_DRAW_AND_SWAP_IF_POSSIBLE); | 960 SchedulerStateMachine::ACTION_DRAW_AND_SWAP_IF_POSSIBLE); |
950 state.DidDrawIfPossibleCompleted(DrawSwapReadbackResult::DRAW_SUCCESS); | 961 state.DidSwapBuffers(); |
| 962 state.DidDrawIfPossibleCompleted(DRAW_SUCCESS); |
| 963 state.DidSwapBuffersComplete(); |
951 | 964 |
952 // Should be synchronized, no draw needed, no action needed. | 965 // Should be synchronized, no draw needed, no action needed. |
953 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); | 966 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); |
954 EXPECT_EQ(SchedulerStateMachine::COMMIT_STATE_IDLE, state.CommitState()); | 967 EXPECT_EQ(SchedulerStateMachine::COMMIT_STATE_IDLE, state.CommitState()); |
955 EXPECT_FALSE(state.needs_redraw()); | 968 EXPECT_FALSE(state.needs_redraw()); |
956 } | 969 } |
957 | 970 |
958 TEST(SchedulerStateMachineTest, TestFullCycleWithCommitRequestInbetween) { | 971 TEST(SchedulerStateMachineTest, TestFullCycleWithCommitRequestInbetween) { |
959 SchedulerSettings default_scheduler_settings; | 972 SchedulerSettings default_scheduler_settings; |
960 StateMachine state(default_scheduler_settings); | 973 StateMachine state(default_scheduler_settings); |
(...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
992 EXPECT_TRUE(state.needs_redraw()); | 1005 EXPECT_TRUE(state.needs_redraw()); |
993 | 1006 |
994 // Expect to do nothing until BeginImplFrame deadline. | 1007 // Expect to do nothing until BeginImplFrame deadline. |
995 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); | 1008 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); |
996 | 1009 |
997 // At BeginImplFrame deadline, draw. | 1010 // At BeginImplFrame deadline, draw. |
998 state.OnBeginImplFrameDeadline(); | 1011 state.OnBeginImplFrameDeadline(); |
999 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_ANIMATE); | 1012 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_ANIMATE); |
1000 EXPECT_ACTION_UPDATE_STATE( | 1013 EXPECT_ACTION_UPDATE_STATE( |
1001 SchedulerStateMachine::ACTION_DRAW_AND_SWAP_IF_POSSIBLE); | 1014 SchedulerStateMachine::ACTION_DRAW_AND_SWAP_IF_POSSIBLE); |
1002 state.DidDrawIfPossibleCompleted(DrawSwapReadbackResult::DRAW_SUCCESS); | 1015 state.DidSwapBuffers(); |
| 1016 state.DidDrawIfPossibleCompleted(DRAW_SUCCESS); |
| 1017 state.DidSwapBuffersComplete(); |
1003 | 1018 |
1004 // Should be synchronized, no draw needed, no action needed. | 1019 // Should be synchronized, no draw needed, no action needed. |
1005 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); | 1020 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); |
1006 EXPECT_EQ(SchedulerStateMachine::COMMIT_STATE_IDLE, state.CommitState()); | 1021 EXPECT_EQ(SchedulerStateMachine::COMMIT_STATE_IDLE, state.CommitState()); |
1007 EXPECT_FALSE(state.needs_redraw()); | 1022 EXPECT_FALSE(state.needs_redraw()); |
1008 | 1023 |
1009 // Next BeginImplFrame should initiate second commit. | 1024 // Next BeginImplFrame should initiate second commit. |
1010 state.OnBeginImplFrame(BeginFrameArgs::CreateForTesting()); | 1025 state.OnBeginImplFrame(BeginFrameArgs::CreateForTesting()); |
1011 EXPECT_ACTION_UPDATE_STATE( | 1026 EXPECT_ACTION_UPDATE_STATE( |
1012 SchedulerStateMachine::ACTION_SEND_BEGIN_MAIN_FRAME); | 1027 SchedulerStateMachine::ACTION_SEND_BEGIN_MAIN_FRAME); |
(...skipping 90 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1103 EXPECT_FALSE(state.NeedsCommit()); | 1118 EXPECT_FALSE(state.NeedsCommit()); |
1104 | 1119 |
1105 // Start a new frame; draw because this is the first frame since output | 1120 // Start a new frame; draw because this is the first frame since output |
1106 // surface init'd. | 1121 // surface init'd. |
1107 state.OnBeginImplFrame(BeginFrameArgs::CreateForTesting()); | 1122 state.OnBeginImplFrame(BeginFrameArgs::CreateForTesting()); |
1108 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_ANIMATE); | 1123 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_ANIMATE); |
1109 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); | 1124 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); |
1110 state.OnBeginImplFrameDeadline(); | 1125 state.OnBeginImplFrameDeadline(); |
1111 EXPECT_ACTION_UPDATE_STATE( | 1126 EXPECT_ACTION_UPDATE_STATE( |
1112 SchedulerStateMachine::ACTION_DRAW_AND_SWAP_IF_POSSIBLE); | 1127 SchedulerStateMachine::ACTION_DRAW_AND_SWAP_IF_POSSIBLE); |
| 1128 state.DidSwapBuffers(); |
| 1129 state.DidSwapBuffersComplete(); |
1113 | 1130 |
1114 // Verify another commit doesn't start on another frame either. | 1131 // Verify another commit doesn't start on another frame either. |
1115 EXPECT_EQ(SchedulerStateMachine::COMMIT_STATE_IDLE, state.CommitState()); | 1132 EXPECT_EQ(SchedulerStateMachine::COMMIT_STATE_IDLE, state.CommitState()); |
1116 EXPECT_EQ(SchedulerStateMachine::ACTION_NONE, state.NextAction()); | 1133 EXPECT_EQ(SchedulerStateMachine::ACTION_NONE, state.NextAction()); |
1117 EXPECT_FALSE(state.NeedsCommit()); | 1134 EXPECT_FALSE(state.NeedsCommit()); |
1118 | 1135 |
1119 // Verify another commit can start if requested, though. | 1136 // Verify another commit can start if requested, though. |
1120 state.SetNeedsCommit(); | 1137 state.SetNeedsCommit(); |
1121 EXPECT_EQ(SchedulerStateMachine::COMMIT_STATE_IDLE, state.CommitState()); | 1138 EXPECT_EQ(SchedulerStateMachine::COMMIT_STATE_IDLE, state.CommitState()); |
1122 EXPECT_EQ(SchedulerStateMachine::ACTION_SEND_BEGIN_MAIN_FRAME, | 1139 EXPECT_EQ(SchedulerStateMachine::ACTION_SEND_BEGIN_MAIN_FRAME, |
(...skipping 136 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1259 // Set damage and expect a draw. | 1276 // Set damage and expect a draw. |
1260 state.SetNeedsRedraw(true); | 1277 state.SetNeedsRedraw(true); |
1261 state.OnBeginImplFrame(BeginFrameArgs::CreateForTesting()); | 1278 state.OnBeginImplFrame(BeginFrameArgs::CreateForTesting()); |
1262 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_ANIMATE); | 1279 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_ANIMATE); |
1263 EXPECT_ACTION_UPDATE_STATE( | 1280 EXPECT_ACTION_UPDATE_STATE( |
1264 SchedulerStateMachine::ACTION_SEND_BEGIN_MAIN_FRAME); | 1281 SchedulerStateMachine::ACTION_SEND_BEGIN_MAIN_FRAME); |
1265 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); | 1282 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); |
1266 state.OnBeginImplFrameDeadline(); | 1283 state.OnBeginImplFrameDeadline(); |
1267 EXPECT_ACTION_UPDATE_STATE( | 1284 EXPECT_ACTION_UPDATE_STATE( |
1268 SchedulerStateMachine::ACTION_DRAW_AND_SWAP_IF_POSSIBLE); | 1285 SchedulerStateMachine::ACTION_DRAW_AND_SWAP_IF_POSSIBLE); |
| 1286 state.DidSwapBuffers(); |
| 1287 state.DidSwapBuffersComplete(); |
1269 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); | 1288 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); |
1270 | 1289 |
1271 // Cause a lost context while the BeginMainFrame is in flight. | 1290 // Cause a lost context while the BeginMainFrame is in flight. |
1272 state.DidLoseOutputSurface(); | 1291 state.DidLoseOutputSurface(); |
1273 | 1292 |
1274 // Ask for another draw. Expect nothing happens. | 1293 // Ask for another draw. Expect nothing happens. |
1275 state.SetNeedsRedraw(true); | 1294 state.SetNeedsRedraw(true); |
1276 EXPECT_EQ(SchedulerStateMachine::ACTION_NONE, state.NextAction()); | 1295 EXPECT_EQ(SchedulerStateMachine::ACTION_NONE, state.NextAction()); |
1277 | 1296 |
1278 // Finish the frame, and commit. | 1297 // Finish the frame, and commit. |
(...skipping 45 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1324 // Set damage and expect a draw. | 1343 // Set damage and expect a draw. |
1325 state.SetNeedsRedraw(true); | 1344 state.SetNeedsRedraw(true); |
1326 state.OnBeginImplFrame(BeginFrameArgs::CreateForTesting()); | 1345 state.OnBeginImplFrame(BeginFrameArgs::CreateForTesting()); |
1327 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_ANIMATE); | 1346 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_ANIMATE); |
1328 EXPECT_ACTION_UPDATE_STATE( | 1347 EXPECT_ACTION_UPDATE_STATE( |
1329 SchedulerStateMachine::ACTION_SEND_BEGIN_MAIN_FRAME); | 1348 SchedulerStateMachine::ACTION_SEND_BEGIN_MAIN_FRAME); |
1330 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); | 1349 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); |
1331 state.OnBeginImplFrameDeadline(); | 1350 state.OnBeginImplFrameDeadline(); |
1332 EXPECT_ACTION_UPDATE_STATE( | 1351 EXPECT_ACTION_UPDATE_STATE( |
1333 SchedulerStateMachine::ACTION_DRAW_AND_SWAP_IF_POSSIBLE); | 1352 SchedulerStateMachine::ACTION_DRAW_AND_SWAP_IF_POSSIBLE); |
| 1353 state.DidSwapBuffers(); |
| 1354 state.DidSwapBuffersComplete(); |
1334 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); | 1355 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); |
1335 | 1356 |
1336 // Cause a lost context while the BeginMainFrame is in flight. | 1357 // Cause a lost context while the BeginMainFrame is in flight. |
1337 state.DidLoseOutputSurface(); | 1358 state.DidLoseOutputSurface(); |
1338 | 1359 |
1339 // Ask for another draw and also set needs commit. Expect nothing happens. | 1360 // Ask for another draw and also set needs commit. Expect nothing happens. |
1340 state.SetNeedsRedraw(true); | 1361 state.SetNeedsRedraw(true); |
1341 state.SetNeedsCommit(); | 1362 state.SetNeedsCommit(); |
1342 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); | 1363 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); |
1343 | 1364 |
(...skipping 38 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1382 SchedulerStateMachine::ACTION_SEND_BEGIN_MAIN_FRAME); | 1403 SchedulerStateMachine::ACTION_SEND_BEGIN_MAIN_FRAME); |
1383 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); | 1404 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); |
1384 state.NotifyBeginMainFrameStarted(); | 1405 state.NotifyBeginMainFrameStarted(); |
1385 state.NotifyReadyToCommit(); | 1406 state.NotifyReadyToCommit(); |
1386 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_COMMIT); | 1407 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_COMMIT); |
1387 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); | 1408 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); |
1388 state.OnBeginImplFrameDeadline(); | 1409 state.OnBeginImplFrameDeadline(); |
1389 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_ANIMATE); | 1410 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_ANIMATE); |
1390 EXPECT_ACTION_UPDATE_STATE( | 1411 EXPECT_ACTION_UPDATE_STATE( |
1391 SchedulerStateMachine::ACTION_DRAW_AND_SWAP_IF_POSSIBLE); | 1412 SchedulerStateMachine::ACTION_DRAW_AND_SWAP_IF_POSSIBLE); |
| 1413 state.DidSwapBuffers(); |
| 1414 state.DidSwapBuffersComplete(); |
1392 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); | 1415 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); |
1393 } | 1416 } |
1394 | 1417 |
1395 TEST(SchedulerStateMachineTest, TestFinishAllRenderingWhileContextLost) { | 1418 TEST(SchedulerStateMachineTest, TestFinishAllRenderingWhileContextLost) { |
1396 SchedulerSettings default_scheduler_settings; | 1419 SchedulerSettings default_scheduler_settings; |
1397 StateMachine state(default_scheduler_settings); | 1420 StateMachine state(default_scheduler_settings); |
1398 state.SetCanStart(); | 1421 state.SetCanStart(); |
1399 state.UpdateState(state.NextAction()); | 1422 state.UpdateState(state.NextAction()); |
1400 state.CreateAndInitializeOutputSurfaceWithActivatedCommit(); | 1423 state.CreateAndInitializeOutputSurfaceWithActivatedCommit(); |
1401 state.SetVisible(true); | 1424 state.SetVisible(true); |
(...skipping 252 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1654 } | 1677 } |
1655 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); | 1678 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); |
1656 | 1679 |
1657 state.OnBeginImplFrame(BeginFrameArgs::CreateForTesting()); | 1680 state.OnBeginImplFrame(BeginFrameArgs::CreateForTesting()); |
1658 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_ANIMATE); | 1681 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_ANIMATE); |
1659 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); | 1682 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); |
1660 // Perform the draw & swap of replacement commit. | 1683 // Perform the draw & swap of replacement commit. |
1661 state.OnBeginImplFrameDeadline(); | 1684 state.OnBeginImplFrameDeadline(); |
1662 EXPECT_ACTION_UPDATE_STATE( | 1685 EXPECT_ACTION_UPDATE_STATE( |
1663 SchedulerStateMachine::ACTION_DRAW_AND_SWAP_IF_POSSIBLE); | 1686 SchedulerStateMachine::ACTION_DRAW_AND_SWAP_IF_POSSIBLE); |
| 1687 state.DidSwapBuffers(); |
| 1688 state.DidSwapBuffersComplete(); |
1664 if (!settings.main_frame_before_draw_enabled) { | 1689 if (!settings.main_frame_before_draw_enabled) { |
1665 // New replacement commit is scheduled. | 1690 // New replacement commit is scheduled. |
1666 EXPECT_ACTION_UPDATE_STATE( | 1691 EXPECT_ACTION_UPDATE_STATE( |
1667 SchedulerStateMachine::ACTION_SEND_BEGIN_MAIN_FRAME); | 1692 SchedulerStateMachine::ACTION_SEND_BEGIN_MAIN_FRAME); |
1668 // Forced commit is started. | 1693 // Forced commit is started. |
1669 EXPECT_EQ(SchedulerStateMachine::READBACK_STATE_WAITING_FOR_COMMIT, | 1694 EXPECT_EQ(SchedulerStateMachine::READBACK_STATE_WAITING_FOR_COMMIT, |
1670 state.readback_state()); | 1695 state.readback_state()); |
1671 } | 1696 } |
1672 EXPECT_ACTION_UPDATE_STATE( | 1697 EXPECT_ACTION_UPDATE_STATE( |
1673 SchedulerStateMachine::ACTION_NONE); | 1698 SchedulerStateMachine::ACTION_NONE); |
(...skipping 19 matching lines...) Expand all Loading... |
1693 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_COMMIT); | 1718 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_COMMIT); |
1694 state.NotifyReadyToActivate(); | 1719 state.NotifyReadyToActivate(); |
1695 EXPECT_ACTION_UPDATE_STATE( | 1720 EXPECT_ACTION_UPDATE_STATE( |
1696 SchedulerStateMachine::ACTION_ACTIVATE_PENDING_TREE); | 1721 SchedulerStateMachine::ACTION_ACTIVATE_PENDING_TREE); |
1697 state.OnBeginImplFrame(BeginFrameArgs::CreateForTesting()); | 1722 state.OnBeginImplFrame(BeginFrameArgs::CreateForTesting()); |
1698 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_ANIMATE); | 1723 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_ANIMATE); |
1699 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); | 1724 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); |
1700 state.OnBeginImplFrameDeadline(); | 1725 state.OnBeginImplFrameDeadline(); |
1701 EXPECT_ACTION_UPDATE_STATE( | 1726 EXPECT_ACTION_UPDATE_STATE( |
1702 SchedulerStateMachine::ACTION_DRAW_AND_SWAP_IF_POSSIBLE); | 1727 SchedulerStateMachine::ACTION_DRAW_AND_SWAP_IF_POSSIBLE); |
| 1728 state.DidSwapBuffers(); |
| 1729 state.DidSwapBuffersComplete(); |
1703 EXPECT_EQ(SchedulerStateMachine::READBACK_STATE_IDLE, state.readback_state()); | 1730 EXPECT_EQ(SchedulerStateMachine::READBACK_STATE_IDLE, state.readback_state()); |
1704 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); | 1731 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); |
1705 } | 1732 } |
1706 | 1733 |
1707 // Explicitly test when main_frame_before_draw_enabled = true. | 1734 // Explicitly test when main_frame_before_draw_enabled = true. |
1708 TEST(SchedulerStateMachineTest, | 1735 TEST(SchedulerStateMachineTest, |
1709 ForceCommitWhenReplacementActivationInProgressAndMainFrameEnabled) { | 1736 ForceCommitWhenReplacementActivationInProgressAndMainFrameEnabled) { |
1710 bool main_frame_before_draw_enabled = true; | 1737 bool main_frame_before_draw_enabled = true; |
1711 TestForceCommitWhenReplacementActivationInProgress( | 1738 TestForceCommitWhenReplacementActivationInProgress( |
1712 main_frame_before_draw_enabled); | 1739 main_frame_before_draw_enabled); |
(...skipping 52 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1765 EXPECT_FALSE(state.NeedsCommit()); | 1792 EXPECT_FALSE(state.NeedsCommit()); |
1766 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); | 1793 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); |
1767 | 1794 |
1768 state.OnBeginImplFrame(BeginFrameArgs::CreateForTesting()); | 1795 state.OnBeginImplFrame(BeginFrameArgs::CreateForTesting()); |
1769 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_ANIMATE); | 1796 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_ANIMATE); |
1770 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); | 1797 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); |
1771 // Perform the draw & swap of replacement commit. | 1798 // Perform the draw & swap of replacement commit. |
1772 state.OnBeginImplFrameDeadline(); | 1799 state.OnBeginImplFrameDeadline(); |
1773 EXPECT_ACTION_UPDATE_STATE( | 1800 EXPECT_ACTION_UPDATE_STATE( |
1774 SchedulerStateMachine::ACTION_DRAW_AND_SWAP_IF_POSSIBLE); | 1801 SchedulerStateMachine::ACTION_DRAW_AND_SWAP_IF_POSSIBLE); |
| 1802 state.DidSwapBuffers(); |
| 1803 state.DidSwapBuffersComplete(); |
1775 EXPECT_ACTION_UPDATE_STATE( | 1804 EXPECT_ACTION_UPDATE_STATE( |
1776 SchedulerStateMachine::ACTION_NONE); | 1805 SchedulerStateMachine::ACTION_NONE); |
1777 | 1806 |
1778 // forced commit is started. | 1807 // forced commit is started. |
1779 state.NotifyBeginMainFrameStarted(); | 1808 state.NotifyBeginMainFrameStarted(); |
1780 state.NotifyReadyToCommit(); | 1809 state.NotifyReadyToCommit(); |
1781 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_COMMIT); | 1810 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_COMMIT); |
1782 } | 1811 } |
1783 | 1812 |
1784 TEST(SchedulerStateMachineTest, TestInitialActionsWhenContextLost) { | 1813 TEST(SchedulerStateMachineTest, TestInitialActionsWhenContextLost) { |
(...skipping 49 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1834 state.NotifyBeginMainFrameStarted(); | 1863 state.NotifyBeginMainFrameStarted(); |
1835 state.NotifyReadyToCommit(); | 1864 state.NotifyReadyToCommit(); |
1836 | 1865 |
1837 EXPECT_EQ(SchedulerStateMachine::COMMIT_STATE_READY_TO_COMMIT, | 1866 EXPECT_EQ(SchedulerStateMachine::COMMIT_STATE_READY_TO_COMMIT, |
1838 state.CommitState()); | 1867 state.CommitState()); |
1839 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_COMMIT); | 1868 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_COMMIT); |
1840 | 1869 |
1841 EXPECT_TRUE(state.active_tree_needs_first_draw()); | 1870 EXPECT_TRUE(state.active_tree_needs_first_draw()); |
1842 | 1871 |
1843 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_DRAW_AND_READBACK); | 1872 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_DRAW_AND_READBACK); |
1844 state.DidDrawIfPossibleCompleted(DrawSwapReadbackResult::DRAW_SUCCESS); | 1873 state.DidSwapBuffers(); |
| 1874 state.DidDrawIfPossibleCompleted(DRAW_SUCCESS); |
| 1875 state.DidSwapBuffersComplete(); |
1845 | 1876 |
1846 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); | 1877 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); |
1847 | 1878 |
1848 // Should be waiting for the normal BeginMainFrame. | 1879 // Should be waiting for the normal BeginMainFrame. |
1849 EXPECT_EQ(SchedulerStateMachine::COMMIT_STATE_BEGIN_MAIN_FRAME_SENT, | 1880 EXPECT_EQ(SchedulerStateMachine::COMMIT_STATE_BEGIN_MAIN_FRAME_SENT, |
1850 state.CommitState()); | 1881 state.CommitState()); |
1851 } | 1882 } |
1852 | 1883 |
1853 TEST(SchedulerStateMachineTest, TestImmediateFinishCommitDuringCommit) { | 1884 TEST(SchedulerStateMachineTest, TestImmediateFinishCommitDuringCommit) { |
1854 SchedulerSettings scheduler_settings; | 1885 SchedulerSettings scheduler_settings; |
(...skipping 15 matching lines...) Expand all Loading... |
1870 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); | 1901 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); |
1871 state.NotifyBeginMainFrameStarted(); | 1902 state.NotifyBeginMainFrameStarted(); |
1872 state.NotifyReadyToCommit(); | 1903 state.NotifyReadyToCommit(); |
1873 EXPECT_EQ(SchedulerStateMachine::COMMIT_STATE_READY_TO_COMMIT, | 1904 EXPECT_EQ(SchedulerStateMachine::COMMIT_STATE_READY_TO_COMMIT, |
1874 state.CommitState()); | 1905 state.CommitState()); |
1875 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_COMMIT); | 1906 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_COMMIT); |
1876 | 1907 |
1877 EXPECT_TRUE(state.active_tree_needs_first_draw()); | 1908 EXPECT_TRUE(state.active_tree_needs_first_draw()); |
1878 | 1909 |
1879 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_DRAW_AND_READBACK); | 1910 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_DRAW_AND_READBACK); |
1880 state.DidDrawIfPossibleCompleted(DrawSwapReadbackResult::DRAW_SUCCESS); | 1911 state.DidSwapBuffers(); |
| 1912 state.DidDrawIfPossibleCompleted(DRAW_SUCCESS); |
| 1913 state.DidSwapBuffersComplete(); |
1881 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); | 1914 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); |
1882 | 1915 |
1883 // Should be waiting for the normal BeginMainFrame. | 1916 // Should be waiting for the normal BeginMainFrame. |
1884 EXPECT_EQ(SchedulerStateMachine::COMMIT_STATE_BEGIN_MAIN_FRAME_SENT, | 1917 EXPECT_EQ(SchedulerStateMachine::COMMIT_STATE_BEGIN_MAIN_FRAME_SENT, |
1885 state.CommitState()) | 1918 state.CommitState()) |
1886 << *state.AsValue(); | 1919 << *state.AsValue(); |
1887 } | 1920 } |
1888 | 1921 |
1889 TEST(SchedulerStateMachineTest, ImmediateBeginMainFrameAbortedWhileInvisible) { | 1922 TEST(SchedulerStateMachineTest, ImmediateBeginMainFrameAbortedWhileInvisible) { |
1890 SchedulerSettings scheduler_settings; | 1923 SchedulerSettings scheduler_settings; |
(...skipping 13 matching lines...) Expand all Loading... |
1904 state.NotifyBeginMainFrameStarted(); | 1937 state.NotifyBeginMainFrameStarted(); |
1905 state.NotifyReadyToCommit(); | 1938 state.NotifyReadyToCommit(); |
1906 | 1939 |
1907 EXPECT_EQ(SchedulerStateMachine::COMMIT_STATE_READY_TO_COMMIT, | 1940 EXPECT_EQ(SchedulerStateMachine::COMMIT_STATE_READY_TO_COMMIT, |
1908 state.CommitState()); | 1941 state.CommitState()); |
1909 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_COMMIT); | 1942 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_COMMIT); |
1910 | 1943 |
1911 EXPECT_TRUE(state.active_tree_needs_first_draw()); | 1944 EXPECT_TRUE(state.active_tree_needs_first_draw()); |
1912 | 1945 |
1913 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_DRAW_AND_READBACK); | 1946 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_DRAW_AND_READBACK); |
1914 state.DidDrawIfPossibleCompleted(DrawSwapReadbackResult::DRAW_SUCCESS); | 1947 state.DidSwapBuffers(); |
| 1948 state.DidDrawIfPossibleCompleted(DRAW_SUCCESS); |
| 1949 state.DidSwapBuffersComplete(); |
1915 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); | 1950 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); |
1916 | 1951 |
1917 // Should be waiting for BeginMainFrame. | 1952 // Should be waiting for BeginMainFrame. |
1918 EXPECT_EQ(SchedulerStateMachine::COMMIT_STATE_BEGIN_MAIN_FRAME_SENT, | 1953 EXPECT_EQ(SchedulerStateMachine::COMMIT_STATE_BEGIN_MAIN_FRAME_SENT, |
1919 state.CommitState()) | 1954 state.CommitState()) |
1920 << *state.AsValue(); | 1955 << *state.AsValue(); |
1921 | 1956 |
1922 // Become invisible and abort BeginMainFrame. | 1957 // Become invisible and abort BeginMainFrame. |
1923 state.SetVisible(false); | 1958 state.SetVisible(false); |
1924 state.BeginMainFrameAborted(false); | 1959 state.BeginMainFrameAborted(false); |
(...skipping 20 matching lines...) Expand all Loading... |
1945 state.NotifyBeginMainFrameStarted(); | 1980 state.NotifyBeginMainFrameStarted(); |
1946 state.NotifyReadyToCommit(); | 1981 state.NotifyReadyToCommit(); |
1947 | 1982 |
1948 EXPECT_EQ(SchedulerStateMachine::COMMIT_STATE_READY_TO_COMMIT, | 1983 EXPECT_EQ(SchedulerStateMachine::COMMIT_STATE_READY_TO_COMMIT, |
1949 state.CommitState()); | 1984 state.CommitState()); |
1950 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_COMMIT); | 1985 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_COMMIT); |
1951 | 1986 |
1952 EXPECT_TRUE(state.active_tree_needs_first_draw()); | 1987 EXPECT_TRUE(state.active_tree_needs_first_draw()); |
1953 | 1988 |
1954 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_DRAW_AND_READBACK); | 1989 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_DRAW_AND_READBACK); |
1955 state.DidDrawIfPossibleCompleted(DrawSwapReadbackResult::DRAW_SUCCESS); | 1990 state.DidSwapBuffers(); |
| 1991 state.DidDrawIfPossibleCompleted(DRAW_SUCCESS); |
| 1992 state.DidSwapBuffersComplete(); |
1956 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); | 1993 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); |
1957 } | 1994 } |
1958 | 1995 |
1959 TEST(SchedulerStateMachineTest, ReportIfNotDrawing) { | 1996 TEST(SchedulerStateMachineTest, ReportIfNotDrawing) { |
1960 SchedulerSettings default_scheduler_settings; | 1997 SchedulerSettings default_scheduler_settings; |
1961 StateMachine state(default_scheduler_settings); | 1998 StateMachine state(default_scheduler_settings); |
1962 state.SetCanStart(); | 1999 state.SetCanStart(); |
1963 state.UpdateState(state.NextAction()); | 2000 state.UpdateState(state.NextAction()); |
1964 state.CreateAndInitializeOutputSurfaceWithActivatedCommit(); | 2001 state.CreateAndInitializeOutputSurfaceWithActivatedCommit(); |
1965 | 2002 |
(...skipping 152 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2118 state.SetNeedsAnimate(); | 2155 state.SetNeedsAnimate(); |
2119 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); | 2156 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); |
2120 | 2157 |
2121 state.OnBeginImplFrameDeadline(); | 2158 state.OnBeginImplFrameDeadline(); |
2122 EXPECT_ACTION_UPDATE_STATE( | 2159 EXPECT_ACTION_UPDATE_STATE( |
2123 SchedulerStateMachine::ACTION_DRAW_AND_SWAP_IF_POSSIBLE); | 2160 SchedulerStateMachine::ACTION_DRAW_AND_SWAP_IF_POSSIBLE); |
2124 } | 2161 } |
2125 | 2162 |
2126 } // namespace | 2163 } // namespace |
2127 } // namespace cc | 2164 } // namespace cc |
OLD | NEW |