diff options
Diffstat (limited to 'chromium/cc/resources/resource_update_controller.h')
-rw-r--r-- | chromium/cc/resources/resource_update_controller.h | 90 |
1 files changed, 90 insertions, 0 deletions
diff --git a/chromium/cc/resources/resource_update_controller.h b/chromium/cc/resources/resource_update_controller.h new file mode 100644 index 00000000000..97138bcf5d5 --- /dev/null +++ b/chromium/cc/resources/resource_update_controller.h @@ -0,0 +1,90 @@ +// 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 CC_RESOURCES_RESOURCE_UPDATE_CONTROLLER_H_ +#define CC_RESOURCES_RESOURCE_UPDATE_CONTROLLER_H_ + +#include "base/basictypes.h" +#include "base/memory/scoped_ptr.h" +#include "base/memory/weak_ptr.h" +#include "base/time/time.h" +#include "cc/base/cc_export.h" +#include "cc/resources/resource_update_queue.h" + +namespace base { class SingleThreadTaskRunner; } + +namespace cc { + +class ResourceProvider; + +class ResourceUpdateControllerClient { + public: + virtual void ReadyToFinalizeTextureUpdates() = 0; + + protected: + virtual ~ResourceUpdateControllerClient() {} +}; + +class CC_EXPORT ResourceUpdateController { + public: + static scoped_ptr<ResourceUpdateController> Create( + ResourceUpdateControllerClient* client, + base::SingleThreadTaskRunner* task_runner, + scoped_ptr<ResourceUpdateQueue> queue, + ResourceProvider* resource_provider) { + return make_scoped_ptr(new ResourceUpdateController( + client, task_runner, queue.Pass(), resource_provider)); + } + static size_t MaxPartialTextureUpdates(); + + virtual ~ResourceUpdateController(); + + // Discard uploads to textures that were evicted on the impl thread. + void DiscardUploadsToEvictedResources(); + + void PerformMoreUpdates(base::TimeTicks time_limit); + void Finalize(); + + + // Virtual for testing. + virtual base::TimeTicks Now() const; + virtual base::TimeDelta UpdateMoreTexturesTime() const; + virtual size_t UpdateMoreTexturesSize() const; + + protected: + ResourceUpdateController(ResourceUpdateControllerClient* client, + base::SingleThreadTaskRunner* task_runner, + scoped_ptr<ResourceUpdateQueue> queue, + ResourceProvider* resource_provider); + + private: + static size_t MaxFullUpdatesPerTick(ResourceProvider* resource_provider); + + size_t MaxBlockingUpdates() const; + base::TimeDelta PendingUpdateTime() const; + + void UpdateTexture(ResourceUpdate update); + + // This returns true when there were textures left to update. + bool UpdateMoreTexturesIfEnoughTimeRemaining(); + void UpdateMoreTexturesNow(); + void OnTimerFired(); + + ResourceUpdateControllerClient* client_; + scoped_ptr<ResourceUpdateQueue> queue_; + bool contents_textures_purged_; + ResourceProvider* resource_provider_; + base::TimeTicks time_limit_; + size_t texture_updates_per_tick_; + bool first_update_attempt_; + base::SingleThreadTaskRunner* task_runner_; + base::WeakPtrFactory<ResourceUpdateController> weak_factory_; + bool task_posted_; + + DISALLOW_COPY_AND_ASSIGN(ResourceUpdateController); +}; + +} // namespace cc + +#endif // CC_RESOURCES_RESOURCE_UPDATE_CONTROLLER_H_ |