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

Side by Side Diff: cc/resources/resource_pool.h

Issue 2254033002: Encourage IOSurface reuse for CSS filter effects. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Comments from ericrk. Created 4 years, 4 months 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
« no previous file with comments | « cc/output/gl_renderer.cc ('k') | cc/resources/resource_pool.cc » ('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 #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
11 #include <deque> 11 #include <deque>
12 #include <map> 12 #include <map>
13 #include <memory> 13 #include <memory>
14 14
15 #include "base/macros.h" 15 #include "base/macros.h"
16 #include "base/memory/ptr_util.h" 16 #include "base/memory/ptr_util.h"
17 #include "base/trace_event/memory_dump_provider.h" 17 #include "base/trace_event/memory_dump_provider.h"
18 #include "cc/base/cc_export.h" 18 #include "cc/base/cc_export.h"
19 #include "cc/output/renderer.h" 19 #include "cc/output/renderer.h"
20 #include "cc/resources/resource.h" 20 #include "cc/resources/resource.h"
21 #include "cc/resources/resource_format.h" 21 #include "cc/resources/resource_format.h"
22 #include "cc/resources/scoped_resource.h" 22 #include "cc/resources/scoped_resource.h"
23 23
24 namespace cc { 24 namespace cc {
25 25
26 class CC_EXPORT ResourcePool : public base::trace_event::MemoryDumpProvider { 26 class CC_EXPORT ResourcePool : public base::trace_event::MemoryDumpProvider {
27 public: 27 public:
28 // Delay before a resource is considered expired.
29 static base::TimeDelta kDefaultExpirationDelay;
30
28 static std::unique_ptr<ResourcePool> CreateForGpuMemoryBufferResources( 31 static std::unique_ptr<ResourcePool> CreateForGpuMemoryBufferResources(
29 ResourceProvider* resource_provider, 32 ResourceProvider* resource_provider,
30 base::SingleThreadTaskRunner* task_runner, 33 base::SingleThreadTaskRunner* task_runner,
31 gfx::BufferUsage usage) { 34 gfx::BufferUsage usage,
32 std::unique_ptr<ResourcePool> pool( 35 const base::TimeDelta& expiration_delay) {
33 new ResourcePool(resource_provider, task_runner, true)); 36 std::unique_ptr<ResourcePool> pool(new ResourcePool(
37 resource_provider, task_runner, true, expiration_delay));
34 pool->usage_ = usage; 38 pool->usage_ = usage;
35 return pool; 39 return pool;
36 } 40 }
37 41
38 static std::unique_ptr<ResourcePool> Create( 42 static std::unique_ptr<ResourcePool> Create(
39 ResourceProvider* resource_provider, 43 ResourceProvider* resource_provider,
40 base::SingleThreadTaskRunner* task_runner) { 44 base::SingleThreadTaskRunner* task_runner,
41 return base::WrapUnique( 45 const base::TimeDelta& expiration_delay) {
42 new ResourcePool(resource_provider, task_runner, false)); 46 return base::WrapUnique(new ResourcePool(resource_provider, task_runner,
47 false, expiration_delay));
43 } 48 }
44 49
45 ~ResourcePool() override; 50 ~ResourcePool() override;
46 51
47 // Tries to reuse a resource. If none are available, makes a new one. 52 // Tries to reuse a resource. If none are available, makes a new one.
48 Resource* AcquireResource(const gfx::Size& size, 53 Resource* AcquireResource(const gfx::Size& size,
49 ResourceFormat format, 54 ResourceFormat format,
50 const gfx::ColorSpace& color_space); 55 const gfx::ColorSpace& color_space);
51 56
52 // Tries to acquire the resource with |previous_content_id| for us in partial 57 // Tries to acquire the resource with |previous_content_id| for us in partial
(...skipping 28 matching lines...) Expand all
81 86
82 size_t GetTotalMemoryUsageForTesting() const { 87 size_t GetTotalMemoryUsageForTesting() const {
83 return total_memory_usage_bytes_; 88 return total_memory_usage_bytes_;
84 } 89 }
85 size_t GetTotalResourceCountForTesting() const { 90 size_t GetTotalResourceCountForTesting() const {
86 return total_resource_count_; 91 return total_resource_count_;
87 } 92 }
88 size_t GetBusyResourceCountForTesting() const { 93 size_t GetBusyResourceCountForTesting() const {
89 return busy_resources_.size(); 94 return busy_resources_.size();
90 } 95 }
91 void SetResourceExpirationDelayForTesting(base::TimeDelta delay) {
92 resource_expiration_delay_ = delay;
93 }
94 96
95 protected: 97 protected:
96 ResourcePool(ResourceProvider* resource_provider, 98 ResourcePool(ResourceProvider* resource_provider,
97 base::SingleThreadTaskRunner* task_runner, 99 base::SingleThreadTaskRunner* task_runner,
98 bool use_gpu_memory_buffers); 100 bool use_gpu_memory_buffers,
101 const base::TimeDelta& expiration_delay);
99 102
100 bool ResourceUsageTooHigh(); 103 bool ResourceUsageTooHigh();
101 104
102 private: 105 private:
103 FRIEND_TEST_ALL_PREFIXES(ResourcePoolTest, ReuseResource); 106 FRIEND_TEST_ALL_PREFIXES(ResourcePoolTest, ReuseResource);
104 class PoolResource : public ScopedResource { 107 class PoolResource : public ScopedResource {
105 public: 108 public:
106 static std::unique_ptr<PoolResource> Create( 109 static std::unique_ptr<PoolResource> Create(
107 ResourceProvider* resource_provider) { 110 ResourceProvider* resource_provider) {
108 return base::WrapUnique(new PoolResource(resource_provider)); 111 return base::WrapUnique(new PoolResource(resource_provider));
(...skipping 57 matching lines...) Expand 10 before | Expand all | Expand 10 after
166 // Holds most recently used resources at the front of the queue. 169 // Holds most recently used resources at the front of the queue.
167 using ResourceDeque = std::deque<std::unique_ptr<PoolResource>>; 170 using ResourceDeque = std::deque<std::unique_ptr<PoolResource>>;
168 ResourceDeque unused_resources_; 171 ResourceDeque unused_resources_;
169 ResourceDeque busy_resources_; 172 ResourceDeque busy_resources_;
170 173
171 using InUseResourceMap = std::map<ResourceId, std::unique_ptr<PoolResource>>; 174 using InUseResourceMap = std::map<ResourceId, std::unique_ptr<PoolResource>>;
172 InUseResourceMap in_use_resources_; 175 InUseResourceMap in_use_resources_;
173 176
174 scoped_refptr<base::SingleThreadTaskRunner> task_runner_; 177 scoped_refptr<base::SingleThreadTaskRunner> task_runner_;
175 bool evict_expired_resources_pending_; 178 bool evict_expired_resources_pending_;
176 base::TimeDelta resource_expiration_delay_; 179 const base::TimeDelta resource_expiration_delay_;
177 180
178 base::WeakPtrFactory<ResourcePool> weak_ptr_factory_; 181 base::WeakPtrFactory<ResourcePool> weak_ptr_factory_;
179 182
180 DISALLOW_COPY_AND_ASSIGN(ResourcePool); 183 DISALLOW_COPY_AND_ASSIGN(ResourcePool);
181 }; 184 };
182 185
183 } // namespace cc 186 } // namespace cc
184 187
185 #endif // CC_RESOURCES_RESOURCE_POOL_H_ 188 #endif // CC_RESOURCES_RESOURCE_POOL_H_
OLDNEW
« no previous file with comments | « cc/output/gl_renderer.cc ('k') | cc/resources/resource_pool.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698