| 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 | 
|---|