Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(476)

Side by Side Diff: cc/resource_pool.cc

Issue 11578019: Remove the pools from the ResourceProvider. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Re-resolve against HEAD Created 8 years ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « cc/resource_pool.h ('k') | cc/resource_provider.h » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright 2012 The Chromium Authors. All rights reserved. 1 // Copyright 2012 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "cc/resource_pool.h" 5 #include "cc/resource_pool.h"
6 6
7 #include "cc/resource_provider.h" 7 #include "cc/resource_provider.h"
8 8
9 namespace cc { 9 namespace cc {
10 10
11 ResourcePool::Resource::Resource(cc::ResourceProvider* resource_provider, 11 ResourcePool::Resource::Resource(cc::ResourceProvider* resource_provider,
12 cc::Renderer::ResourcePool pool_id,
13 const gfx::Size& size, 12 const gfx::Size& size,
14 GLenum format) 13 GLenum format)
15 : cc::Resource(resource_provider->createResource( 14 : cc::Resource(resource_provider->createResource(
16 pool_id,
17 size, 15 size,
18 format, 16 format,
19 ResourceProvider::TextureUsageAny), 17 ResourceProvider::TextureUsageAny),
20 size, 18 size,
21 format), 19 format),
22 resource_provider_(resource_provider) { 20 resource_provider_(resource_provider) {
23 DCHECK(id()); 21 DCHECK(id());
24 } 22 }
25 23
26 ResourcePool::Resource::~Resource() { 24 ResourcePool::Resource::~Resource() {
27 DCHECK(id()); 25 DCHECK(id());
28 DCHECK(resource_provider_); 26 DCHECK(resource_provider_);
29 resource_provider_->deleteResource(id()); 27 resource_provider_->deleteResource(id());
30 } 28 }
31 29
32 ResourcePool::ResourcePool(ResourceProvider* resource_provider, 30 ResourcePool::ResourcePool(ResourceProvider* resource_provider)
33 Renderer::ResourcePool pool_id)
34 : resource_provider_(resource_provider), 31 : resource_provider_(resource_provider),
35 pool_id_(pool_id),
36 max_memory_usage_bytes_(0), 32 max_memory_usage_bytes_(0),
37 memory_usage_bytes_(0) { 33 memory_usage_bytes_(0) {
38 } 34 }
39 35
40 ResourcePool::~ResourcePool() { 36 ResourcePool::~ResourcePool() {
41 SetMaxMemoryUsageBytes(0); 37 SetMaxMemoryUsageBytes(0);
42 } 38 }
43 39
44 scoped_ptr<ResourcePool::Resource> ResourcePool::AcquireResource( 40 scoped_ptr<ResourcePool::Resource> ResourcePool::AcquireResource(
45 const gfx::Size& size, GLenum format) { 41 const gfx::Size& size, GLenum format) {
46 for (ResourceList::iterator it = resources_.begin(); 42 for (ResourceList::iterator it = resources_.begin();
47 it != resources_.end(); ++it) { 43 it != resources_.end(); ++it) {
48 Resource* resource = *it; 44 Resource* resource = *it;
49 45
50 if (resource->size() != size) 46 if (resource->size() != size)
51 continue; 47 continue;
52 if (resource->format() != format) 48 if (resource->format() != format)
53 continue; 49 continue;
54 50
55 resources_.erase(it); 51 resources_.erase(it);
56 return make_scoped_ptr(resource); 52 return make_scoped_ptr(resource);
57 } 53 }
58 54
59 // Create new resource. 55 // Create new resource.
60 Resource* resource = new Resource( 56 Resource* resource = new Resource(
61 resource_provider_, pool_id_, size, format); 57 resource_provider_, size, format);
62 memory_usage_bytes_ += resource->bytes(); 58 memory_usage_bytes_ += resource->bytes();
63 return make_scoped_ptr(resource); 59 return make_scoped_ptr(resource);
64 } 60 }
65 61
66 void ResourcePool::ReleaseResource( 62 void ResourcePool::ReleaseResource(
67 scoped_ptr<ResourcePool::Resource> resource) { 63 scoped_ptr<ResourcePool::Resource> resource) {
68 if (memory_usage_bytes_ > max_memory_usage_bytes_) { 64 if (memory_usage_bytes_ > max_memory_usage_bytes_) {
69 memory_usage_bytes_ -= resource->bytes(); 65 memory_usage_bytes_ -= resource->bytes();
70 return; 66 return;
71 } 67 }
72 68
73 resources_.push_back(resource.release()); 69 resources_.push_back(resource.release());
74 } 70 }
75 71
76 void ResourcePool::SetMaxMemoryUsageBytes(size_t max_memory_usage_bytes) { 72 void ResourcePool::SetMaxMemoryUsageBytes(size_t max_memory_usage_bytes) {
77 max_memory_usage_bytes_ = max_memory_usage_bytes; 73 max_memory_usage_bytes_ = max_memory_usage_bytes;
78 74
79 while (!resources_.empty()) { 75 while (!resources_.empty()) {
80 if (memory_usage_bytes_ <= max_memory_usage_bytes_) 76 if (memory_usage_bytes_ <= max_memory_usage_bytes_)
81 break; 77 break;
82 Resource* resource = resources_.front(); 78 Resource* resource = resources_.front();
83 resources_.pop_front(); 79 resources_.pop_front();
84 memory_usage_bytes_ -= resource->bytes(); 80 memory_usage_bytes_ -= resource->bytes();
85 delete resource; 81 delete resource;
86 } 82 }
87 } 83 }
88 84
89 } // namespace cc 85 } // namespace cc
OLDNEW
« no previous file with comments | « cc/resource_pool.h ('k') | cc/resource_provider.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698