diff options
author | Simon Hausmann <simon.hausmann@nokia.com> | 2012-09-10 19:10:20 +0200 |
---|---|---|
committer | Simon Hausmann <simon.hausmann@nokia.com> | 2012-09-10 19:10:20 +0200 |
commit | 284837daa07b29d6a63a748544a90b1f5842ac5c (patch) | |
tree | ecd258180bde91fe741e0cfd2638beb3c6da7e8e /Source/WebKit/chromium/tests/CCSchedulerStateMachineTest.cpp | |
parent | 2e2ba8ff45915f40ed3e014101269c175f2a89a0 (diff) | |
download | qtwebkit-284837daa07b29d6a63a748544a90b1f5842ac5c.tar.gz |
Imported WebKit commit 68645295d2e3e09af2c942f092556f06aa5f8b0d (http://svn.webkit.org/repository/webkit/trunk@128073)
New snapshot
Diffstat (limited to 'Source/WebKit/chromium/tests/CCSchedulerStateMachineTest.cpp')
-rw-r--r-- | Source/WebKit/chromium/tests/CCSchedulerStateMachineTest.cpp | 71 |
1 files changed, 66 insertions, 5 deletions
diff --git a/Source/WebKit/chromium/tests/CCSchedulerStateMachineTest.cpp b/Source/WebKit/chromium/tests/CCSchedulerStateMachineTest.cpp index 563c2c04c..7454c9eda 100644 --- a/Source/WebKit/chromium/tests/CCSchedulerStateMachineTest.cpp +++ b/Source/WebKit/chromium/tests/CCSchedulerStateMachineTest.cpp @@ -136,6 +136,7 @@ TEST(CCSchedulerStateMachineTest, TestNextActionBeginsFrameIfNeeded) TEST(CCSchedulerStateMachineTest, TestSetForcedRedrawDoesNotSetsNormalRedraw) { CCSchedulerStateMachine state; + state.setCanDraw(true); state.setNeedsForcedRedraw(); EXPECT_FALSE(state.redrawPending()); EXPECT_TRUE(state.vsyncCallbackNeeded()); @@ -146,6 +147,7 @@ TEST(CCSchedulerStateMachineTest, TestFailedDrawSetsNeedsCommitAndDoesNotDrawAga CCSchedulerStateMachine state; state.setCanBeginFrame(true); state.setVisible(true); + state.setCanDraw(true); state.setNeedsRedraw(); EXPECT_TRUE(state.redrawPending()); EXPECT_TRUE(state.vsyncCallbackNeeded()); @@ -171,6 +173,7 @@ TEST(CCSchedulerStateMachineTest, TestSetNeedsRedrawDuringFailedDrawDoesNotRemov CCSchedulerStateMachine state; state.setCanBeginFrame(true); state.setVisible(true); + state.setCanDraw(true); state.setNeedsRedraw(); EXPECT_TRUE(state.redrawPending()); EXPECT_TRUE(state.vsyncCallbackNeeded()); @@ -199,6 +202,7 @@ TEST(CCSchedulerStateMachineTest, TestCommitAfterFailedDrawAllowsDrawInSameFrame CCSchedulerStateMachine state; state.setCanBeginFrame(true); state.setVisible(true); + state.setCanDraw(true); // Start a commit. state.setNeedsCommit(); @@ -239,6 +243,7 @@ TEST(CCSchedulerStateMachineTest, TestCommitAfterFailedAndSuccessfulDrawDoesNotA CCSchedulerStateMachine state; state.setCanBeginFrame(true); state.setVisible(true); + state.setCanDraw(true); // Start a commit. state.setNeedsCommit(); @@ -290,6 +295,7 @@ TEST(CCSchedulerStateMachineTest, TestFailedDrawsWillEventuallyForceADrawAfterTh CCSchedulerStateMachine state; state.setCanBeginFrame(true); state.setVisible(true); + state.setCanDraw(true); state.setMaximumNumberOfFailedDrawsBeforeDrawIsForced(1); // Start a commit. @@ -332,6 +338,7 @@ TEST(CCSchedulerStateMachineTest, TestFailedDrawIsRetriedNextVSync) CCSchedulerStateMachine state; state.setCanBeginFrame(true); state.setVisible(true); + state.setCanDraw(true); // Start a draw. state.setNeedsRedraw(); @@ -361,6 +368,7 @@ TEST(CCSchedulerStateMachineTest, TestDoestDrawTwiceInSameFrame) { CCSchedulerStateMachine state; state.setVisible(true); + state.setCanDraw(true); state.setNeedsRedraw(); EXPECT_TRUE(state.vsyncCallbackNeeded()); state.didEnterVSync(); @@ -413,6 +421,7 @@ TEST(CCSchedulerStateMachineTest, TestNextActionDrawsOnVSync) for (size_t i = 0; i < numCommitStates; ++i) { for (unsigned j = 0; j < 2; ++j) { StateMachine state; + state.setCanDraw(true); state.setCommitState(allCommitStates[i]); bool forcedDraw = j; if (!forcedDraw) { @@ -525,6 +534,28 @@ TEST(CCSchedulerStateMachineTest, TestCanRedrawWithWaitingForFirstDrawMakesProgr EXPECT_EQ(CCSchedulerStateMachine::ACTION_BEGIN_FRAME, state.nextAction()); } +TEST(CCSchedulerStateMachineTest, TestVsyncCallbackNeededOnCanDrawAndResourceUpdates) +{ + StateMachine state; + state.setCommitState(CCSchedulerStateMachine::COMMIT_STATE_WAITING_FOR_FIRST_DRAW); + state.setCanBeginFrame(true); + state.setNeedsCommit(true); + state.setNeedsRedraw(true); + state.setUpdateMoreResourcesPending(false); + state.setVisible(true); + state.setCanDraw(false); + EXPECT_FALSE(state.vsyncCallbackNeeded()); + + state.setUpdateMoreResourcesPending(true); + EXPECT_TRUE(state.vsyncCallbackNeeded()); + + state.setUpdateMoreResourcesPending(false); + EXPECT_FALSE(state.vsyncCallbackNeeded()); + + state.setCanDraw(true); + EXPECT_TRUE(state.vsyncCallbackNeeded()); +} + TEST(CCSchedulerStateMachineTest, TestUpdates_NoRedraw_OneRoundOfUpdates) { StateMachine state; @@ -532,6 +563,7 @@ TEST(CCSchedulerStateMachineTest, TestUpdates_NoRedraw_OneRoundOfUpdates) state.setNeedsRedraw(false); state.setUpdateMoreResourcesPending(false); state.setVisible(true); + state.setCanDraw(true); // Verify we begin update, both for vsync and not vsync. EXPECT_EQ(CCSchedulerStateMachine::ACTION_BEGIN_UPDATE_MORE_RESOURCES, state.nextAction()); @@ -560,6 +592,7 @@ TEST(CCSchedulerStateMachineTest, TestUpdates_NoRedraw_TwoRoundsOfUpdates) state.setNeedsRedraw(false); state.setUpdateMoreResourcesPending(false); state.setVisible(true); + state.setCanDraw(true); // Verify the update begins, both for vsync and not vsync. state.didEnterVSync(); @@ -599,6 +632,7 @@ TEST(CCSchedulerStateMachineTest, TestUpdates_NoRedraw_TwoRoundsOfUpdates) TEST(CCSchedulerStateMachineTest, TestVSyncNeededWhenUpdatesPendingButInvisible) { StateMachine state; + state.setCanDraw(true); state.setCommitState(CCSchedulerStateMachine::COMMIT_STATE_UPDATING_RESOURCES); state.setNeedsRedraw(false); state.setVisible(false); @@ -616,6 +650,7 @@ TEST(CCSchedulerStateMachineTest, TestUpdates_WithRedraw_OneRoundOfUpdates) state.setNeedsRedraw(true); state.setUpdateMoreResourcesPending(false); state.setVisible(true); + state.setCanDraw(true); EXPECT_EQ(CCSchedulerStateMachine::ACTION_BEGIN_UPDATE_MORE_RESOURCES, state.nextAction()); // Begin an update. @@ -663,6 +698,7 @@ TEST(CCSchedulerStateMachineTest, TestSetNeedsCommitIsNotLost) state.setCanBeginFrame(true); state.setNeedsCommit(true); state.setVisible(true); + state.setCanDraw(true); // Begin the frame. EXPECT_EQ(CCSchedulerStateMachine::ACTION_BEGIN_FRAME, state.nextAction()); @@ -705,6 +741,7 @@ TEST(CCSchedulerStateMachineTest, TestFullCycle) StateMachine state; state.setCanBeginFrame(true); state.setVisible(true); + state.setCanDraw(true); // Start clean and set commit. state.setNeedsCommit(true); @@ -729,7 +766,7 @@ TEST(CCSchedulerStateMachineTest, TestFullCycle) // Commit. state.updateState(CCSchedulerStateMachine::ACTION_COMMIT); - EXPECT_EQ(CCSchedulerStateMachine::COMMIT_STATE_IDLE, state.commitState()); + EXPECT_EQ(CCSchedulerStateMachine::COMMIT_STATE_WAITING_FOR_FIRST_DRAW, state.commitState()); EXPECT_TRUE(state.needsRedraw()); // Expect to do nothing until vsync. @@ -753,6 +790,7 @@ TEST(CCSchedulerStateMachineTest, TestFullCycleWithCommitRequestInbetween) StateMachine state; state.setCanBeginFrame(true); state.setVisible(true); + state.setCanDraw(true); // Start clean and set commit. state.setNeedsCommit(true); @@ -812,6 +850,7 @@ TEST(CCSchedulerStateMachineTest, TestGoesInvisibleBeforeBeginFrameCompletes) StateMachine state; state.setCanBeginFrame(true); state.setVisible(true); + state.setCanDraw(true); // Start clean and set commit. state.setNeedsCommit(true); @@ -830,6 +869,19 @@ TEST(CCSchedulerStateMachineTest, TestGoesInvisibleBeforeBeginFrameCompletes) // We should now be back in the idle state as if we didn't start a frame at all. EXPECT_EQ(CCSchedulerStateMachine::COMMIT_STATE_IDLE, state.commitState()); EXPECT_EQ(CCSchedulerStateMachine::ACTION_NONE, state.nextAction()); + + // Become visible again + state.setVisible(true); + + // We should be beginning a frame now + EXPECT_EQ(CCSchedulerStateMachine::COMMIT_STATE_IDLE, state.commitState()); + EXPECT_EQ(CCSchedulerStateMachine::ACTION_BEGIN_FRAME, state.nextAction()); + + // Begin the frame + state.updateState(state.nextAction()); + + // We should be starting the commit now + EXPECT_EQ(CCSchedulerStateMachine::COMMIT_STATE_FRAME_IN_PROGRESS, state.commitState()); } TEST(CCSchedulerStateMachineTest, TestContextLostWhenCompletelyIdle) @@ -837,6 +889,7 @@ TEST(CCSchedulerStateMachineTest, TestContextLostWhenCompletelyIdle) StateMachine state; state.setCanBeginFrame(true); state.setVisible(true); + state.setCanDraw(true); state.didLoseContext(); @@ -859,6 +912,7 @@ TEST(CCSchedulerStateMachineTest, TestContextLostWhenIdleAndCommitRequestedWhile StateMachine state; state.setCanBeginFrame(true); state.setVisible(true); + state.setCanDraw(true); state.didLoseContext(); @@ -895,6 +949,7 @@ TEST(CCSchedulerStateMachineTest, TestContextLostWhileCommitInProgress) StateMachine state; state.setCanBeginFrame(true); state.setVisible(true); + state.setCanDraw(true); // Get a commit in flight. state.setNeedsCommit(true); @@ -924,6 +979,11 @@ TEST(CCSchedulerStateMachineTest, TestContextLostWhileCommitInProgress) EXPECT_EQ(CCSchedulerStateMachine::ACTION_COMMIT, state.nextAction()); state.updateState(state.nextAction()); + EXPECT_EQ(CCSchedulerStateMachine::COMMIT_STATE_WAITING_FOR_FIRST_DRAW, state.commitState()); + + EXPECT_EQ(CCSchedulerStateMachine::ACTION_DRAW_IF_POSSIBLE, state.nextAction()); + state.updateState(state.nextAction()); + // Expect to be told to begin context recreation, independent of vsync state state.didEnterVSync(); EXPECT_EQ(CCSchedulerStateMachine::ACTION_BEGIN_CONTEXT_RECREATION, state.nextAction()); @@ -936,6 +996,7 @@ TEST(CCSchedulerStateMachineTest, TestContextLostWhileCommitInProgressAndAnother StateMachine state; state.setCanBeginFrame(true); state.setVisible(true); + state.setCanDraw(true); // Get a commit in flight. state.setNeedsCommit(true); @@ -953,9 +1014,6 @@ TEST(CCSchedulerStateMachineTest, TestContextLostWhileCommitInProgressAndAnother state.didLoseContext(); // Ask for another draw and also set needs commit. Expect nothing happens. - // Setting another commit will put us into - // COMMIT_STATE_WAITING_FOR_FIRST_DRAW after we finish the frame on the main - // thread. state.setNeedsRedraw(true); state.setNeedsCommit(true); EXPECT_EQ(CCSchedulerStateMachine::ACTION_NONE, state.nextAction()); @@ -986,6 +1044,7 @@ TEST(CCSchedulerStateMachineTest, TestFinishAllRenderingWhileContextLost) { StateMachine state; state.setVisible(true); + state.setCanDraw(true); // Cause a lost context lost. state.didLoseContext(); @@ -1024,6 +1083,7 @@ TEST(CCSchedulerStateMachineTest, TestBeginFrameWhenCanBeginFrameFalseAndForceCo { StateMachine state; state.setVisible(true); + state.setCanDraw(true); state.setNeedsCommit(true); state.setNeedsForcedCommit(true); EXPECT_EQ(CCSchedulerStateMachine::ACTION_BEGIN_FRAME, state.nextAction()); @@ -1046,7 +1106,7 @@ TEST(CCSchedulerStateMachineTest, TestBeginFrameWhenCommitInProgress) EXPECT_EQ(CCSchedulerStateMachine::ACTION_COMMIT, state.nextAction()); state.updateState(state.nextAction()); - EXPECT_EQ(CCSchedulerStateMachine::COMMIT_STATE_IDLE, state.commitState()); + EXPECT_EQ(CCSchedulerStateMachine::COMMIT_STATE_WAITING_FOR_FIRST_DRAW, state.commitState()); EXPECT_EQ(CCSchedulerStateMachine::ACTION_BEGIN_FRAME, state.nextAction()); } @@ -1056,6 +1116,7 @@ TEST(CCSchedulerStateMachineTest, TestBeginFrameWhenContextLost) StateMachine state; state.setCanBeginFrame(true); state.setVisible(true); + state.setCanDraw(true); state.setNeedsCommit(true); state.setNeedsForcedCommit(true); state.didLoseContext(); |