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 |