diff options
Diffstat (limited to 'cc/CCTextureUpdateControllerTest.cpp')
-rw-r--r-- | cc/CCTextureUpdateControllerTest.cpp | 71 |
1 files changed, 41 insertions, 30 deletions
diff --git a/cc/CCTextureUpdateControllerTest.cpp b/cc/CCTextureUpdateControllerTest.cpp index 2ed0e59..d2a6fcf6 100644 --- a/cc/CCTextureUpdateControllerTest.cpp +++ b/cc/CCTextureUpdateControllerTest.cpp @@ -521,11 +521,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; } @@ -536,8 +548,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) { } @@ -547,8 +559,17 @@ protected: size_t m_updateMoreTexturesSize; }; +static void runPendingTasks(FakeCCThread* thread, FakeCCTextureUpdateController* controller) +{ + while (thread->hasPendingTask()) { + controller->setMonotonicTimeNow(controller->monotonicTimeNow() + thread->pendingDelayMs() / 1000.0); + thread->runPendingTask(); + } +} + TEST_F(CCTextureUpdateControllerTest, UpdateMoreTextures) { + FakeCCTextureUpdateControllerClient client; FakeCCThread thread; setMaxUploadCountPerUpdate(1); @@ -556,39 +577,34 @@ 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); controller->setUpdateMoreTexturesSize(1); // Not enough time for any updates. controller->updateMoreTextures(0.09); - EXPECT_FALSE(thread.hasPendingTask()); + runPendingTasks(&thread, controller.get()); 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(); + runPendingTasks(&thread, controller.get()); 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(); + runPendingTasks(&thread, controller.get()); + EXPECT_TRUE(client.completedCalled()); EXPECT_EQ(3, m_numBeginUploads); EXPECT_EQ(3, m_numEndUploads); EXPECT_EQ(3, m_numTotalUploads); @@ -596,6 +612,7 @@ TEST_F(CCTextureUpdateControllerTest, UpdateMoreTextures) TEST_F(CCTextureUpdateControllerTest, NoMoreUpdates) { + FakeCCTextureUpdateControllerClient client; FakeCCThread thread; setMaxUploadCountPerUpdate(1); @@ -603,30 +620,26 @@ 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(); + runPendingTasks(&thread, controller.get()); + 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); - EXPECT_FALSE(thread.hasPendingTask()); + runPendingTasks(&thread, controller.get()); + EXPECT_TRUE(client.completedCalled()); EXPECT_EQ(2, m_numBeginUploads); EXPECT_EQ(2, m_numEndUploads); EXPECT_EQ(2, m_numTotalUploads); @@ -634,6 +647,7 @@ TEST_F(CCTextureUpdateControllerTest, NoMoreUpdates) TEST_F(CCTextureUpdateControllerTest, UpdatesCompleteInFiniteTime) { + FakeCCTextureUpdateControllerClient client; FakeCCThread thread; setMaxUploadCountPerUpdate(1); @@ -641,25 +655,22 @@ 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(); - } + runPendingTasks(&thread, controller.get()); } + EXPECT_TRUE(client.completedCalled()); EXPECT_EQ(2, m_numBeginUploads); EXPECT_EQ(2, m_numEndUploads); EXPECT_EQ(2, m_numTotalUploads); |