| 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 24 matching lines...) Expand all Loading... |
| 35 static std::unique_ptr<ResourcePool> Create( | 35 static std::unique_ptr<ResourcePool> Create( |
| 36 ResourceProvider* resource_provider, | 36 ResourceProvider* resource_provider, |
| 37 base::SingleThreadTaskRunner* task_runner) { | 37 base::SingleThreadTaskRunner* task_runner) { |
| 38 return base::WrapUnique( | 38 return base::WrapUnique( |
| 39 new ResourcePool(resource_provider, task_runner, false)); | 39 new ResourcePool(resource_provider, task_runner, false)); |
| 40 } | 40 } |
| 41 | 41 |
| 42 ~ResourcePool() override; | 42 ~ResourcePool() override; |
| 43 | 43 |
| 44 Resource* AcquireResource(const gfx::Size& size, ResourceFormat format); | 44 Resource* AcquireResource(const gfx::Size& size, ResourceFormat format); |
| 45 Resource* TryAcquireResourceWithContentId(uint64_t content_id); | 45 |
| 46 void ReleaseResource(Resource* resource, uint64_t content_id); | 46 // Tries to acquire the resource with |previous_content_id| for us in partial |
| 47 // raster. If successful, this function will retun the invalidated rect which |
| 48 // must be re-rastered in |total_invalidated_rect|. |
| 49 Resource* TryAcquireResourceForPartialRaster( |
| 50 uint64_t new_content_id, |
| 51 const gfx::Rect& new_invalidated_rect, |
| 52 uint64_t previous_content_id, |
| 53 gfx::Rect* total_invalidated_rect); |
| 54 |
| 55 // Called when a resource's content has been fully replaced (and is completely |
| 56 // valid). Updates the resource's content ID to its new value. |
| 57 void OnContentReplaced(ResourceId resource_id, uint64_t content_id); |
| 58 void ReleaseResource(Resource* resource); |
| 47 | 59 |
| 48 void SetResourceUsageLimits(size_t max_memory_usage_bytes, | 60 void SetResourceUsageLimits(size_t max_memory_usage_bytes, |
| 49 size_t max_resource_count); | 61 size_t max_resource_count); |
| 50 | 62 |
| 51 void ReduceResourceUsage(); | 63 void ReduceResourceUsage(); |
| 52 void CheckBusyResources(); | 64 void CheckBusyResources(); |
| 53 | 65 |
| 54 size_t memory_usage_bytes() const { return in_use_memory_usage_bytes_; } | 66 size_t memory_usage_bytes() const { return in_use_memory_usage_bytes_; } |
| 55 size_t resource_count() const { return in_use_resources_.size(); } | 67 size_t resource_count() const { return in_use_resources_.size(); } |
| 56 | 68 |
| (...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 88 void OnMemoryDump(base::trace_event::ProcessMemoryDump* pmd, | 100 void OnMemoryDump(base::trace_event::ProcessMemoryDump* pmd, |
| 89 const ResourceProvider* resource_provider, | 101 const ResourceProvider* resource_provider, |
| 90 bool is_free) const; | 102 bool is_free) const; |
| 91 | 103 |
| 92 uint64_t content_id() const { return content_id_; } | 104 uint64_t content_id() const { return content_id_; } |
| 93 void set_content_id(uint64_t content_id) { content_id_ = content_id; } | 105 void set_content_id(uint64_t content_id) { content_id_ = content_id; } |
| 94 | 106 |
| 95 base::TimeTicks last_usage() const { return last_usage_; } | 107 base::TimeTicks last_usage() const { return last_usage_; } |
| 96 void set_last_usage(base::TimeTicks time) { last_usage_ = time; } | 108 void set_last_usage(base::TimeTicks time) { last_usage_ = time; } |
| 97 | 109 |
| 110 gfx::Rect invalidated_rect() const { return invalidated_rect_; } |
| 111 void set_invalidated_rect(const gfx::Rect& invalidated_rect) { |
| 112 invalidated_rect_ = invalidated_rect; |
| 113 } |
| 114 |
| 98 private: | 115 private: |
| 99 explicit PoolResource(ResourceProvider* resource_provider) | 116 explicit PoolResource(ResourceProvider* resource_provider) |
| 100 : ScopedResource(resource_provider), content_id_(0) {} | 117 : ScopedResource(resource_provider), content_id_(0) {} |
| 101 uint64_t content_id_; | 118 uint64_t content_id_; |
| 102 base::TimeTicks last_usage_; | 119 base::TimeTicks last_usage_; |
| 120 gfx::Rect invalidated_rect_; |
| 103 }; | 121 }; |
| 104 | 122 |
| 105 void DidFinishUsingResource(std::unique_ptr<PoolResource> resource); | 123 void DidFinishUsingResource(std::unique_ptr<PoolResource> resource); |
| 106 void DeleteResource(std::unique_ptr<PoolResource> resource); | 124 void DeleteResource(std::unique_ptr<PoolResource> resource); |
| 107 | 125 |
| 108 // Functions which manage periodic eviction of expired resources. | 126 // Functions which manage periodic eviction of expired resources. |
| 109 void ScheduleEvictExpiredResourcesIn(base::TimeDelta time_from_now); | 127 void ScheduleEvictExpiredResourcesIn(base::TimeDelta time_from_now); |
| 110 void EvictExpiredResources(); | 128 void EvictExpiredResources(); |
| 111 void EvictResourcesNotUsedSince(base::TimeTicks time_limit); | 129 void EvictResourcesNotUsedSince(base::TimeTicks time_limit); |
| 112 bool HasEvictableResources() const; | 130 bool HasEvictableResources() const; |
| 113 base::TimeTicks GetUsageTimeForLRUResource() const; | 131 base::TimeTicks GetUsageTimeForLRUResource() const; |
| 114 | 132 |
| 115 ResourceProvider* resource_provider_; | 133 ResourceProvider* resource_provider_; |
| 116 bool use_gpu_memory_buffers_; | 134 bool use_gpu_memory_buffers_; |
| 117 size_t max_memory_usage_bytes_; | 135 size_t max_memory_usage_bytes_; |
| 118 size_t max_resource_count_; | 136 size_t max_resource_count_; |
| 119 size_t in_use_memory_usage_bytes_; | 137 size_t in_use_memory_usage_bytes_; |
| 120 size_t total_memory_usage_bytes_; | 138 size_t total_memory_usage_bytes_; |
| 121 size_t total_resource_count_; | 139 size_t total_resource_count_; |
| 122 | 140 |
| 123 // Holds most recently used resources at the front of the queue. | 141 // Holds most recently used resources at the front of the queue. |
| 124 using ResourceDeque = std::deque<std::unique_ptr<PoolResource>>; | 142 using ResourceDeque = std::deque<std::unique_ptr<PoolResource>>; |
| 125 ResourceDeque unused_resources_; | 143 ResourceDeque unused_resources_; |
| 126 ResourceDeque busy_resources_; | 144 ResourceDeque busy_resources_; |
| 127 | 145 |
| 128 std::map<ResourceId, std::unique_ptr<PoolResource>> in_use_resources_; | 146 using InUseResourceMap = std::map<ResourceId, std::unique_ptr<PoolResource>>; |
| 147 InUseResourceMap in_use_resources_; |
| 129 | 148 |
| 130 scoped_refptr<base::SingleThreadTaskRunner> task_runner_; | 149 scoped_refptr<base::SingleThreadTaskRunner> task_runner_; |
| 131 bool evict_expired_resources_pending_; | 150 bool evict_expired_resources_pending_; |
| 132 base::TimeDelta resource_expiration_delay_; | 151 base::TimeDelta resource_expiration_delay_; |
| 133 | 152 |
| 134 base::WeakPtrFactory<ResourcePool> weak_ptr_factory_; | 153 base::WeakPtrFactory<ResourcePool> weak_ptr_factory_; |
| 135 | 154 |
| 136 DISALLOW_COPY_AND_ASSIGN(ResourcePool); | 155 DISALLOW_COPY_AND_ASSIGN(ResourcePool); |
| 137 }; | 156 }; |
| 138 | 157 |
| 139 } // namespace cc | 158 } // namespace cc |
| 140 | 159 |
| 141 #endif // CC_RESOURCES_RESOURCE_POOL_H_ | 160 #endif // CC_RESOURCES_RESOURCE_POOL_H_ |
| OLD | NEW |