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) { |