| Index: cc/scheduler/scheduler_state_machine_unittest.cc
|
| diff --git a/cc/scheduler/scheduler_state_machine_unittest.cc b/cc/scheduler/scheduler_state_machine_unittest.cc
|
| index 458428463ffaf4f6e46e6768fff9404a16ffda67..8b51b6721a5659a012dc1126bc922b70d2263fe1 100644
|
| --- a/cc/scheduler/scheduler_state_machine_unittest.cc
|
| +++ b/cc/scheduler/scheduler_state_machine_unittest.cc
|
| @@ -7,6 +7,10 @@
|
| #include "cc/scheduler/scheduler.h"
|
| #include "testing/gtest/include/gtest/gtest.h"
|
|
|
| +#define EXPECT_ACTION_UPDATE_STATE(action) \
|
| + EXPECT_EQ(action, state.NextAction()) << *state.AsValue(); \
|
| + state.UpdateState(action);
|
| +
|
| namespace cc {
|
|
|
| namespace {
|
| @@ -37,8 +41,22 @@ class StateMachine : public SchedulerStateMachine {
|
| void SetNeedsRedraw(bool b) { needs_redraw_ = b; }
|
| bool NeedsRedraw() const { return needs_redraw_; }
|
|
|
| - void SetNeedsForcedRedraw(bool b) { needs_forced_redraw_ = b; }
|
| - bool NeedsForcedRedraw() const { return needs_forced_redraw_; }
|
| + void SetNeedsForcedRedrawForTimeout(bool b) {
|
| + forced_redraw_state_ = FORCED_REDRAW_STATE_WAITING_FOR_COMMIT;
|
| + commit_state_ = COMMIT_STATE_WAITING_FOR_FIRST_DRAW;
|
| + }
|
| + bool NeedsForcedRedrawForTimeout() const {
|
| + return forced_redraw_state_ != FORCED_REDRAW_STATE_IDLE;
|
| + }
|
| +
|
| + void SetNeedsForcedRedrawForReadback() {
|
| + readback_state_ = READBACK_STATE_WAITING_FOR_DRAW_AND_READBACK;
|
| + commit_state_ = COMMIT_STATE_WAITING_FOR_FIRST_DRAW;
|
| + }
|
| +
|
| + bool NeedsForcedRedrawForReadback() const {
|
| + return readback_state_ != READBACK_STATE_IDLE;
|
| + }
|
|
|
| bool CanDraw() const { return can_draw_; }
|
| bool Visible() const { return visible_; }
|
| @@ -110,9 +128,9 @@ TEST(SchedulerStateMachineTest, TestNextActionBeginsMainFrameIfNeeded) {
|
|
|
| TEST(SchedulerStateMachineTest, TestSetForcedRedrawDoesNotSetsNormalRedraw) {
|
| SchedulerSettings default_scheduler_settings;
|
| - SchedulerStateMachine state(default_scheduler_settings);
|
| + StateMachine state(default_scheduler_settings);
|
| state.SetCanDraw(true);
|
| - state.SetNeedsForcedRedraw();
|
| + state.SetNeedsForcedRedrawForReadback();
|
| EXPECT_FALSE(state.RedrawPending());
|
| EXPECT_TRUE(state.BeginFrameNeededToDrawByImplThread());
|
| }
|
| @@ -132,8 +150,9 @@ TEST(SchedulerStateMachineTest,
|
| state.DidEnterBeginFrame(BeginFrameArgs::CreateForTesting());
|
|
|
| // We're drawing now.
|
| - EXPECT_EQ(SchedulerStateMachine::ACTION_DRAW_IF_POSSIBLE, state.NextAction());
|
| - state.UpdateState(SchedulerStateMachine::ACTION_DRAW_IF_POSSIBLE);
|
| + EXPECT_EQ(SchedulerStateMachine::ACTION_DRAW_AND_SWAP_IF_POSSIBLE,
|
| + state.NextAction());
|
| + state.UpdateState(SchedulerStateMachine::ACTION_DRAW_AND_SWAP_IF_POSSIBLE);
|
| EXPECT_EQ(SchedulerStateMachine::ACTION_NONE, state.NextAction());
|
| EXPECT_FALSE(state.RedrawPending());
|
| EXPECT_FALSE(state.CommitPending());
|
| @@ -164,8 +183,9 @@ TEST(SchedulerStateMachineTest,
|
| state.DidEnterBeginFrame(BeginFrameArgs::CreateForTesting());
|
|
|
| // We're drawing now.
|
| - EXPECT_EQ(SchedulerStateMachine::ACTION_DRAW_IF_POSSIBLE, state.NextAction());
|
| - state.UpdateState(SchedulerStateMachine::ACTION_DRAW_IF_POSSIBLE);
|
| + EXPECT_EQ(SchedulerStateMachine::ACTION_DRAW_AND_SWAP_IF_POSSIBLE,
|
| + state.NextAction());
|
| + state.UpdateState(SchedulerStateMachine::ACTION_DRAW_AND_SWAP_IF_POSSIBLE);
|
| EXPECT_EQ(SchedulerStateMachine::ACTION_NONE, state.NextAction());
|
| EXPECT_FALSE(state.RedrawPending());
|
| EXPECT_FALSE(state.CommitPending());
|
| @@ -204,11 +224,12 @@ TEST(SchedulerStateMachineTest,
|
| state.SetNeedsRedraw(true);
|
| EXPECT_TRUE(state.BeginFrameNeededToDrawByImplThread());
|
| state.DidEnterBeginFrame(BeginFrameArgs::CreateForTesting());
|
| - EXPECT_EQ(SchedulerStateMachine::ACTION_DRAW_IF_POSSIBLE, state.NextAction());
|
| + EXPECT_EQ(SchedulerStateMachine::ACTION_DRAW_AND_SWAP_IF_POSSIBLE,
|
| + state.NextAction());
|
| EXPECT_TRUE(state.RedrawPending());
|
|
|
| // Fail the draw.
|
| - state.UpdateState(SchedulerStateMachine::ACTION_DRAW_IF_POSSIBLE);
|
| + state.UpdateState(SchedulerStateMachine::ACTION_DRAW_AND_SWAP_IF_POSSIBLE);
|
| EXPECT_EQ(SchedulerStateMachine::ACTION_NONE, state.NextAction());
|
| state.DidDrawIfPossibleCompleted(false);
|
| EXPECT_TRUE(state.RedrawPending());
|
| @@ -222,7 +243,8 @@ TEST(SchedulerStateMachineTest,
|
| EXPECT_TRUE(state.RedrawPending());
|
|
|
| // And we should be allowed to draw again.
|
| - EXPECT_EQ(SchedulerStateMachine::ACTION_DRAW_IF_POSSIBLE, state.NextAction());
|
| + EXPECT_EQ(SchedulerStateMachine::ACTION_DRAW_AND_SWAP_IF_POSSIBLE,
|
| + state.NextAction());
|
| }
|
|
|
| TEST(SchedulerStateMachineTest,
|
| @@ -247,11 +269,12 @@ TEST(SchedulerStateMachineTest,
|
| state.SetNeedsRedraw(true);
|
| EXPECT_TRUE(state.BeginFrameNeededToDrawByImplThread());
|
| state.DidEnterBeginFrame(BeginFrameArgs::CreateForTesting());
|
| - EXPECT_EQ(SchedulerStateMachine::ACTION_DRAW_IF_POSSIBLE, state.NextAction());
|
| + EXPECT_EQ(SchedulerStateMachine::ACTION_DRAW_AND_SWAP_IF_POSSIBLE,
|
| + state.NextAction());
|
| EXPECT_TRUE(state.RedrawPending());
|
|
|
| // Fail the draw.
|
| - state.UpdateState(SchedulerStateMachine::ACTION_DRAW_IF_POSSIBLE);
|
| + state.UpdateState(SchedulerStateMachine::ACTION_DRAW_AND_SWAP_IF_POSSIBLE);
|
| EXPECT_EQ(SchedulerStateMachine::ACTION_NONE, state.NextAction());
|
| state.DidDrawIfPossibleCompleted(false);
|
| EXPECT_TRUE(state.RedrawPending());
|
| @@ -259,11 +282,12 @@ TEST(SchedulerStateMachineTest,
|
| EXPECT_TRUE(state.CommitPending());
|
|
|
| // Force a draw.
|
| - state.SetNeedsForcedRedraw(true);
|
| - EXPECT_EQ(SchedulerStateMachine::ACTION_DRAW_FORCED, state.NextAction());
|
| + state.SetNeedsForcedRedrawForTimeout(true);
|
| + EXPECT_EQ(SchedulerStateMachine::ACTION_DRAW_AND_SWAP_FORCED,
|
| + state.NextAction());
|
|
|
| // Do the forced draw.
|
| - state.UpdateState(SchedulerStateMachine::ACTION_DRAW_FORCED);
|
| + state.UpdateState(SchedulerStateMachine::ACTION_DRAW_AND_SWAP_FORCED);
|
| EXPECT_EQ(SchedulerStateMachine::ACTION_NONE, state.NextAction());
|
| EXPECT_FALSE(state.RedrawPending());
|
| // And the commit is still ongoing.
|
| @@ -302,11 +326,12 @@ TEST(SchedulerStateMachineTest,
|
| state.SetNeedsRedraw(true);
|
| EXPECT_TRUE(state.BeginFrameNeededToDrawByImplThread());
|
| state.DidEnterBeginFrame(BeginFrameArgs::CreateForTesting());
|
| - EXPECT_EQ(SchedulerStateMachine::ACTION_DRAW_IF_POSSIBLE, state.NextAction());
|
| + EXPECT_EQ(SchedulerStateMachine::ACTION_DRAW_AND_SWAP_IF_POSSIBLE,
|
| + state.NextAction());
|
| EXPECT_TRUE(state.RedrawPending());
|
|
|
| // Fail the draw.
|
| - state.UpdateState(SchedulerStateMachine::ACTION_DRAW_IF_POSSIBLE);
|
| + state.UpdateState(SchedulerStateMachine::ACTION_DRAW_AND_SWAP_IF_POSSIBLE);
|
| EXPECT_EQ(SchedulerStateMachine::ACTION_NONE, state.NextAction());
|
| state.DidDrawIfPossibleCompleted(false);
|
| EXPECT_TRUE(state.RedrawPending());
|
| @@ -321,7 +346,8 @@ TEST(SchedulerStateMachineTest,
|
| EXPECT_TRUE(state.RedrawPending());
|
|
|
| // The redraw should be forced in this case.
|
| - EXPECT_EQ(SchedulerStateMachine::ACTION_DRAW_FORCED, state.NextAction());
|
| + EXPECT_EQ(SchedulerStateMachine::ACTION_DRAW_AND_SWAP_FORCED,
|
| + state.NextAction());
|
| }
|
|
|
| TEST(SchedulerStateMachineTest,
|
| @@ -338,11 +364,12 @@ TEST(SchedulerStateMachineTest,
|
| state.SetNeedsRedraw(true);
|
| EXPECT_TRUE(state.BeginFrameNeededToDrawByImplThread());
|
| state.DidEnterBeginFrame(BeginFrameArgs::CreateForTesting());
|
| - EXPECT_EQ(SchedulerStateMachine::ACTION_DRAW_IF_POSSIBLE, state.NextAction());
|
| + EXPECT_EQ(SchedulerStateMachine::ACTION_DRAW_AND_SWAP_IF_POSSIBLE,
|
| + state.NextAction());
|
| EXPECT_TRUE(state.RedrawPending());
|
|
|
| // Fail the draw.
|
| - state.UpdateState(SchedulerStateMachine::ACTION_DRAW_IF_POSSIBLE);
|
| + state.UpdateState(SchedulerStateMachine::ACTION_DRAW_AND_SWAP_IF_POSSIBLE);
|
| EXPECT_EQ(SchedulerStateMachine::ACTION_NONE, state.NextAction());
|
| state.DidDrawIfPossibleCompleted(false);
|
| EXPECT_TRUE(state.RedrawPending());
|
| @@ -356,7 +383,8 @@ TEST(SchedulerStateMachineTest,
|
| state.DidEnterBeginFrame(BeginFrameArgs::CreateForTesting());
|
|
|
| // We should try to draw again in the next begin frame on the impl thread.
|
| - EXPECT_EQ(SchedulerStateMachine::ACTION_DRAW_IF_POSSIBLE, state.NextAction());
|
| + EXPECT_EQ(SchedulerStateMachine::ACTION_DRAW_AND_SWAP_IF_POSSIBLE,
|
| + state.NextAction());
|
| }
|
|
|
| TEST(SchedulerStateMachineTest, TestDoestDrawTwiceInSameFrame) {
|
| @@ -370,8 +398,9 @@ TEST(SchedulerStateMachineTest, TestDoestDrawTwiceInSameFrame) {
|
| state.SetNeedsRedraw(true);
|
| EXPECT_TRUE(state.BeginFrameNeededToDrawByImplThread());
|
| state.DidEnterBeginFrame(BeginFrameArgs::CreateForTesting());
|
| - EXPECT_EQ(SchedulerStateMachine::ACTION_DRAW_IF_POSSIBLE, state.NextAction());
|
| - state.UpdateState(SchedulerStateMachine::ACTION_DRAW_IF_POSSIBLE);
|
| + EXPECT_EQ(SchedulerStateMachine::ACTION_DRAW_AND_SWAP_IF_POSSIBLE,
|
| + state.NextAction());
|
| + state.UpdateState(SchedulerStateMachine::ACTION_DRAW_AND_SWAP_IF_POSSIBLE);
|
|
|
| // While still in the same begin frame for the impl thread, set needs redraw
|
| // again. This should not redraw.
|
| @@ -384,8 +413,9 @@ TEST(SchedulerStateMachineTest, TestDoestDrawTwiceInSameFrame) {
|
| EXPECT_TRUE(state.BeginFrameNeededToDrawByImplThread());
|
| state.DidEnterBeginFrame(BeginFrameArgs::CreateForTesting());
|
|
|
| - EXPECT_EQ(SchedulerStateMachine::ACTION_DRAW_IF_POSSIBLE, state.NextAction());
|
| - state.UpdateState(SchedulerStateMachine::ACTION_DRAW_IF_POSSIBLE);
|
| + EXPECT_EQ(SchedulerStateMachine::ACTION_DRAW_AND_SWAP_IF_POSSIBLE,
|
| + state.NextAction());
|
| + state.UpdateState(SchedulerStateMachine::ACTION_DRAW_AND_SWAP_IF_POSSIBLE);
|
| state.DidDrawIfPossibleCompleted(true);
|
| EXPECT_FALSE(state.BeginFrameNeededToDrawByImplThread());
|
| }
|
| @@ -413,12 +443,12 @@ TEST(SchedulerStateMachineTest, TestNextActionDrawsOnBeginFrame) {
|
| }
|
|
|
| // Case 1: needs_commit=false
|
| - EXPECT_NE(SchedulerStateMachine::ACTION_DRAW_IF_POSSIBLE,
|
| + EXPECT_NE(SchedulerStateMachine::ACTION_DRAW_AND_SWAP_IF_POSSIBLE,
|
| state.NextAction());
|
|
|
| // Case 2: needs_commit=true
|
| state.SetNeedsCommit();
|
| - EXPECT_NE(SchedulerStateMachine::ACTION_DRAW_IF_POSSIBLE,
|
| + EXPECT_NE(SchedulerStateMachine::ACTION_DRAW_AND_SWAP_IF_POSSIBLE,
|
| state.NextAction());
|
| }
|
| }
|
| @@ -440,15 +470,16 @@ TEST(SchedulerStateMachineTest, TestNextActionDrawsOnBeginFrame) {
|
| state.SetNeedsRedraw(true);
|
| state.SetVisible(true);
|
| } else {
|
| - state.SetNeedsForcedRedraw(true);
|
| + state.SetNeedsForcedRedrawForReadback();
|
| }
|
|
|
| SchedulerStateMachine::Action expected_action;
|
| if (all_commit_states[i] !=
|
| SchedulerStateMachine::COMMIT_STATE_READY_TO_COMMIT) {
|
| expected_action =
|
| - forced_draw ? SchedulerStateMachine::ACTION_DRAW_FORCED
|
| - : SchedulerStateMachine::ACTION_DRAW_IF_POSSIBLE;
|
| + forced_draw
|
| + ? SchedulerStateMachine::ACTION_DRAW_AND_SWAP_FORCED
|
| + : SchedulerStateMachine::ACTION_DRAW_AND_SWAP_IF_POSSIBLE;
|
| } else {
|
| expected_action = SchedulerStateMachine::ACTION_COMMIT;
|
| }
|
| @@ -480,17 +511,16 @@ TEST(SchedulerStateMachineTest, TestNoCommitStatesRedrawWhenInvisible) {
|
| state.SetCommitState(all_commit_states[i]);
|
| state.SetVisible(false);
|
| state.SetNeedsRedraw(true);
|
| - state.SetNeedsForcedRedraw(false);
|
| if (j == 1)
|
| state.DidEnterBeginFrame(BeginFrameArgs::CreateForTesting());
|
|
|
| // Case 1: needs_commit=false.
|
| - EXPECT_NE(SchedulerStateMachine::ACTION_DRAW_IF_POSSIBLE,
|
| + EXPECT_NE(SchedulerStateMachine::ACTION_DRAW_AND_SWAP_IF_POSSIBLE,
|
| state.NextAction());
|
|
|
| // Case 2: needs_commit=true.
|
| state.SetNeedsCommit();
|
| - EXPECT_NE(SchedulerStateMachine::ACTION_DRAW_IF_POSSIBLE,
|
| + EXPECT_NE(SchedulerStateMachine::ACTION_DRAW_AND_SWAP_IF_POSSIBLE,
|
| state.NextAction());
|
| }
|
| }
|
| @@ -511,12 +541,11 @@ TEST(SchedulerStateMachineTest, TestCanRedraw_StopsDraw) {
|
| state.SetCommitState(all_commit_states[i]);
|
| state.SetVisible(false);
|
| state.SetNeedsRedraw(true);
|
| - state.SetNeedsForcedRedraw(false);
|
| if (j == 1)
|
| state.DidEnterBeginFrame(BeginFrameArgs::CreateForTesting());
|
|
|
| state.SetCanDraw(false);
|
| - EXPECT_NE(SchedulerStateMachine::ACTION_DRAW_IF_POSSIBLE,
|
| + EXPECT_NE(SchedulerStateMachine::ACTION_DRAW_AND_SWAP_IF_POSSIBLE,
|
| state.NextAction());
|
| }
|
| }
|
| @@ -576,10 +605,11 @@ TEST(SchedulerStateMachineTest, TestsetNeedsCommitIsNotLost) {
|
|
|
| // Commit and make sure we draw on next BeginFrame
|
| state.UpdateState(SchedulerStateMachine::ACTION_COMMIT);
|
| - EXPECT_EQ(SchedulerStateMachine::ACTION_DRAW_IF_POSSIBLE, state.NextAction());
|
| + EXPECT_EQ(SchedulerStateMachine::ACTION_DRAW_AND_SWAP_IF_POSSIBLE,
|
| + state.NextAction());
|
| EXPECT_EQ(SchedulerStateMachine::COMMIT_STATE_WAITING_FOR_FIRST_DRAW,
|
| state.CommitState());
|
| - state.UpdateState(SchedulerStateMachine::ACTION_DRAW_IF_POSSIBLE);
|
| + state.UpdateState(SchedulerStateMachine::ACTION_DRAW_AND_SWAP_IF_POSSIBLE);
|
| state.DidDrawIfPossibleCompleted(true);
|
|
|
| // Verify that another commit will begin.
|
| @@ -627,8 +657,9 @@ TEST(SchedulerStateMachineTest, TestFullCycle) {
|
|
|
| // At BeginFrame, draw.
|
| state.DidEnterBeginFrame(BeginFrameArgs::CreateForTesting());
|
| - EXPECT_EQ(SchedulerStateMachine::ACTION_DRAW_IF_POSSIBLE, state.NextAction());
|
| - state.UpdateState(SchedulerStateMachine::ACTION_DRAW_IF_POSSIBLE);
|
| + EXPECT_EQ(SchedulerStateMachine::ACTION_DRAW_AND_SWAP_IF_POSSIBLE,
|
| + state.NextAction());
|
| + state.UpdateState(SchedulerStateMachine::ACTION_DRAW_AND_SWAP_IF_POSSIBLE);
|
| state.DidDrawIfPossibleCompleted(true);
|
| state.DidLeaveBeginFrame();
|
|
|
| @@ -681,8 +712,9 @@ TEST(SchedulerStateMachineTest, TestFullCycleWithCommitRequestInbetween) {
|
|
|
| // At BeginFrame, draw.
|
| state.DidEnterBeginFrame(BeginFrameArgs::CreateForTesting());
|
| - EXPECT_EQ(SchedulerStateMachine::ACTION_DRAW_IF_POSSIBLE, state.NextAction());
|
| - state.UpdateState(SchedulerStateMachine::ACTION_DRAW_IF_POSSIBLE);
|
| + EXPECT_EQ(SchedulerStateMachine::ACTION_DRAW_AND_SWAP_IF_POSSIBLE,
|
| + state.NextAction());
|
| + state.UpdateState(SchedulerStateMachine::ACTION_DRAW_AND_SWAP_IF_POSSIBLE);
|
| state.DidDrawIfPossibleCompleted(true);
|
| state.DidLeaveBeginFrame();
|
|
|
| @@ -787,7 +819,8 @@ TEST(SchedulerStateMachineTest, AbortBeginFrameAndCancelCommit) {
|
| // Start a new frame; draw because this is the first frame since output
|
| // surface init'd.
|
| state.DidEnterBeginFrame(BeginFrameArgs::CreateForTesting());
|
| - EXPECT_EQ(SchedulerStateMachine::ACTION_DRAW_IF_POSSIBLE, state.NextAction())
|
| + EXPECT_EQ(SchedulerStateMachine::ACTION_DRAW_AND_SWAP_IF_POSSIBLE,
|
| + state.NextAction())
|
| << *state.AsValue();
|
| state.DidLeaveBeginFrame();
|
|
|
| @@ -896,7 +929,8 @@ TEST(SchedulerStateMachineTest,
|
| // Once the context is recreated, whether we draw should be based on
|
| // SetCanDraw.
|
| state.DidEnterBeginFrame(BeginFrameArgs::CreateForTesting());
|
| - EXPECT_EQ(SchedulerStateMachine::ACTION_DRAW_IF_POSSIBLE, state.NextAction());
|
| + EXPECT_EQ(SchedulerStateMachine::ACTION_DRAW_AND_SWAP_IF_POSSIBLE,
|
| + state.NextAction());
|
| state.SetCanDraw(false);
|
| EXPECT_EQ(SchedulerStateMachine::ACTION_DRAW_AND_SWAP_ABORT,
|
| state.NextAction());
|
| @@ -922,7 +956,8 @@ TEST(SchedulerStateMachineTest, TestContextLostWhileCommitInProgress) {
|
| // Set damage and expect a draw.
|
| state.SetNeedsRedraw(true);
|
| state.DidEnterBeginFrame(BeginFrameArgs::CreateForTesting());
|
| - EXPECT_EQ(SchedulerStateMachine::ACTION_DRAW_IF_POSSIBLE, state.NextAction());
|
| + EXPECT_EQ(SchedulerStateMachine::ACTION_DRAW_AND_SWAP_IF_POSSIBLE,
|
| + state.NextAction());
|
| state.UpdateState(state.NextAction());
|
| state.DidLeaveBeginFrame();
|
|
|
| @@ -975,7 +1010,8 @@ TEST(SchedulerStateMachineTest,
|
| // Set damage and expect a draw.
|
| state.SetNeedsRedraw(true);
|
| state.DidEnterBeginFrame(BeginFrameArgs::CreateForTesting());
|
| - EXPECT_EQ(SchedulerStateMachine::ACTION_DRAW_IF_POSSIBLE, state.NextAction());
|
| + EXPECT_EQ(SchedulerStateMachine::ACTION_DRAW_AND_SWAP_IF_POSSIBLE,
|
| + state.NextAction());
|
| state.UpdateState(state.NextAction());
|
| state.DidLeaveBeginFrame();
|
|
|
| @@ -1022,15 +1058,13 @@ TEST(SchedulerStateMachineTest, TestFinishAllRenderingWhileContextLost) {
|
| // Cause a lost context lost.
|
| state.DidLoseOutputSurface();
|
|
|
| - // Ask a forced redraw and verify it ocurrs.
|
| - state.SetNeedsForcedRedraw(true);
|
| + // Ask a forced redraw and verify it ocurrs, even with a lost context.
|
| + state.SetNeedsForcedRedrawForReadback();
|
| state.DidEnterBeginFrame(BeginFrameArgs::CreateForTesting());
|
| - EXPECT_EQ(SchedulerStateMachine::ACTION_DRAW_FORCED, state.NextAction());
|
| + EXPECT_EQ(SchedulerStateMachine::ACTION_DRAW_AND_SWAP_FORCED,
|
| + state.NextAction());
|
| state.DidLeaveBeginFrame();
|
|
|
| - // Clear the forced redraw bit.
|
| - state.SetNeedsForcedRedraw(false);
|
| -
|
| // Expect to be told to begin context recreation, independent of
|
| // BeginFrame state
|
| EXPECT_EQ(SchedulerStateMachine::ACTION_BEGIN_OUTPUT_SURFACE_CREATION,
|
| @@ -1038,9 +1072,10 @@ TEST(SchedulerStateMachineTest, TestFinishAllRenderingWhileContextLost) {
|
| state.UpdateState(state.NextAction());
|
|
|
| // Ask a forced redraw and verify it ocurrs.
|
| - state.SetNeedsForcedRedraw(true);
|
| + state.SetNeedsForcedRedrawForReadback();
|
| state.DidEnterBeginFrame(BeginFrameArgs::CreateForTesting());
|
| - EXPECT_EQ(SchedulerStateMachine::ACTION_DRAW_FORCED, state.NextAction());
|
| + EXPECT_EQ(SchedulerStateMachine::ACTION_DRAW_AND_SWAP_FORCED,
|
| + state.NextAction());
|
| state.DidLeaveBeginFrame();
|
| }
|
|
|
| @@ -1076,7 +1111,7 @@ TEST(SchedulerStateMachineTest,
|
| state.DidCreateAndInitializeOutputSurface();
|
| state.SetVisible(false);
|
| state.SetNeedsCommit();
|
| - state.SetNeedsForcedCommit();
|
| + state.SetNeedsForcedCommitForReadback();
|
| EXPECT_EQ(SchedulerStateMachine::ACTION_SEND_BEGIN_FRAME_TO_MAIN_THREAD,
|
| state.NextAction());
|
| }
|
| @@ -1088,7 +1123,7 @@ TEST(SchedulerStateMachineTest,
|
| state.SetVisible(true);
|
| state.SetCanDraw(true);
|
| state.SetNeedsCommit();
|
| - state.SetNeedsForcedCommit();
|
| + state.SetNeedsForcedCommitForReadback();
|
| EXPECT_EQ(SchedulerStateMachine::ACTION_SEND_BEGIN_FRAME_TO_MAIN_THREAD,
|
| state.NextAction());
|
| }
|
| @@ -1125,13 +1160,13 @@ TEST(SchedulerStateMachineTest, TestFinishCommitWhenForcedCommitInProgress) {
|
| state.SetVisible(false);
|
| state.SetCommitState(SchedulerStateMachine::COMMIT_STATE_FRAME_IN_PROGRESS);
|
| state.SetNeedsCommit();
|
| - state.SetNeedsForcedCommit();
|
| + state.SetNeedsForcedCommitForReadback();
|
|
|
| state.FinishCommit();
|
| EXPECT_EQ(SchedulerStateMachine::ACTION_COMMIT, state.NextAction());
|
| state.UpdateState(state.NextAction());
|
|
|
| - EXPECT_EQ(SchedulerStateMachine::COMMIT_STATE_WAITING_FOR_FIRST_FORCED_DRAW,
|
| + EXPECT_EQ(SchedulerStateMachine::COMMIT_STATE_WAITING_FOR_FIRST_DRAW,
|
| state.CommitState());
|
|
|
| // If we are waiting for forced draw then we know a begin frame is already
|
| @@ -1155,7 +1190,6 @@ TEST(SchedulerStateMachineTest, TestInitialActionsWhenContextLost) {
|
| EXPECT_EQ(SchedulerStateMachine::ACTION_BEGIN_OUTPUT_SURFACE_CREATION,
|
| state.NextAction()) << *state.AsValue();
|
|
|
| -
|
| // We should not send a BeginFrame to them main thread when we are invisible
|
| // even if we've lost the output surface since the main thread will
|
| // just abort anyway.
|
| @@ -1166,7 +1200,7 @@ TEST(SchedulerStateMachineTest, TestInitialActionsWhenContextLost) {
|
| // If there is a forced commit, however, we could be blocking a readback
|
| // on the main thread, so we need to unblock it before we can get our
|
| // output surface, even if we are not visible.
|
| - state.SetNeedsForcedCommit();
|
| + state.SetNeedsForcedCommitForReadback();
|
| EXPECT_EQ(SchedulerStateMachine::ACTION_SEND_BEGIN_FRAME_TO_MAIN_THREAD,
|
| state.NextAction()) << *state.AsValue();
|
| }
|
| @@ -1180,26 +1214,23 @@ TEST(SchedulerStateMachineTest, TestImmediateFinishCommit) {
|
| state.SetVisible(true);
|
| state.SetCanDraw(true);
|
|
|
| - // Schedule a forced frame, commit it, draw it.
|
| + // Schedule a readback, commit it, draw it.
|
| state.SetNeedsCommit();
|
| - state.SetNeedsForcedCommit();
|
| - state.UpdateState(state.NextAction());
|
| + state.SetNeedsForcedCommitForReadback();
|
| + EXPECT_ACTION_UPDATE_STATE(
|
| + SchedulerStateMachine::ACTION_SEND_BEGIN_FRAME_TO_MAIN_THREAD);
|
| state.FinishCommit();
|
| EXPECT_EQ(SchedulerStateMachine::ACTION_COMMIT, state.NextAction());
|
| EXPECT_EQ(SchedulerStateMachine::COMMIT_STATE_READY_TO_COMMIT,
|
| state.CommitState());
|
| - state.UpdateState(state.NextAction());
|
| + EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_COMMIT);
|
|
|
| - EXPECT_EQ(SchedulerStateMachine::COMMIT_STATE_WAITING_FOR_FIRST_FORCED_DRAW,
|
| + EXPECT_EQ(SchedulerStateMachine::COMMIT_STATE_WAITING_FOR_FIRST_DRAW,
|
| state.CommitState());
|
|
|
| - state.DidEnterBeginFrame(BeginFrameArgs::CreateForTesting());
|
| - EXPECT_EQ(SchedulerStateMachine::ACTION_NONE, state.NextAction());
|
| - state.SetNeedsForcedRedraw(true);
|
| - EXPECT_EQ(SchedulerStateMachine::ACTION_DRAW_FORCED, state.NextAction());
|
| - state.UpdateState(state.NextAction());
|
| + EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_DRAW_AND_READBACK);
|
| state.DidDrawIfPossibleCompleted(true);
|
| - state.DidLeaveBeginFrame();
|
| + EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE);
|
|
|
| // Should be waiting for the normal begin frame from the main thread.
|
| EXPECT_EQ(SchedulerStateMachine::COMMIT_STATE_FRAME_IN_PROGRESS,
|
| @@ -1211,34 +1242,31 @@ TEST(SchedulerStateMachineTest, TestImmediateFinishCommitDuringCommit) {
|
| StateMachine state(default_scheduler_settings);
|
| state.SetCanStart();
|
| state.UpdateState(state.NextAction());
|
| - state.DidCreateAndInitializeOutputSurface();
|
| + state.CreateAndInitializeOutputSurfaceWithActivatedCommit();
|
| state.SetVisible(true);
|
| state.SetCanDraw(true);
|
|
|
| // Start a normal commit.
|
| state.SetNeedsCommit();
|
| - state.UpdateState(state.NextAction());
|
| + EXPECT_ACTION_UPDATE_STATE(
|
| + SchedulerStateMachine::ACTION_SEND_BEGIN_FRAME_TO_MAIN_THREAD);
|
|
|
| - // Schedule a forced frame, commit it, draw it.
|
| + // Schedule a readback, commit it, draw it.
|
| state.SetNeedsCommit();
|
| - state.SetNeedsForcedCommit();
|
| - state.UpdateState(state.NextAction());
|
| + state.SetNeedsForcedCommitForReadback();
|
| + EXPECT_ACTION_UPDATE_STATE(
|
| + SchedulerStateMachine::ACTION_NONE);
|
| state.FinishCommit();
|
| - EXPECT_EQ(SchedulerStateMachine::ACTION_COMMIT, state.NextAction());
|
| EXPECT_EQ(SchedulerStateMachine::COMMIT_STATE_READY_TO_COMMIT,
|
| state.CommitState());
|
| - state.UpdateState(state.NextAction());
|
| + EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_COMMIT);
|
|
|
| - EXPECT_EQ(SchedulerStateMachine::COMMIT_STATE_WAITING_FOR_FIRST_FORCED_DRAW,
|
| + EXPECT_EQ(SchedulerStateMachine::COMMIT_STATE_WAITING_FOR_FIRST_DRAW,
|
| state.CommitState());
|
|
|
| - state.DidEnterBeginFrame(BeginFrameArgs::CreateForTesting());
|
| - EXPECT_EQ(SchedulerStateMachine::ACTION_NONE, state.NextAction());
|
| - state.SetNeedsForcedRedraw(true);
|
| - EXPECT_EQ(SchedulerStateMachine::ACTION_DRAW_FORCED, state.NextAction());
|
| - state.UpdateState(state.NextAction());
|
| + EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_DRAW_AND_READBACK);
|
| state.DidDrawIfPossibleCompleted(true);
|
| - state.DidLeaveBeginFrame();
|
| + EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE);
|
|
|
| // Should be waiting for the normal begin frame from the main thread.
|
| EXPECT_EQ(SchedulerStateMachine::COMMIT_STATE_FRAME_IN_PROGRESS,
|
| @@ -1252,33 +1280,30 @@ TEST(SchedulerStateMachineTest,
|
| StateMachine state(default_scheduler_settings);
|
| state.SetCanStart();
|
| state.UpdateState(state.NextAction());
|
| - state.DidCreateAndInitializeOutputSurface();
|
| + state.CreateAndInitializeOutputSurfaceWithActivatedCommit();
|
| state.SetVisible(true);
|
| state.SetCanDraw(true);
|
|
|
| state.SetNeedsCommit();
|
| - state.UpdateState(state.NextAction());
|
| + EXPECT_ACTION_UPDATE_STATE(
|
| + SchedulerStateMachine::ACTION_SEND_BEGIN_FRAME_TO_MAIN_THREAD);
|
|
|
| state.SetNeedsCommit();
|
| - state.SetNeedsForcedCommit();
|
| - state.UpdateState(state.NextAction());
|
| + state.SetNeedsForcedCommitForReadback();
|
| + EXPECT_ACTION_UPDATE_STATE(
|
| + SchedulerStateMachine::ACTION_NONE);
|
| state.FinishCommit();
|
|
|
| - EXPECT_EQ(SchedulerStateMachine::ACTION_COMMIT, state.NextAction());
|
| EXPECT_EQ(SchedulerStateMachine::COMMIT_STATE_READY_TO_COMMIT,
|
| state.CommitState());
|
| - state.UpdateState(state.NextAction());
|
| + EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_COMMIT);
|
|
|
| - EXPECT_EQ(SchedulerStateMachine::COMMIT_STATE_WAITING_FOR_FIRST_FORCED_DRAW,
|
| + EXPECT_EQ(SchedulerStateMachine::COMMIT_STATE_WAITING_FOR_FIRST_DRAW,
|
| state.CommitState());
|
|
|
| - state.DidEnterBeginFrame(BeginFrameArgs::CreateForTesting());
|
| - EXPECT_EQ(SchedulerStateMachine::ACTION_NONE, state.NextAction());
|
| - state.SetNeedsForcedRedraw(true);
|
| - EXPECT_EQ(SchedulerStateMachine::ACTION_DRAW_FORCED, state.NextAction());
|
| - state.UpdateState(state.NextAction());
|
| + EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_DRAW_AND_READBACK);
|
| state.DidDrawIfPossibleCompleted(true);
|
| - state.DidLeaveBeginFrame();
|
| + EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE);
|
|
|
| // Should be waiting for the main thread's begin frame.
|
| EXPECT_EQ(SchedulerStateMachine::COMMIT_STATE_FRAME_IN_PROGRESS,
|
| @@ -1299,7 +1324,7 @@ TEST(SchedulerStateMachineTest, ImmediateFinishCommitWhileCantDraw) {
|
| StateMachine state(default_scheduler_settings);
|
| state.SetCanStart();
|
| state.UpdateState(state.NextAction());
|
| - state.DidCreateAndInitializeOutputSurface();
|
| + state.CreateAndInitializeOutputSurfaceWithActivatedCommit();
|
| state.SetVisible(true);
|
| state.SetCanDraw(false);
|
|
|
| @@ -1307,25 +1332,20 @@ TEST(SchedulerStateMachineTest, ImmediateFinishCommitWhileCantDraw) {
|
| state.UpdateState(state.NextAction());
|
|
|
| state.SetNeedsCommit();
|
| - state.SetNeedsForcedCommit();
|
| + state.SetNeedsForcedCommitForReadback();
|
| state.UpdateState(state.NextAction());
|
| state.FinishCommit();
|
|
|
| - EXPECT_EQ(SchedulerStateMachine::ACTION_COMMIT, state.NextAction());
|
| EXPECT_EQ(SchedulerStateMachine::COMMIT_STATE_READY_TO_COMMIT,
|
| state.CommitState());
|
| - state.UpdateState(state.NextAction());
|
| + EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_COMMIT);
|
|
|
| - EXPECT_EQ(SchedulerStateMachine::COMMIT_STATE_WAITING_FOR_FIRST_FORCED_DRAW,
|
| + EXPECT_EQ(SchedulerStateMachine::COMMIT_STATE_WAITING_FOR_FIRST_DRAW,
|
| state.CommitState());
|
|
|
| - state.DidEnterBeginFrame(BeginFrameArgs::CreateForTesting());
|
| - EXPECT_EQ(SchedulerStateMachine::ACTION_NONE, state.NextAction());
|
| - state.SetNeedsForcedRedraw(true);
|
| - EXPECT_EQ(SchedulerStateMachine::ACTION_DRAW_FORCED, state.NextAction());
|
| - state.UpdateState(state.NextAction());
|
| + EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_DRAW_AND_READBACK);
|
| state.DidDrawIfPossibleCompleted(true);
|
| - state.DidLeaveBeginFrame();
|
| + EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE);
|
| }
|
|
|
| TEST(SchedulerStateMachineTest, ReportIfNotDrawing) {
|
|
|