| Index: Source/WebKit/chromium/tests/CCSchedulerTest.cpp
|
| ===================================================================
|
| --- Source/WebKit/chromium/tests/CCSchedulerTest.cpp (revision 112607)
|
| +++ Source/WebKit/chromium/tests/CCSchedulerTest.cpp (working copy)
|
| @@ -45,7 +45,8 @@
|
| m_actions.clear();
|
| m_hasMoreResourceUpdates = false;
|
| m_canDraw = true;
|
| - m_drawSuccess = true;
|
| + m_drawWillHappen = true;
|
| + m_swapWillHappenIfDrawHappens = true;
|
| m_numDraws = 0;
|
| }
|
|
|
| @@ -56,32 +57,42 @@
|
| int numActions() const { return static_cast<int>(m_actions.size()); }
|
| const char* action(int i) const { return m_actions[i]; }
|
|
|
| + bool hasAction(const char* action) const
|
| + {
|
| + for (size_t i = 0; i < m_actions.size(); i++)
|
| + if (!strcmp(m_actions[i], action))
|
| + return true;
|
| + return false;
|
| + }
|
| +
|
| virtual bool canDraw() { return m_canDraw; }
|
| virtual bool hasMoreResourceUpdates() const { return m_hasMoreResourceUpdates; }
|
| virtual void scheduledActionBeginFrame() { m_actions.push_back("scheduledActionBeginFrame"); }
|
| - virtual bool scheduledActionDrawAndSwapIfPossible()
|
| + virtual CCScheduledActionDrawAndSwapResult scheduledActionDrawAndSwapIfPossible()
|
| {
|
| m_actions.push_back("scheduledActionDrawAndSwapIfPossible");
|
| m_numDraws++;
|
| - return m_drawSuccess;
|
| + return CCScheduledActionDrawAndSwapResult(m_drawWillHappen, m_drawWillHappen && m_swapWillHappenIfDrawHappens);
|
| }
|
|
|
| - virtual void scheduledActionDrawAndSwapForced()
|
| + virtual CCScheduledActionDrawAndSwapResult scheduledActionDrawAndSwapForced()
|
| {
|
| m_actions.push_back("scheduledActionDrawAndSwapForced");
|
| - m_numDraws++;
|
| + return CCScheduledActionDrawAndSwapResult(true, m_swapWillHappenIfDrawHappens);
|
| }
|
|
|
| virtual void scheduledActionUpdateMoreResources() { m_actions.push_back("scheduledActionUpdateMoreResources"); }
|
| virtual void scheduledActionCommit() { m_actions.push_back("scheduledActionCommit"); }
|
| virtual void scheduledActionBeginContextRecreation() { m_actions.push_back("scheduledActionBeginContextRecreation"); }
|
|
|
| - void setDrawSuccess(bool drawSuccess) { m_drawSuccess = drawSuccess; }
|
| + void setDrawWillHappen(bool drawWillHappen) { m_drawWillHappen = drawWillHappen; }
|
| + void setSwapWillHappenIfDrawHappens(bool swapWillHappenIfDrawHappens) { m_swapWillHappenIfDrawHappens = swapWillHappenIfDrawHappens; }
|
|
|
| protected:
|
| bool m_hasMoreResourceUpdates;
|
| bool m_canDraw;
|
| - bool m_drawSuccess;
|
| + bool m_drawWillHappen;
|
| + bool m_swapWillHappenIfDrawHappens;
|
| int m_numDraws;
|
| std::vector<const char*> m_actions;
|
| };
|
| @@ -163,7 +174,7 @@
|
| void setScheduler(CCScheduler* scheduler) { m_scheduler = scheduler; }
|
|
|
| virtual void scheduledActionBeginFrame() { }
|
| - virtual bool scheduledActionDrawAndSwapIfPossible()
|
| + virtual CCScheduledActionDrawAndSwapResult scheduledActionDrawAndSwapIfPossible()
|
| {
|
| // Only setNeedsRedraw the first time this is called
|
| if (!m_numDraws)
|
| @@ -171,7 +182,12 @@
|
| return FakeCCSchedulerClient::scheduledActionDrawAndSwapIfPossible();
|
| }
|
|
|
| - virtual void scheduledActionDrawAndSwapForced() { }
|
| + virtual CCScheduledActionDrawAndSwapResult scheduledActionDrawAndSwapForced()
|
| + {
|
| + ASSERT_NOT_REACHED();
|
| + return CCScheduledActionDrawAndSwapResult(true, true);
|
| + }
|
| +
|
| virtual void scheduledActionUpdateMoreResources() { }
|
| virtual void scheduledActionCommit() { }
|
| virtual void scheduledActionBeginContextRecreation() { }
|
| @@ -216,7 +232,7 @@
|
| OwnPtr<CCScheduler> scheduler = CCScheduler::create(&client, adoptPtr(new CCFrameRateController(timeSource)));
|
| client.setScheduler(scheduler.get());
|
| scheduler->setVisible(true);
|
| - client.setDrawSuccess(false);
|
| + client.setDrawWillHappen(false);
|
|
|
| scheduler->setNeedsRedraw();
|
| EXPECT_TRUE(scheduler->redrawPending());
|
| @@ -240,7 +256,7 @@
|
| EXPECT_TRUE(timeSource->active());
|
|
|
| // Draw successfully.
|
| - client.setDrawSuccess(true);
|
| + client.setDrawWillHappen(true);
|
| timeSource->tick();
|
| EXPECT_EQ(3, client.numDraws());
|
| EXPECT_TRUE(scheduler->commitPending());
|
| @@ -256,7 +272,7 @@
|
| void setScheduler(CCScheduler* scheduler) { m_scheduler = scheduler; }
|
|
|
| virtual void scheduledActionBeginFrame() { }
|
| - virtual bool scheduledActionDrawAndSwapIfPossible()
|
| + virtual CCScheduledActionDrawAndSwapResult scheduledActionDrawAndSwapIfPossible()
|
| {
|
| // Only setNeedsCommit the first time this is called
|
| if (!m_numDraws)
|
| @@ -264,7 +280,12 @@
|
| return FakeCCSchedulerClient::scheduledActionDrawAndSwapIfPossible();
|
| }
|
|
|
| - virtual void scheduledActionDrawAndSwapForced() { }
|
| + virtual CCScheduledActionDrawAndSwapResult scheduledActionDrawAndSwapForced()
|
| + {
|
| + ASSERT_NOT_REACHED();
|
| + return CCScheduledActionDrawAndSwapResult(true, true);
|
| + }
|
| +
|
| virtual void scheduledActionUpdateMoreResources() { }
|
| virtual void scheduledActionCommit() { }
|
| virtual void scheduledActionBeginContextRecreation() { }
|
| @@ -308,7 +329,7 @@
|
| OwnPtr<CCScheduler> scheduler = CCScheduler::create(&client, adoptPtr(new CCFrameRateController(timeSource)));
|
| client.setScheduler(scheduler.get());
|
| scheduler->setVisible(true);
|
| - client.setDrawSuccess(false);
|
| + client.setDrawWillHappen(false);
|
|
|
| scheduler->setNeedsRedraw();
|
| EXPECT_TRUE(scheduler->redrawPending());
|
| @@ -332,7 +353,7 @@
|
| EXPECT_TRUE(timeSource->active());
|
|
|
| // Draw successfully.
|
| - client.setDrawSuccess(true);
|
| + client.setDrawWillHappen(true);
|
| timeSource->tick();
|
| EXPECT_EQ(3, client.numDraws());
|
| EXPECT_TRUE(scheduler->commitPending());
|
| @@ -380,10 +401,33 @@
|
| EXPECT_TRUE(timeSource->active());
|
|
|
| // Fail to draw, this should not start a frame.
|
| - client.setDrawSuccess(false);
|
| + client.setDrawWillHappen(false);
|
| timeSource->tick();
|
| EXPECT_EQ(3, client.numDraws());
|
| EXPECT_EQ(0, controllerPtr->numFramesPending());
|
| }
|
|
|
| +TEST(CCSchedulerTest, NoBeginFrameWhenSwapFailsDuringForcedCommit)
|
| +{
|
| + RefPtr<FakeCCTimeSource> timeSource = adoptRef(new FakeCCTimeSource());
|
| + FakeCCSchedulerClient client;
|
| + OwnPtr<FakeCCFrameRateController> controller = adoptPtr(new FakeCCFrameRateController(timeSource));
|
| + FakeCCFrameRateController* controllerPtr = controller.get();
|
| + OwnPtr<CCScheduler> scheduler = CCScheduler::create(&client, controller.release());
|
| +
|
| + EXPECT_EQ(0, controllerPtr->numFramesPending());
|
| +
|
| + // Tell the client that it will fail to swap.
|
| + client.setDrawWillHappen(true);
|
| + client.setSwapWillHappenIfDrawHappens(false);
|
| +
|
| + // Get the compositor to do a scheduledActionDrawAndSwapForced.
|
| + scheduler->setNeedsRedraw();
|
| + scheduler->setNeedsForcedRedraw();
|
| + EXPECT_TRUE(client.hasAction("scheduledActionDrawAndSwapForced"));
|
| +
|
| + // We should not have told the frame rate controller that we began a frame.
|
| + EXPECT_EQ(0, controllerPtr->numFramesPending());
|
| }
|
| +
|
| +}
|
|
|