diff options
author | aelias@chromium.org <aelias@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2013-08-03 02:41:07 +0000 |
---|---|---|
committer | aelias@chromium.org <aelias@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2013-08-03 02:41:07 +0000 |
commit | 3f2ff115793c21854acf80b50532a6b03dd172a0 (patch) | |
tree | 90b8fb95da57adfe7e8d1855af231a0074118206 /cc/resources/resource_pool.cc | |
parent | d600df7d219890dd9a101922b25d3bff9f4195c3 (diff) | |
download | chromium_src-3f2ff115793c21854acf80b50532a6b03dd172a0.zip chromium_src-3f2ff115793c21854acf80b50532a6b03dd172a0.tar.gz chromium_src-3f2ff115793c21854acf80b50532a6b03dd172a0.tar.bz2 |
Add memory policy limit by number of resources.
Currently, MemoryPolicy only limits by number of bytes allocated. For
resources like Android gralloc buffers which also have a process or
system-wide limit, we also need to limit by count of the resource. This
patch implements this and sets a limit of 100 from the AndroidWebView
OutputSurface.
As additional cleanup, I also moved the ignore-0-memory-policy logic to
OutputSurface as it doesn't seem appropriate in CC.
New test parametrization for TileManagerTests.
NOTRY=true
BUG=266619
Review URL: https://chromiumcodereview.appspot.com/20843007
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@215464 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'cc/resources/resource_pool.cc')
-rw-r--r-- | cc/resources/resource_pool.cc | 13 |
1 files changed, 9 insertions, 4 deletions
diff --git a/cc/resources/resource_pool.cc b/cc/resources/resource_pool.cc index 7bf482c..5835db5 100644 --- a/cc/resources/resource_pool.cc +++ b/cc/resources/resource_pool.cc @@ -32,11 +32,12 @@ ResourcePool::ResourcePool(ResourceProvider* resource_provider) max_memory_usage_bytes_(0), max_unused_memory_usage_bytes_(0), memory_usage_bytes_(0), - unused_memory_usage_bytes_(0) { + unused_memory_usage_bytes_(0), + num_resources_limit_(0) { } ResourcePool::~ResourcePool() { - SetMaxMemoryUsageBytes(0, 0); + SetMemoryUsageLimits(0, 0, 0); } scoped_ptr<ResourcePool::Resource> ResourcePool::AcquireResource( @@ -85,11 +86,13 @@ void ResourcePool::ReleaseResource( resources_.push_back(resource.release()); } -void ResourcePool::SetMaxMemoryUsageBytes( +void ResourcePool::SetMemoryUsageLimits( size_t max_memory_usage_bytes, - size_t max_unused_memory_usage_bytes) { + size_t max_unused_memory_usage_bytes, + size_t num_resources_limit) { max_memory_usage_bytes_ = max_memory_usage_bytes; max_unused_memory_usage_bytes_ = max_unused_memory_usage_bytes; + num_resources_limit_ = num_resources_limit; while (!resources_.empty()) { if (!MemoryUsageTooHigh()) @@ -106,6 +109,8 @@ void ResourcePool::SetMaxMemoryUsageBytes( } bool ResourcePool::MemoryUsageTooHigh() { + if (resources_.size() > num_resources_limit_) + return true; if (memory_usage_bytes_ > max_memory_usage_bytes_) return true; if (unused_memory_usage_bytes_ > max_unused_memory_usage_bytes_) |