diff options
Diffstat (limited to 'Source/WebKit/chromium/tests/CCTextureUpdateControllerTest.cpp')
-rw-r--r-- | Source/WebKit/chromium/tests/CCTextureUpdateControllerTest.cpp | 685 |
1 files changed, 0 insertions, 685 deletions
diff --git a/Source/WebKit/chromium/tests/CCTextureUpdateControllerTest.cpp b/Source/WebKit/chromium/tests/CCTextureUpdateControllerTest.cpp deleted file mode 100644 index baf63c2e7..000000000 --- a/Source/WebKit/chromium/tests/CCTextureUpdateControllerTest.cpp +++ /dev/null @@ -1,685 +0,0 @@ -/* - * Copyright (C) 2012 Google Inc. All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * - * THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY - * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED - * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY - * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES - * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; - * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON - * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ - -#include "config.h" - -#include "CCTextureUpdateController.h" - -#include "CCSchedulerTestCommon.h" -#include "CCSingleThreadProxy.h" // For DebugScopedSetImplThread -#include "CCTiledLayerTestCommon.h" -#include "FakeWebCompositorOutputSurface.h" -#include "FakeWebGraphicsContext3D.h" -#include "WebCompositorInitializer.h" -#include <gtest/gtest.h> -#include <public/WebThread.h> -#include <wtf/RefPtr.h> - -using namespace WebCore; -using namespace WebKit; -using namespace WebKitTests; -using testing::Test; - - -namespace { - -const int kFlushPeriodFull = 4; -const int kFlushPeriodPartial = kFlushPeriodFull; - -class CCTextureUpdateControllerTest; - -class WebGraphicsContext3DForUploadTest : public FakeWebGraphicsContext3D { -public: - WebGraphicsContext3DForUploadTest(CCTextureUpdateControllerTest *test) - : m_test(test) - , m_supportShallowFlush(true) - { } - - virtual void flush(void); - virtual void shallowFlushCHROMIUM(void); - virtual GrGLInterface* onCreateGrGLInterface() { return 0; } - - virtual WebString getString(WGC3Denum name) - { - if (m_supportShallowFlush) - return WebString("GL_CHROMIUM_shallow_flush"); - return WebString(""); - } - -private: - CCTextureUpdateControllerTest* m_test; - bool m_supportShallowFlush; -}; - - -class TextureUploaderForUploadTest : public FakeTextureUploader { -public: - TextureUploaderForUploadTest(CCTextureUpdateControllerTest *test) : m_test(test) { } - - virtual void beginUploads() OVERRIDE; - virtual void endUploads() OVERRIDE; - virtual void uploadTexture(WebCore::CCResourceProvider*, Parameters) OVERRIDE; - -private: - CCTextureUpdateControllerTest* m_test; -}; - -class TextureForUploadTest : public LayerTextureUpdater::Texture { -public: - TextureForUploadTest() : LayerTextureUpdater::Texture(adoptPtr<CCPrioritizedTexture>(0)) { } - virtual void updateRect(CCResourceProvider*, const IntRect& sourceRect, const IntSize& destOffset) { } -}; - - -class CCTextureUpdateControllerTest : public Test { -public: - CCTextureUpdateControllerTest() - : m_queue(adoptPtr(new CCTextureUpdateQueue)) - , m_uploader(this) - , m_compositorInitializer(m_thread.get()) - , m_fullUploadCountExpected(0) - , m_partialCountExpected(0) - , m_totalUploadCountExpected(0) - , m_maxUploadCountPerUpdate(0) - , m_numBeginUploads(0) - , m_numEndUploads(0) - , m_numConsecutiveFlushes(0) - , m_numDanglingUploads(0) - , m_numTotalUploads(0) - , m_numTotalFlushes(0) - , m_numPreviousUploads(0) - , m_numPreviousFlushes(0) - { - } - -public: - void onFlush() - { - // Check for back-to-back flushes. - EXPECT_EQ(0, m_numConsecutiveFlushes) << "Back-to-back flushes detected."; - - // Check for premature flushes - if (m_numPreviousUploads != m_maxUploadCountPerUpdate) { - if (m_numTotalUploads < m_fullUploadCountExpected) - EXPECT_GE(m_numDanglingUploads, kFlushPeriodFull) << "Premature flush detected in full uploads."; - else if (m_numTotalUploads > m_fullUploadCountExpected && m_numTotalUploads < m_totalUploadCountExpected) - EXPECT_GE(m_numDanglingUploads, kFlushPeriodPartial) << "Premature flush detected in partial uploads."; - } - - m_numDanglingUploads = 0; - m_numConsecutiveFlushes++; - m_numTotalFlushes++; - m_numPreviousFlushes++; - } - - void onBeginUploads() - { - m_numPreviousFlushes = 0; - m_numPreviousUploads = 0; - m_numBeginUploads++; - } - - void onUpload() - { - // Check for too many consecutive uploads - if (m_numTotalUploads < m_fullUploadCountExpected) - EXPECT_LT(m_numDanglingUploads, kFlushPeriodFull) << "Too many consecutive full uploads detected."; - else - EXPECT_LT(m_numDanglingUploads, kFlushPeriodPartial) << "Too many consecutive partial uploads detected."; - - m_numConsecutiveFlushes = 0; - m_numDanglingUploads++; - m_numTotalUploads++; - m_numPreviousUploads++; - } - - void onEndUploads() - { - EXPECT_EQ(0, m_numDanglingUploads) << "Last upload wasn't followed by a flush."; - - // Note: The m_numTotalUploads != m_fullUploadCountExpected comparison - // allows for the quota not to be hit in the case where we are trasitioning - // from full uploads to partial uploads. - if (m_numTotalUploads != m_totalUploadCountExpected && m_numTotalUploads != m_fullUploadCountExpected) { - EXPECT_EQ(m_maxUploadCountPerUpdate, m_numPreviousUploads) - << "endUpload() was called when there are textures to upload, but the upload quota hasn't been filled."; - } - - m_numEndUploads++; - } - -protected: - virtual void SetUp() - { - m_context = FakeWebCompositorOutputSurface::create(adoptPtr(new WebGraphicsContext3DForUploadTest(this))); - DebugScopedSetImplThread implThread; - m_resourceProvider = CCResourceProvider::create(m_context.get()); - } - - void appendFullUploadsToUpdateQueue(int count) - { - m_fullUploadCountExpected += count; - m_totalUploadCountExpected += count; - - const IntRect rect(0, 0, 300, 150); - const TextureUploader::Parameters upload = { &m_texture, rect, IntSize() }; - for (int i = 0; i < count; i++) - m_queue->appendFullUpload(upload); - } - - void appendPartialUploadsToUpdateQueue(int count) - { - m_partialCountExpected += count; - m_totalUploadCountExpected += count; - - const IntRect rect(0, 0, 100, 100); - const TextureUploader::Parameters upload = { &m_texture, rect, IntSize() }; - for (int i = 0; i < count; i++) - m_queue->appendPartialUpload(upload); - } - - void setMaxUploadCountPerUpdate(int count) - { - m_maxUploadCountPerUpdate = count; - } - -protected: - // Classes required to interact and test the CCTextureUpdateController - OwnPtr<CCGraphicsContext> m_context; - OwnPtr<CCResourceProvider> m_resourceProvider; - OwnPtr<CCTextureUpdateQueue> m_queue; - TextureForUploadTest m_texture; - FakeTextureCopier m_copier; - TextureUploaderForUploadTest m_uploader; - OwnPtr<WebThread> m_thread; - WebCompositorInitializer m_compositorInitializer; - - - // Properties / expectations of this test - int m_fullUploadCountExpected; - int m_partialCountExpected; - int m_totalUploadCountExpected; - int m_maxUploadCountPerUpdate; - - // Dynamic properties of this test - int m_numBeginUploads; - int m_numEndUploads; - int m_numConsecutiveFlushes; - int m_numDanglingUploads; - int m_numTotalUploads; - int m_numTotalFlushes; - int m_numPreviousUploads; - int m_numPreviousFlushes; -}; - -void WebGraphicsContext3DForUploadTest::flush(void) -{ - m_test->onFlush(); -} - -void WebGraphicsContext3DForUploadTest::shallowFlushCHROMIUM(void) -{ - m_test->onFlush(); -} - -void TextureUploaderForUploadTest::beginUploads() -{ - m_test->onBeginUploads(); -} - -void TextureUploaderForUploadTest::endUploads() -{ - m_test->onEndUploads(); -} - -void TextureUploaderForUploadTest::uploadTexture(WebCore::CCResourceProvider*, Parameters) -{ - m_test->onUpload(); -} - - -// ZERO UPLOADS TESTS -TEST_F(CCTextureUpdateControllerTest, ZeroUploads) -{ - appendFullUploadsToUpdateQueue(0); - appendPartialUploadsToUpdateQueue(0); - CCTextureUpdateController::updateTextures(m_resourceProvider.get(), &m_copier, &m_uploader, m_queue.get(), m_totalUploadCountExpected); - - EXPECT_EQ(0, m_numBeginUploads); - EXPECT_EQ(0, m_numEndUploads); - EXPECT_EQ(0, m_numPreviousFlushes); - EXPECT_EQ(0, m_numPreviousUploads); -} - - -// ONE UPLOAD TESTS -TEST_F(CCTextureUpdateControllerTest, OneFullUpload) -{ - appendFullUploadsToUpdateQueue(1); - appendPartialUploadsToUpdateQueue(0); - DebugScopedSetImplThread implThread; - CCTextureUpdateController::updateTextures(m_resourceProvider.get(), &m_copier, &m_uploader, m_queue.get(), m_totalUploadCountExpected); - - EXPECT_EQ(1, m_numBeginUploads); - EXPECT_EQ(1, m_numEndUploads); - EXPECT_EQ(1, m_numPreviousFlushes); - EXPECT_EQ(1, m_numPreviousUploads); -} - -TEST_F(CCTextureUpdateControllerTest, OnePartialUpload) -{ - appendFullUploadsToUpdateQueue(0); - appendPartialUploadsToUpdateQueue(1); - DebugScopedSetImplThread implThread; - CCTextureUpdateController::updateTextures(m_resourceProvider.get(), &m_copier, &m_uploader, m_queue.get(), m_totalUploadCountExpected); - - EXPECT_EQ(1, m_numBeginUploads); - EXPECT_EQ(1, m_numEndUploads); - EXPECT_EQ(1, m_numPreviousFlushes); - EXPECT_EQ(1, m_numPreviousUploads); -} - -TEST_F(CCTextureUpdateControllerTest, OneFullOnePartialUpload) -{ - appendFullUploadsToUpdateQueue(1); - appendPartialUploadsToUpdateQueue(1); - DebugScopedSetImplThread implThread; - CCTextureUpdateController::updateTextures(m_resourceProvider.get(), &m_copier, &m_uploader, m_queue.get(), m_totalUploadCountExpected); - - // We expect the full uploads to be followed by a flush - // before the partial uploads begin. - EXPECT_EQ(1, m_numBeginUploads); - EXPECT_EQ(1, m_numEndUploads); - EXPECT_EQ(2, m_numPreviousFlushes); - EXPECT_EQ(2, m_numPreviousUploads); -} - - -// NO REMAINDER TESTS -// This class of tests upload a number of textures that is a multiple of the flush period. -const int fullUploadFlushMultipler = 7; -const int fullNoRemainderCount = fullUploadFlushMultipler * kFlushPeriodFull; - -const int partialUploadFlushMultipler = 11; -const int partialNoRemainderCount = partialUploadFlushMultipler * kFlushPeriodPartial; - -TEST_F(CCTextureUpdateControllerTest, ManyFullUploadsNoRemainder) -{ - appendFullUploadsToUpdateQueue(fullNoRemainderCount); - appendPartialUploadsToUpdateQueue(0); - DebugScopedSetImplThread implThread; - CCTextureUpdateController::updateTextures(m_resourceProvider.get(), &m_copier, &m_uploader, m_queue.get(), m_totalUploadCountExpected); - - EXPECT_EQ(1, m_numBeginUploads); - EXPECT_EQ(1, m_numEndUploads); - EXPECT_EQ(fullUploadFlushMultipler, m_numPreviousFlushes); - EXPECT_EQ(fullNoRemainderCount, m_numPreviousUploads); -} - -TEST_F(CCTextureUpdateControllerTest, ManyPartialUploadsNoRemainder) -{ - appendFullUploadsToUpdateQueue(0); - appendPartialUploadsToUpdateQueue(partialNoRemainderCount); - DebugScopedSetImplThread implThread; - CCTextureUpdateController::updateTextures(m_resourceProvider.get(), &m_copier, &m_uploader, m_queue.get(), m_totalUploadCountExpected); - - EXPECT_EQ(1, m_numBeginUploads); - EXPECT_EQ(1, m_numEndUploads); - EXPECT_EQ(partialUploadFlushMultipler, m_numPreviousFlushes); - EXPECT_EQ(partialNoRemainderCount, m_numPreviousUploads); -} - -TEST_F(CCTextureUpdateControllerTest, ManyFullManyPartialUploadsNoRemainder) -{ - appendFullUploadsToUpdateQueue(fullNoRemainderCount); - appendPartialUploadsToUpdateQueue(partialNoRemainderCount); - DebugScopedSetImplThread implThread; - CCTextureUpdateController::updateTextures(m_resourceProvider.get(), &m_copier, &m_uploader, m_queue.get(), m_totalUploadCountExpected); - - EXPECT_EQ(1, m_numBeginUploads); - EXPECT_EQ(1, m_numEndUploads); - EXPECT_EQ(fullUploadFlushMultipler + partialUploadFlushMultipler, m_numPreviousFlushes); - EXPECT_EQ(fullNoRemainderCount + partialNoRemainderCount, m_numPreviousUploads); -} - - -// MIN/MAX REMAINDER TESTS -// This class of tests mix and match uploading 1 more and 1 less texture -// than a multiple of the flush period. - -const int fullMinRemainderCount = fullNoRemainderCount + 1; -const int fullMaxRemainderCount = fullNoRemainderCount - 1; -const int partialMinRemainderCount = partialNoRemainderCount + 1; -const int partialMaxRemainderCount = partialNoRemainderCount - 1; - -TEST_F(CCTextureUpdateControllerTest, ManyFullAndPartialMinRemainder) -{ - appendFullUploadsToUpdateQueue(fullMinRemainderCount); - appendPartialUploadsToUpdateQueue(partialMinRemainderCount); - DebugScopedSetImplThread implThread; - CCTextureUpdateController::updateTextures(m_resourceProvider.get(), &m_copier, &m_uploader, m_queue.get(), m_totalUploadCountExpected); - - EXPECT_EQ(1, m_numBeginUploads); - EXPECT_EQ(1, m_numEndUploads); - EXPECT_EQ(fullUploadFlushMultipler + partialUploadFlushMultipler + 2, m_numPreviousFlushes); - EXPECT_EQ(fullMinRemainderCount + partialMinRemainderCount, m_numPreviousUploads); -} - -TEST_F(CCTextureUpdateControllerTest, ManyFullAndPartialUploadsMaxRemainder) -{ - appendFullUploadsToUpdateQueue(fullMaxRemainderCount); - appendPartialUploadsToUpdateQueue(partialMaxRemainderCount); - DebugScopedSetImplThread implThread; - CCTextureUpdateController::updateTextures(m_resourceProvider.get(), &m_copier, &m_uploader, m_queue.get(), m_totalUploadCountExpected); - - EXPECT_EQ(1, m_numBeginUploads); - EXPECT_EQ(1, m_numEndUploads); - EXPECT_EQ(fullUploadFlushMultipler + partialUploadFlushMultipler, m_numPreviousFlushes); - EXPECT_EQ(fullMaxRemainderCount + partialMaxRemainderCount, m_numPreviousUploads); -} - -TEST_F(CCTextureUpdateControllerTest, ManyFullMinRemainderManyPartialMaxRemainder) -{ - appendFullUploadsToUpdateQueue(fullMinRemainderCount); - appendPartialUploadsToUpdateQueue(partialMaxRemainderCount); - DebugScopedSetImplThread implThread; - CCTextureUpdateController::updateTextures(m_resourceProvider.get(), &m_copier, &m_uploader, m_queue.get(), m_totalUploadCountExpected); - - EXPECT_EQ(1, m_numBeginUploads); - EXPECT_EQ(1, m_numEndUploads); - EXPECT_EQ((fullUploadFlushMultipler+1) + partialUploadFlushMultipler, m_numPreviousFlushes); - EXPECT_EQ(fullMinRemainderCount + partialMaxRemainderCount, m_numPreviousUploads); -} - -TEST_F(CCTextureUpdateControllerTest, ManyFullMaxRemainderManyPartialMinRemainder) -{ - appendFullUploadsToUpdateQueue(fullMaxRemainderCount); - appendPartialUploadsToUpdateQueue(partialMinRemainderCount); - DebugScopedSetImplThread implThread; - CCTextureUpdateController::updateTextures(m_resourceProvider.get(), &m_copier, &m_uploader, m_queue.get(), m_totalUploadCountExpected); - - EXPECT_EQ(1, m_numBeginUploads); - EXPECT_EQ(1, m_numEndUploads); - EXPECT_EQ(fullUploadFlushMultipler + (partialUploadFlushMultipler+1), m_numPreviousFlushes); - EXPECT_EQ(fullMaxRemainderCount + partialMinRemainderCount, m_numPreviousUploads); -} - - -// MULTIPLE UPDATE TESTS -// These tests attempt to upload too many textures at once, requiring -// multiple calls to update(). - -int expectedFlushes(int uploads, int flushPeriod) -{ - return (uploads + flushPeriod - 1) / flushPeriod; -} - -TEST_F(CCTextureUpdateControllerTest, TripleUpdateFinalUpdateFullAndPartial) -{ - const int kMaxUploadsPerUpdate = 40; - const int kFullUploads = 100; - const int kPartialUploads = 20; - - int expectedPreviousFlushes = 0; - int expectedPreviousUploads = 0; - - setMaxUploadCountPerUpdate(kMaxUploadsPerUpdate); - appendFullUploadsToUpdateQueue(kFullUploads); - appendPartialUploadsToUpdateQueue(kPartialUploads); - - // First update (40 full) - DebugScopedSetImplThread implThread; - CCTextureUpdateController::updateTextures(m_resourceProvider.get(), &m_copier, &m_uploader, m_queue.get(), kMaxUploadsPerUpdate); - - EXPECT_EQ(1, m_numBeginUploads); - EXPECT_EQ(1, m_numEndUploads); - - expectedPreviousFlushes = expectedFlushes(kMaxUploadsPerUpdate, kFlushPeriodFull); - EXPECT_EQ(expectedPreviousFlushes, m_numPreviousFlushes); - - expectedPreviousUploads = kMaxUploadsPerUpdate; - EXPECT_EQ(expectedPreviousUploads, m_numPreviousUploads); - - // Second update (40 full) - CCTextureUpdateController::updateTextures(m_resourceProvider.get(), &m_copier, &m_uploader, m_queue.get(), kMaxUploadsPerUpdate); - - EXPECT_EQ(2, m_numBeginUploads); - EXPECT_EQ(2, m_numEndUploads); - - expectedPreviousFlushes = expectedFlushes(kMaxUploadsPerUpdate, kFlushPeriodFull); - EXPECT_EQ(expectedPreviousFlushes, m_numPreviousFlushes); - - expectedPreviousUploads = kMaxUploadsPerUpdate; - EXPECT_EQ(expectedPreviousUploads, m_numPreviousUploads); - - // Third update (20 full, 20 partial) - CCTextureUpdateController::updateTextures(m_resourceProvider.get(), &m_copier, &m_uploader, m_queue.get(), kMaxUploadsPerUpdate); - - EXPECT_EQ(3, m_numBeginUploads); - EXPECT_EQ(3, m_numEndUploads); - - expectedPreviousFlushes = expectedFlushes(kFullUploads-kMaxUploadsPerUpdate*2, kFlushPeriodFull) + - expectedFlushes(kPartialUploads, kFlushPeriodPartial); - EXPECT_EQ(expectedPreviousFlushes, m_numPreviousFlushes); - - expectedPreviousUploads = (kFullUploads-kMaxUploadsPerUpdate*2)+kPartialUploads; - EXPECT_EQ(expectedPreviousUploads, m_numPreviousUploads); - - // Final sanity checks - EXPECT_EQ(kFullUploads + kPartialUploads, m_numTotalUploads); -} - -TEST_F(CCTextureUpdateControllerTest, TripleUpdateFinalUpdateAllPartial) -{ - const int kMaxUploadsPerUpdate = 40; - const int kFullUploads = 70; - const int kPartialUploads = 30; - - int expectedPreviousFlushes = 0; - int expectedPreviousUploads = 0; - - setMaxUploadCountPerUpdate(kMaxUploadsPerUpdate); - appendFullUploadsToUpdateQueue(kFullUploads); - appendPartialUploadsToUpdateQueue(kPartialUploads); - - // First update (40 full) - DebugScopedSetImplThread implThread; - CCTextureUpdateController::updateTextures(m_resourceProvider.get(), &m_copier, &m_uploader, m_queue.get(), kMaxUploadsPerUpdate); - - EXPECT_EQ(1, m_numBeginUploads); - EXPECT_EQ(1, m_numEndUploads); - - expectedPreviousFlushes = expectedFlushes(kMaxUploadsPerUpdate, kFlushPeriodFull); - EXPECT_EQ(expectedPreviousFlushes, m_numPreviousFlushes); - - expectedPreviousUploads = kMaxUploadsPerUpdate; - EXPECT_EQ(expectedPreviousUploads, m_numPreviousUploads); - - // Second update (30 full, optionally 10 partial) - CCTextureUpdateController::updateTextures(m_resourceProvider.get(), &m_copier, &m_uploader, m_queue.get(), kMaxUploadsPerUpdate); - - EXPECT_EQ(2, m_numBeginUploads); - EXPECT_EQ(2, m_numEndUploads); - EXPECT_LE(m_numPreviousUploads, kMaxUploadsPerUpdate); - // Be lenient on the exact number of flushes here, as the number of flushes - // will depend on whether some partial uploads were performed. - // onFlush(), onUpload(), and onEndUpload() will do basic flush checks for us anyway. - - // Third update (30 partial OR 20 partial if 10 partial uploaded in second update) - CCTextureUpdateController::updateTextures(m_resourceProvider.get(), &m_copier, &m_uploader, m_queue.get(), kMaxUploadsPerUpdate); - - EXPECT_EQ(3, m_numBeginUploads); - EXPECT_EQ(3, m_numEndUploads); - EXPECT_LE(m_numPreviousUploads, kMaxUploadsPerUpdate); - // Be lenient on the exact number of flushes here as well. - - // Final sanity checks - 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 |