diff options
author | jamesr@chromium.org <jamesr@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2012-08-30 20:03:38 +0000 |
---|---|---|
committer | jamesr@chromium.org <jamesr@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2012-08-30 20:03:38 +0000 |
commit | 23bbb41cbfef41530bd637d7fe46c1fb8f571133 (patch) | |
tree | 3118d3763fe490d57a47c3e938ad84b466bd595a /cc/CCTextureUpdateController.cpp | |
parent | 6de743ab3928a797cc16e97b8f8091f408b4a127 (diff) | |
download | chromium_src-23bbb41cbfef41530bd637d7fe46c1fb8f571133.zip chromium_src-23bbb41cbfef41530bd637d7fe46c1fb8f571133.tar.gz chromium_src-23bbb41cbfef41530bd637d7fe46c1fb8f571133.tar.bz2 |
Roll CC snapshot up to WK r127064
TBR=nduca@chromium.org
BUG=
Review URL: https://chromiumcodereview.appspot.com/10889048
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@154239 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'cc/CCTextureUpdateController.cpp')
-rw-r--r-- | cc/CCTextureUpdateController.cpp | 40 |
1 files changed, 26 insertions, 14 deletions
diff --git a/cc/CCTextureUpdateController.cpp b/cc/CCTextureUpdateController.cpp index 25d41cc..9c448be 100644 --- a/cc/CCTextureUpdateController.cpp +++ b/cc/CCTextureUpdateController.cpp @@ -92,8 +92,9 @@ void CCTextureUpdateController::updateTextures(CCResourceProvider* resourceProvi copier->flush(); } -CCTextureUpdateController::CCTextureUpdateController(CCThread* thread, PassOwnPtr<CCTextureUpdateQueue> queue, CCResourceProvider* resourceProvider, TextureCopier* copier, TextureUploader* uploader) - : m_timer(adoptPtr(new CCTimer(thread, this))) +CCTextureUpdateController::CCTextureUpdateController(CCTextureUpdateControllerClient* client, CCThread* thread, PassOwnPtr<CCTextureUpdateQueue> queue, CCResourceProvider* resourceProvider, TextureCopier* copier, TextureUploader* uploader) + : m_client(client) + , m_timer(adoptPtr(new CCTimer(thread, this))) , m_queue(queue) , m_resourceProvider(resourceProvider) , m_copier(copier) @@ -107,34 +108,40 @@ CCTextureUpdateController::~CCTextureUpdateController() { } -bool CCTextureUpdateController::hasMoreUpdates() const -{ - return m_queue->hasMoreUpdates(); -} - void CCTextureUpdateController::updateMoreTextures(double monotonicTimeLimit) { + ASSERT(monotonicTimeLimit >= m_monotonicTimeLimit); m_monotonicTimeLimit = monotonicTimeLimit; - if (!m_queue->hasMoreUpdates()) + // Update already in progress. + if (m_timer->isActive()) return; // Call updateMoreTexturesNow() directly unless it's the first update // attempt. This ensures that we empty the update queue in a finite // amount of time. if (m_firstUpdateAttempt) { - updateMoreTexturesIfEnoughTimeRemaining(); + // Post a 0-delay task when no updates were left. When it runs, + // updateTexturesCompleted() will be called. + if (!updateMoreTexturesIfEnoughTimeRemaining()) + m_timer->startOneShot(0); + m_firstUpdateAttempt = false; } else updateMoreTexturesNow(); } -void CCTextureUpdateController::onTimerFired() +void CCTextureUpdateController::discardUploads() { - if (!m_queue->hasMoreUpdates()) - return; + // CCTextureUpdateControllerClient::updateTexturesCompleted will be + // called when all remaining texture copies are done. + m_queue->clearUploads(); +} - updateMoreTexturesIfEnoughTimeRemaining(); +void CCTextureUpdateController::onTimerFired() +{ + if (!updateMoreTexturesIfEnoughTimeRemaining()) + m_client->updateTexturesCompleted(); } double CCTextureUpdateController::monotonicTimeNow() const @@ -152,11 +159,16 @@ size_t CCTextureUpdateController::updateMoreTexturesSize() const return textureUpdatesPerTick; } -void CCTextureUpdateController::updateMoreTexturesIfEnoughTimeRemaining() +bool CCTextureUpdateController::updateMoreTexturesIfEnoughTimeRemaining() { + if (!m_queue->hasMoreUpdates()) + return false; + bool hasTimeRemaining = monotonicTimeNow() < m_monotonicTimeLimit - updateMoreTexturesTime(); if (hasTimeRemaining) updateMoreTexturesNow(); + + return true; } void CCTextureUpdateController::updateMoreTexturesNow() |