Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(3248)

Unified Diff: cc/CCTextureUpdateControllerTest.cpp

Issue 10911262: cc: Scheduler will never process a commit until it receives a vsync tick. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: rebase Created 8 years, 3 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « cc/CCTextureUpdateController.cpp ('k') | cc/CCThreadProxy.h » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: cc/CCTextureUpdateControllerTest.cpp
diff --git a/cc/CCTextureUpdateControllerTest.cpp b/cc/CCTextureUpdateControllerTest.cpp
index 81c8b4fb01fa2d5f2167c17f9116e0fa94579336..8d47f7c27f6412dab9193f22b778de1ae86d3e14 100644
--- a/cc/CCTextureUpdateControllerTest.cpp
+++ b/cc/CCTextureUpdateControllerTest.cpp
@@ -518,11 +518,23 @@ TEST_F(CCTextureUpdateControllerTest, TripleUpdateFinalUpdateAllPartial)
EXPECT_EQ(kFullUploads + kPartialUploads, m_numTotalUploads);
}
+class FakeCCTextureUpdateControllerClient : public WebCore::CCTextureUpdateControllerClient {
+public:
+ FakeCCTextureUpdateControllerClient() { reset(); }
+ void reset() { m_completedCalled = false; }
+ bool completedCalled() const { return m_completedCalled; }
+
+ virtual void updateTexturesCompleted() OVERRIDE { m_completedCalled = true; }
+
+protected:
+ bool m_completedCalled;
+};
+
class FakeCCTextureUpdateController : public WebCore::CCTextureUpdateController {
public:
- static PassOwnPtr<FakeCCTextureUpdateController> create(WebCore::CCThread* thread, PassOwnPtr<CCTextureUpdateQueue> queue, CCResourceProvider* resourceProvider, TextureCopier* copier, TextureUploader* uploader)
+ static PassOwnPtr<FakeCCTextureUpdateController> create(WebCore::CCTextureUpdateControllerClient* client, WebCore::CCThread* thread, PassOwnPtr<CCTextureUpdateQueue> queue, CCResourceProvider* resourceProvider, TextureCopier* copier, TextureUploader* uploader)
{
- return adoptPtr(new FakeCCTextureUpdateController(thread, queue, resourceProvider, copier, uploader));
+ return adoptPtr(new FakeCCTextureUpdateController(client, thread, queue, resourceProvider, copier, uploader));
}
void setMonotonicTimeNow(double time) { m_monotonicTimeNow = time; }
@@ -533,8 +545,8 @@ public:
virtual size_t updateMoreTexturesSize() const OVERRIDE { return m_updateMoreTexturesSize; }
protected:
- FakeCCTextureUpdateController(WebCore::CCThread* thread, PassOwnPtr<CCTextureUpdateQueue> queue, CCResourceProvider* resourceProvider, TextureCopier* copier, TextureUploader* uploader)
- : WebCore::CCTextureUpdateController(thread, queue, resourceProvider, copier, uploader)
+ FakeCCTextureUpdateController(WebCore::CCTextureUpdateControllerClient* client, WebCore::CCThread* thread, PassOwnPtr<CCTextureUpdateQueue> queue, CCResourceProvider* resourceProvider, TextureCopier* copier, TextureUploader* uploader)
+ : WebCore::CCTextureUpdateController(client, thread, queue, resourceProvider, copier, uploader)
, m_monotonicTimeNow(0)
, m_updateMoreTexturesTime(0)
, m_updateMoreTexturesSize(0) { }
@@ -544,8 +556,16 @@ protected:
size_t m_updateMoreTexturesSize;
};
+static void runPendingTask(FakeCCThread* thread, FakeCCTextureUpdateController* controller)
+{
+ EXPECT_TRUE(thread->hasPendingTask());
+ controller->setMonotonicTimeNow(controller->monotonicTimeNow() + thread->pendingDelayMs() / 1000.0);
+ thread->runPendingTask();
+}
+
TEST_F(CCTextureUpdateControllerTest, UpdateMoreTextures)
{
+ FakeCCTextureUpdateControllerClient client;
FakeCCThread thread;
setMaxUploadCountPerUpdate(1);
@@ -553,7 +573,7 @@ TEST_F(CCTextureUpdateControllerTest, UpdateMoreTextures)
appendPartialUploadsToUpdateQueue(0);
DebugScopedSetImplThread implThread;
- OwnPtr<FakeCCTextureUpdateController> controller(FakeCCTextureUpdateController::create(&thread, m_queue.release(), m_resourceProvider.get(), &m_copier, &m_uploader));
+ OwnPtr<FakeCCTextureUpdateController> controller(FakeCCTextureUpdateController::create(&client, &thread, m_queue.release(), m_resourceProvider.get(), &m_copier, &m_uploader));
controller->setMonotonicTimeNow(0);
controller->setUpdateMoreTexturesTime(0.1);
@@ -564,28 +584,26 @@ TEST_F(CCTextureUpdateControllerTest, UpdateMoreTextures)
EXPECT_EQ(0, m_numBeginUploads);
EXPECT_EQ(0, m_numEndUploads);
- thread.reset();
controller->setMonotonicTimeNow(0);
controller->setUpdateMoreTexturesTime(0.1);
controller->setUpdateMoreTexturesSize(1);
// Only enough time for 1 update.
controller->updateMoreTextures(0.12);
- EXPECT_TRUE(thread.hasPendingTask());
- controller->setMonotonicTimeNow(thread.pendingDelayMs() / 1000.0);
- thread.runPendingTask();
+ runPendingTask(&thread, controller.get());
+ EXPECT_FALSE(thread.hasPendingTask());
EXPECT_EQ(1, m_numBeginUploads);
EXPECT_EQ(1, m_numEndUploads);
EXPECT_EQ(1, m_numTotalUploads);
- thread.reset();
controller->setMonotonicTimeNow(0);
controller->setUpdateMoreTexturesTime(0.1);
controller->setUpdateMoreTexturesSize(1);
// Enough time for 2 updates.
controller->updateMoreTextures(0.22);
- EXPECT_TRUE(thread.hasPendingTask());
- controller->setMonotonicTimeNow(controller->monotonicTimeNow() + thread.pendingDelayMs() / 1000.0);
- thread.runPendingTask();
+ runPendingTask(&thread, controller.get());
+ runPendingTask(&thread, controller.get());
+ EXPECT_FALSE(thread.hasPendingTask());
+ EXPECT_TRUE(client.completedCalled());
EXPECT_EQ(3, m_numBeginUploads);
EXPECT_EQ(3, m_numEndUploads);
EXPECT_EQ(3, m_numTotalUploads);
@@ -593,6 +611,7 @@ TEST_F(CCTextureUpdateControllerTest, UpdateMoreTextures)
TEST_F(CCTextureUpdateControllerTest, NoMoreUpdates)
{
+ FakeCCTextureUpdateControllerClient client;
FakeCCThread thread;
setMaxUploadCountPerUpdate(1);
@@ -600,30 +619,30 @@ TEST_F(CCTextureUpdateControllerTest, NoMoreUpdates)
appendPartialUploadsToUpdateQueue(0);
DebugScopedSetImplThread implThread;
- OwnPtr<FakeCCTextureUpdateController> controller(FakeCCTextureUpdateController::create(&thread, m_queue.release(), m_resourceProvider.get(), &m_copier, &m_uploader));
+ OwnPtr<FakeCCTextureUpdateController> controller(FakeCCTextureUpdateController::create(&client, &thread, m_queue.release(), m_resourceProvider.get(), &m_copier, &m_uploader));
controller->setMonotonicTimeNow(0);
controller->setUpdateMoreTexturesTime(0.1);
controller->setUpdateMoreTexturesSize(1);
// Enough time for 3 updates but only 2 necessary.
controller->updateMoreTextures(0.31);
- EXPECT_TRUE(thread.hasPendingTask());
- controller->setMonotonicTimeNow(controller->monotonicTimeNow() + thread.pendingDelayMs() / 1000.0);
- thread.runPendingTask();
- EXPECT_TRUE(thread.hasPendingTask());
- controller->setMonotonicTimeNow(controller->monotonicTimeNow() + thread.pendingDelayMs() / 1000.0);
- thread.runPendingTask();
+ runPendingTask(&thread, controller.get());
+ runPendingTask(&thread, controller.get());
+ EXPECT_FALSE(thread.hasPendingTask());
+ EXPECT_TRUE(client.completedCalled());
EXPECT_EQ(2, m_numBeginUploads);
EXPECT_EQ(2, m_numEndUploads);
EXPECT_EQ(2, m_numTotalUploads);
- thread.reset();
controller->setMonotonicTimeNow(0);
controller->setUpdateMoreTexturesTime(0.1);
controller->setUpdateMoreTexturesSize(1);
// Enough time for updates but no more updates left.
controller->updateMoreTextures(0.31);
+ // 0-delay task used to call updateTexturesCompleted().
+ runPendingTask(&thread, controller.get());
EXPECT_FALSE(thread.hasPendingTask());
+ EXPECT_TRUE(client.completedCalled());
EXPECT_EQ(2, m_numBeginUploads);
EXPECT_EQ(2, m_numEndUploads);
EXPECT_EQ(2, m_numTotalUploads);
@@ -631,6 +650,7 @@ TEST_F(CCTextureUpdateControllerTest, NoMoreUpdates)
TEST_F(CCTextureUpdateControllerTest, UpdatesCompleteInFiniteTime)
{
+ FakeCCTextureUpdateControllerClient client;
FakeCCThread thread;
setMaxUploadCountPerUpdate(1);
@@ -638,25 +658,25 @@ TEST_F(CCTextureUpdateControllerTest, UpdatesCompleteInFiniteTime)
appendPartialUploadsToUpdateQueue(0);
DebugScopedSetImplThread implThread;
- OwnPtr<FakeCCTextureUpdateController> controller(FakeCCTextureUpdateController::create(&thread, m_queue.release(), m_resourceProvider.get(), &m_copier, &m_uploader));
+ OwnPtr<FakeCCTextureUpdateController> controller(FakeCCTextureUpdateController::create(&client, &thread, m_queue.release(), m_resourceProvider.get(), &m_copier, &m_uploader));
controller->setMonotonicTimeNow(0);
controller->setUpdateMoreTexturesTime(0.5);
controller->setUpdateMoreTexturesSize(1);
for (int i = 0; i < 100; i++) {
- if (!controller->hasMoreUpdates())
+ if (client.completedCalled())
break;
// Not enough time for any updates.
controller->updateMoreTextures(0.4);
- if (thread.hasPendingTask()) {
- controller->setMonotonicTimeNow(controller->monotonicTimeNow() + thread.pendingDelayMs() / 1000.0);
- thread.runPendingTask();
- }
+ if (thread.hasPendingTask())
+ runPendingTask(&thread, controller.get());
}
+ EXPECT_FALSE(thread.hasPendingTask());
+ EXPECT_TRUE(client.completedCalled());
EXPECT_EQ(2, m_numBeginUploads);
EXPECT_EQ(2, m_numEndUploads);
EXPECT_EQ(2, m_numTotalUploads);
« no previous file with comments | « cc/CCTextureUpdateController.cpp ('k') | cc/CCThreadProxy.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698