OLD | NEW |
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 #ifndef CC_RESOURCES_RESOURCE_POOL_H_ | 5 #ifndef CC_RESOURCES_RESOURCE_POOL_H_ |
6 #define CC_RESOURCES_RESOURCE_POOL_H_ | 6 #define CC_RESOURCES_RESOURCE_POOL_H_ |
7 | 7 |
8 #include <stddef.h> | 8 #include <stddef.h> |
9 #include <stdint.h> | 9 #include <stdint.h> |
10 | 10 |
(...skipping 15 matching lines...) Expand all Loading... |
26 class CC_EXPORT ResourcePool : public base::trace_event::MemoryDumpProvider, | 26 class CC_EXPORT ResourcePool : public base::trace_event::MemoryDumpProvider, |
27 public base::MemoryCoordinatorClient { | 27 public base::MemoryCoordinatorClient { |
28 public: | 28 public: |
29 // Delay before a resource is considered expired. | 29 // Delay before a resource is considered expired. |
30 static base::TimeDelta kDefaultExpirationDelay; | 30 static base::TimeDelta kDefaultExpirationDelay; |
31 | 31 |
32 static std::unique_ptr<ResourcePool> CreateForGpuMemoryBufferResources( | 32 static std::unique_ptr<ResourcePool> CreateForGpuMemoryBufferResources( |
33 ResourceProvider* resource_provider, | 33 ResourceProvider* resource_provider, |
34 base::SingleThreadTaskRunner* task_runner, | 34 base::SingleThreadTaskRunner* task_runner, |
35 gfx::BufferUsage usage, | 35 gfx::BufferUsage usage, |
36 const base::TimeDelta& expiration_delay) { | 36 const base::TimeDelta& expiration_delay, |
| 37 bool disallow_non_exact_reuse) { |
37 return base::WrapUnique(new ResourcePool(resource_provider, task_runner, | 38 return base::WrapUnique(new ResourcePool(resource_provider, task_runner, |
38 usage, expiration_delay)); | 39 usage, expiration_delay, |
| 40 disallow_non_exact_reuse)); |
39 } | 41 } |
40 | 42 |
41 static std::unique_ptr<ResourcePool> Create( | 43 static std::unique_ptr<ResourcePool> Create( |
42 ResourceProvider* resource_provider, | 44 ResourceProvider* resource_provider, |
43 base::SingleThreadTaskRunner* task_runner, | 45 base::SingleThreadTaskRunner* task_runner, |
44 ResourceProvider::TextureHint hint, | 46 ResourceProvider::TextureHint hint, |
45 const base::TimeDelta& expiration_delay) { | 47 const base::TimeDelta& expiration_delay, |
| 48 bool disallow_non_exact_reuse) { |
46 return base::WrapUnique(new ResourcePool(resource_provider, task_runner, | 49 return base::WrapUnique(new ResourcePool(resource_provider, task_runner, |
47 hint, expiration_delay)); | 50 hint, expiration_delay, |
| 51 disallow_non_exact_reuse)); |
48 } | 52 } |
49 | 53 |
50 ~ResourcePool() override; | 54 ~ResourcePool() override; |
51 | 55 |
52 // Tries to reuse a resource. If none are available, makes a new one. | 56 // Tries to reuse a resource. If none are available, makes a new one. |
53 Resource* AcquireResource(const gfx::Size& size, | 57 Resource* AcquireResource(const gfx::Size& size, |
54 ResourceFormat format, | 58 ResourceFormat format, |
55 const gfx::ColorSpace& color_space); | 59 const gfx::ColorSpace& color_space); |
56 | 60 |
57 // Tries to acquire the resource with |previous_content_id| for us in partial | 61 // Tries to acquire the resource with |previous_content_id| for us in partial |
(...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
95 } | 99 } |
96 size_t GetBusyResourceCountForTesting() const { | 100 size_t GetBusyResourceCountForTesting() const { |
97 return busy_resources_.size(); | 101 return busy_resources_.size(); |
98 } | 102 } |
99 | 103 |
100 protected: | 104 protected: |
101 // Constructor for creating GPU memory buffer resources. | 105 // Constructor for creating GPU memory buffer resources. |
102 ResourcePool(ResourceProvider* resource_provider, | 106 ResourcePool(ResourceProvider* resource_provider, |
103 base::SingleThreadTaskRunner* task_runner, | 107 base::SingleThreadTaskRunner* task_runner, |
104 gfx::BufferUsage usage, | 108 gfx::BufferUsage usage, |
105 const base::TimeDelta& expiration_delay); | 109 const base::TimeDelta& expiration_delay, |
| 110 bool disallow_non_exact_reuse); |
106 | 111 |
107 // Constructor for creating standard resources. | 112 // Constructor for creating standard resources. |
108 ResourcePool(ResourceProvider* resource_provider, | 113 ResourcePool(ResourceProvider* resource_provider, |
109 base::SingleThreadTaskRunner* task_runner, | 114 base::SingleThreadTaskRunner* task_runner, |
110 ResourceProvider::TextureHint hint, | 115 ResourceProvider::TextureHint hint, |
111 const base::TimeDelta& expiration_delay); | 116 const base::TimeDelta& expiration_delay, |
| 117 bool disallow_non_exact_reuse); |
112 | 118 |
113 private: | 119 private: |
114 FRIEND_TEST_ALL_PREFIXES(ResourcePoolTest, ReuseResource); | 120 FRIEND_TEST_ALL_PREFIXES(ResourcePoolTest, ReuseResource); |
| 121 FRIEND_TEST_ALL_PREFIXES(ResourcePoolTest, ExactRequestsRespected); |
115 class PoolResource : public ScopedResource { | 122 class PoolResource : public ScopedResource { |
116 public: | 123 public: |
117 static std::unique_ptr<PoolResource> Create( | 124 static std::unique_ptr<PoolResource> Create( |
118 ResourceProvider* resource_provider) { | 125 ResourceProvider* resource_provider) { |
119 return base::WrapUnique(new PoolResource(resource_provider)); | 126 return base::WrapUnique(new PoolResource(resource_provider)); |
120 } | 127 } |
121 void OnMemoryDump(base::trace_event::ProcessMemoryDump* pmd, | 128 void OnMemoryDump(base::trace_event::ProcessMemoryDump* pmd, |
122 const ResourceProvider* resource_provider, | 129 const ResourceProvider* resource_provider, |
123 bool is_free) const; | 130 bool is_free) const; |
124 | 131 |
(...skipping 54 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
179 using ResourceDeque = std::deque<std::unique_ptr<PoolResource>>; | 186 using ResourceDeque = std::deque<std::unique_ptr<PoolResource>>; |
180 ResourceDeque unused_resources_; | 187 ResourceDeque unused_resources_; |
181 ResourceDeque busy_resources_; | 188 ResourceDeque busy_resources_; |
182 | 189 |
183 using InUseResourceMap = std::map<ResourceId, std::unique_ptr<PoolResource>>; | 190 using InUseResourceMap = std::map<ResourceId, std::unique_ptr<PoolResource>>; |
184 InUseResourceMap in_use_resources_; | 191 InUseResourceMap in_use_resources_; |
185 | 192 |
186 scoped_refptr<base::SingleThreadTaskRunner> task_runner_; | 193 scoped_refptr<base::SingleThreadTaskRunner> task_runner_; |
187 bool evict_expired_resources_pending_ = false; | 194 bool evict_expired_resources_pending_ = false; |
188 const base::TimeDelta resource_expiration_delay_; | 195 const base::TimeDelta resource_expiration_delay_; |
| 196 const bool disallow_non_exact_reuse_ = false; |
189 | 197 |
190 base::WeakPtrFactory<ResourcePool> weak_ptr_factory_; | 198 base::WeakPtrFactory<ResourcePool> weak_ptr_factory_; |
191 | 199 |
192 DISALLOW_COPY_AND_ASSIGN(ResourcePool); | 200 DISALLOW_COPY_AND_ASSIGN(ResourcePool); |
193 }; | 201 }; |
194 | 202 |
195 } // namespace cc | 203 } // namespace cc |
196 | 204 |
197 #endif // CC_RESOURCES_RESOURCE_POOL_H_ | 205 #endif // CC_RESOURCES_RESOURCE_POOL_H_ |
OLD | NEW |