diff options
author | reveman@chromium.org <reveman@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2013-08-16 05:47:59 +0000 |
---|---|---|
committer | reveman@chromium.org <reveman@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2013-08-16 05:47:59 +0000 |
commit | d069439a2f947e1af88863ec3d9699c6fbafc261 (patch) | |
tree | 334682075751607ab3fa921778242bec87045cbd /cc/resources/resource_pool.h | |
parent | b168871584f817ee586b5482bec6b4876ea66da7 (diff) | |
download | chromium_src-d069439a2f947e1af88863ec3d9699c6fbafc261.zip chromium_src-d069439a2f947e1af88863ec3d9699c6fbafc261.tar.gz chromium_src-d069439a2f947e1af88863ec3d9699c6fbafc261.tar.bz2 |
cc: Prevent the tile manager from allocating more memory than allowed.
This adds a new ReduceMemoryUsage function to the resource pool. By
calling this function in TileManager::ScheduleTasks after creating
all resources needed to to call RasterWorkerPool::ScheduleTasks
we free enough unused resources to ensure that we never go above
the limit.
This also fixes the use of the num_resources_limit by correctly
accounting for all allocated resources.
BUG=273140
TEST=cc_unittests --gtest_filter=TileManagerTests/TileManagerTest.RespectMemoryLimit*
Review URL: https://chromiumcodereview.appspot.com/23231002
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@217951 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'cc/resources/resource_pool.h')
-rw-r--r-- | cc/resources/resource_pool.h | 19 |
1 files changed, 12 insertions, 7 deletions
diff --git a/cc/resources/resource_pool.h b/cc/resources/resource_pool.h index 309bf33..771650e 100644 --- a/cc/resources/resource_pool.h +++ b/cc/resources/resource_pool.h @@ -40,9 +40,11 @@ class CC_EXPORT ResourcePool { GLenum format); void ReleaseResource(scoped_ptr<ResourcePool::Resource>); - void SetMemoryUsageLimits(size_t max_memory_usage_bytes, - size_t max_unused_memory_usage_bytes, - size_t num_resources_limit); + void SetResourceUsageLimits(size_t max_memory_usage_bytes, + size_t max_unused_memory_usage_bytes, + size_t max_resource_count); + + void ReduceResourceUsage(); size_t total_memory_usage_bytes() const { return memory_usage_bytes_; @@ -50,23 +52,26 @@ class CC_EXPORT ResourcePool { size_t acquired_memory_usage_bytes() const { return memory_usage_bytes_ - unused_memory_usage_bytes_; } - size_t NumResources() const { return resources_.size(); } + size_t acquired_resource_count() const { + return resource_count_ - unused_resources_.size(); + } protected: explicit ResourcePool(ResourceProvider* resource_provider); - bool MemoryUsageTooHigh(); + bool ResourceUsageTooHigh(); private: ResourceProvider* resource_provider_; size_t max_memory_usage_bytes_; size_t max_unused_memory_usage_bytes_; + size_t max_resource_count_; size_t memory_usage_bytes_; size_t unused_memory_usage_bytes_; - size_t num_resources_limit_; + size_t resource_count_; typedef std::list<Resource*> ResourceList; - ResourceList resources_; + ResourceList unused_resources_; DISALLOW_COPY_AND_ASSIGN(ResourcePool); }; |