diff options
author | Simon Hausmann <simon.hausmann@nokia.com> | 2012-08-21 10:57:44 +0200 |
---|---|---|
committer | Simon Hausmann <simon.hausmann@nokia.com> | 2012-08-21 10:57:44 +0200 |
commit | 5ef7c8a6a70875d4430752d146bdcb069605d71d (patch) | |
tree | f6256640b6c46d7da221435803cae65326817ba2 /Source/WebKit/chromium/tests/CCTextureUpdateControllerTest.cpp | |
parent | decad929f578d8db641febc8740649ca6c574638 (diff) | |
download | qtwebkit-5ef7c8a6a70875d4430752d146bdcb069605d71d.tar.gz |
Imported WebKit commit 356d83016b090995d08ad568f2d2c243aa55e831 (http://svn.webkit.org/repository/webkit/trunk@126147)
New snapshot including various build fixes for newer Qt 5
Diffstat (limited to 'Source/WebKit/chromium/tests/CCTextureUpdateControllerTest.cpp')
-rw-r--r-- | Source/WebKit/chromium/tests/CCTextureUpdateControllerTest.cpp | 157 |
1 files changed, 150 insertions, 7 deletions
diff --git a/Source/WebKit/chromium/tests/CCTextureUpdateControllerTest.cpp b/Source/WebKit/chromium/tests/CCTextureUpdateControllerTest.cpp index a0dc2ec1f..11659f6f5 100644 --- a/Source/WebKit/chromium/tests/CCTextureUpdateControllerTest.cpp +++ b/Source/WebKit/chromium/tests/CCTextureUpdateControllerTest.cpp @@ -24,17 +24,16 @@ #include "config.h" -#include "cc/CCTextureUpdateController.h" +#include "CCTextureUpdateController.h" #include "CCSchedulerTestCommon.h" +#include "CCSingleThreadProxy.h" // For DebugScopedSetImplThread #include "CCTiledLayerTestCommon.h" #include "FakeWebCompositorOutputSurface.h" #include "FakeWebGraphicsContext3D.h" -#include "cc/CCSingleThreadProxy.h" // For DebugScopedSetImplThread +#include <gtest/gtest.h> #include <public/WebCompositor.h> #include <public/WebThread.h> - -#include <gtest/gtest.h> #include <wtf/RefPtr.h> using namespace WebCore; @@ -89,7 +88,7 @@ private: class TextureForUploadTest : public LayerTextureUpdater::Texture { public: TextureForUploadTest() : LayerTextureUpdater::Texture(adoptPtr<CCPrioritizedTexture>(0)) { } - virtual void updateRect(CCResourceProvider*, const IntRect& sourceRect, const IntRect& destRect) { } + virtual void updateRect(CCResourceProvider*, const IntRect& sourceRect, const IntSize& destOffset) { } }; @@ -190,7 +189,7 @@ protected: m_totalUploadCountExpected += count; const IntRect rect(0, 0, 300, 150); - const TextureUploader::Parameters upload = { &m_texture, rect, rect }; + const TextureUploader::Parameters upload = { &m_texture, rect, IntSize() }; for (int i = 0; i < count; i++) m_queue->appendFullUpload(upload); } @@ -201,7 +200,7 @@ protected: m_totalUploadCountExpected += count; const IntRect rect(0, 0, 100, 100); - const TextureUploader::Parameters upload = { &m_texture, rect, rect }; + const TextureUploader::Parameters upload = { &m_texture, rect, IntSize() }; for (int i = 0; i < count; i++) m_queue->appendPartialUpload(upload); } @@ -542,4 +541,148 @@ TEST_F(CCTextureUpdateControllerTest, TripleUpdateFinalUpdateAllPartial) EXPECT_EQ(kFullUploads + kPartialUploads, m_numTotalUploads); } +class FakeCCTextureUpdateController : public WebCore::CCTextureUpdateController { +public: + static PassOwnPtr<FakeCCTextureUpdateController> create(WebCore::CCThread* thread, PassOwnPtr<CCTextureUpdateQueue> queue, CCResourceProvider* resourceProvider, TextureCopier* copier, TextureUploader* uploader) + { + return adoptPtr(new FakeCCTextureUpdateController(thread, queue, resourceProvider, copier, uploader)); + } + + void setMonotonicTimeNow(double time) { m_monotonicTimeNow = time; } + virtual double monotonicTimeNow() const OVERRIDE { return m_monotonicTimeNow; } + void setUpdateMoreTexturesTime(double time) { m_updateMoreTexturesTime = time; } + virtual double updateMoreTexturesTime() const OVERRIDE { return m_updateMoreTexturesTime; } + void setUpdateMoreTexturesSize(size_t size) { m_updateMoreTexturesSize = size; } + 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) + , m_monotonicTimeNow(0) + , m_updateMoreTexturesTime(0) + , m_updateMoreTexturesSize(0) { } + + double m_monotonicTimeNow; + double m_updateMoreTexturesTime; + size_t m_updateMoreTexturesSize; +}; + +TEST_F(CCTextureUpdateControllerTest, UpdateMoreTextures) +{ + FakeCCThread thread; + + setMaxUploadCountPerUpdate(1); + appendFullUploadsToUpdateQueue(3); + appendPartialUploadsToUpdateQueue(0); + + DebugScopedSetImplThread implThread; + OwnPtr<FakeCCTextureUpdateController> controller(FakeCCTextureUpdateController::create(&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()); + 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(); + 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(); + EXPECT_EQ(3, m_numBeginUploads); + EXPECT_EQ(3, m_numEndUploads); + EXPECT_EQ(3, m_numTotalUploads); +} + +TEST_F(CCTextureUpdateControllerTest, NoMoreUpdates) +{ + FakeCCThread thread; + + setMaxUploadCountPerUpdate(1); + appendFullUploadsToUpdateQueue(2); + appendPartialUploadsToUpdateQueue(0); + + DebugScopedSetImplThread implThread; + OwnPtr<FakeCCTextureUpdateController> controller(FakeCCTextureUpdateController::create(&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(); + 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()); + EXPECT_EQ(2, m_numBeginUploads); + EXPECT_EQ(2, m_numEndUploads); + EXPECT_EQ(2, m_numTotalUploads); +} + +TEST_F(CCTextureUpdateControllerTest, UpdatesCompleteInFiniteTime) +{ + FakeCCThread thread; + + setMaxUploadCountPerUpdate(1); + appendFullUploadsToUpdateQueue(2); + appendPartialUploadsToUpdateQueue(0); + + DebugScopedSetImplThread implThread; + OwnPtr<FakeCCTextureUpdateController> controller(FakeCCTextureUpdateController::create(&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()) + break; + + // Not enough time for any updates. + controller->updateMoreTextures(0.4); + + if (thread.hasPendingTask()) { + controller->setMonotonicTimeNow(controller->monotonicTimeNow() + thread.pendingDelayMs() / 1000.0); + thread.runPendingTask(); + } + } + + EXPECT_EQ(2, m_numBeginUploads); + EXPECT_EQ(2, m_numEndUploads); + EXPECT_EQ(2, m_numTotalUploads); +} + } // namespace |