summaryrefslogtreecommitdiffstats
path: root/cc/CCTextureUpdateControllerTest.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'cc/CCTextureUpdateControllerTest.cpp')
-rw-r--r--cc/CCTextureUpdateControllerTest.cpp71
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);