// Copyright 2012 The Chromium Authors. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. #ifndef CCTextureUpdateController_h #define CCTextureUpdateController_h #include "base/basictypes.h" #include "base/memory/scoped_ptr.h" #include "base/time.h" #include "cc/texture_update_queue.h" #include "cc/timer.h" namespace cc { class TextureUploader; class CCTextureUpdateControllerClient { public: virtual void readyToFinalizeTextureUpdates() = 0; protected: virtual ~CCTextureUpdateControllerClient() { } }; class CCTextureUpdateController : public CCTimerClient { public: static scoped_ptr create(CCTextureUpdateControllerClient* client, CCThread* thread, scoped_ptr queue, CCResourceProvider* resourceProvider, TextureUploader* uploader) { return make_scoped_ptr(new CCTextureUpdateController(client, thread, queue.Pass(), resourceProvider, uploader)); } static size_t maxPartialTextureUpdates(); virtual ~CCTextureUpdateController(); // Discard uploads to textures that were evicted on the impl thread. void discardUploadsToEvictedResources(); void performMoreUpdates(base::TimeTicks timeLimit); void finalize(); // CCTimerClient implementation. virtual void onTimerFired() OVERRIDE; // Virtual for testing. virtual base::TimeTicks now() const; virtual base::TimeDelta updateMoreTexturesTime() const; virtual size_t updateMoreTexturesSize() const; protected: CCTextureUpdateController(CCTextureUpdateControllerClient*, CCThread*, scoped_ptr, CCResourceProvider*, TextureUploader*); static size_t maxFullUpdatesPerTick(TextureUploader*); size_t maxBlockingUpdates() const; // This returns true when there were textures left to update. bool updateMoreTexturesIfEnoughTimeRemaining(); void updateMoreTexturesNow(); CCTextureUpdateControllerClient* m_client; scoped_ptr m_timer; scoped_ptr m_queue; bool m_contentsTexturesPurged; CCResourceProvider* m_resourceProvider; TextureUploader* m_uploader; base::TimeTicks m_timeLimit; size_t m_textureUpdatesPerTick; bool m_firstUpdateAttempt; private: DISALLOW_COPY_AND_ASSIGN(CCTextureUpdateController); }; } // namespace cc #endif // CCTextureUpdateController_h