summaryrefslogtreecommitdiffstats
path: root/cc/resources/resource_pool.cc
diff options
context:
space:
mode:
authoraelias@chromium.org <aelias@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2013-08-03 02:41:07 +0000
committeraelias@chromium.org <aelias@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2013-08-03 02:41:07 +0000
commit3f2ff115793c21854acf80b50532a6b03dd172a0 (patch)
tree90b8fb95da57adfe7e8d1855af231a0074118206 /cc/resources/resource_pool.cc
parentd600df7d219890dd9a101922b25d3bff9f4195c3 (diff)
downloadchromium_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.cc13
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_)