| Index: cc/resources/resource_pool.cc
|
| diff --git a/cc/resources/resource_pool.cc b/cc/resources/resource_pool.cc
|
| index 5835db565d31ec048c44d252a38421722cb1b1c8..208ab11357333de89363e0e1954760bb7f175343 100644
|
| --- a/cc/resources/resource_pool.cc
|
| +++ b/cc/resources/resource_pool.cc
|
| @@ -31,9 +31,10 @@ ResourcePool::ResourcePool(ResourceProvider* resource_provider)
|
| : resource_provider_(resource_provider),
|
| max_memory_usage_bytes_(0),
|
| max_unused_memory_usage_bytes_(0),
|
| + max_resource_count_(0),
|
| memory_usage_bytes_(0),
|
| unused_memory_usage_bytes_(0),
|
| - num_resources_limit_(0) {
|
| + resource_count_(0) {
|
| }
|
|
|
| ResourcePool::~ResourcePool() {
|
| @@ -63,8 +64,7 @@ scoped_ptr<ResourcePool::Resource> ResourcePool::AcquireResource(
|
| }
|
|
|
| // Create new resource.
|
| - Resource* resource = new Resource(
|
| - resource_provider_, size, format);
|
| + Resource* resource = new Resource(resource_provider_, size, format);
|
|
|
| // Extend all read locks on all resources until the resource is
|
| // finished being used, such that we know when resources are
|
| @@ -72,6 +72,7 @@ scoped_ptr<ResourcePool::Resource> ResourcePool::AcquireResource(
|
| resource_provider_->EnableReadLockFences(resource->id(), true);
|
|
|
| memory_usage_bytes_ += resource->bytes();
|
| + ++resource_count_;
|
| return make_scoped_ptr(resource);
|
| }
|
|
|
| @@ -79,6 +80,7 @@ void ResourcePool::ReleaseResource(
|
| scoped_ptr<ResourcePool::Resource> resource) {
|
| if (MemoryUsageTooHigh()) {
|
| memory_usage_bytes_ -= resource->bytes();
|
| + --resource_count_;
|
| return;
|
| }
|
|
|
| @@ -89,11 +91,15 @@ void ResourcePool::ReleaseResource(
|
| void ResourcePool::SetMemoryUsageLimits(
|
| size_t max_memory_usage_bytes,
|
| size_t max_unused_memory_usage_bytes,
|
| - size_t num_resources_limit) {
|
| + size_t max_resource_count) {
|
| max_memory_usage_bytes_ = max_memory_usage_bytes;
|
| max_unused_memory_usage_bytes_ = max_unused_memory_usage_bytes;
|
| - num_resources_limit_ = num_resources_limit;
|
| + max_resource_count_ = max_resource_count;
|
|
|
| + ReduceMemoryUsage();
|
| +}
|
| +
|
| +void ResourcePool::ReduceMemoryUsage() {
|
| while (!resources_.empty()) {
|
| if (!MemoryUsageTooHigh())
|
| break;
|
| @@ -104,12 +110,13 @@ void ResourcePool::SetMemoryUsageLimits(
|
| resources_.pop_back();
|
| memory_usage_bytes_ -= resource->bytes();
|
| unused_memory_usage_bytes_ -= resource->bytes();
|
| + --resource_count_;
|
| delete resource;
|
| }
|
| }
|
|
|
| bool ResourcePool::MemoryUsageTooHigh() {
|
| - if (resources_.size() > num_resources_limit_)
|
| + if (resource_count_ > max_resource_count_)
|
| return true;
|
| if (memory_usage_bytes_ > max_memory_usage_bytes_)
|
| return true;
|
|
|