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 CCPrioritizedTextureManager_h | 5 #ifndef CCPrioritizedTextureManager_h |
6 #define CCPrioritizedTextureManager_h | 6 #define CCPrioritizedTextureManager_h |
7 | 7 |
8 #include <list> | 8 #include <list> |
9 #include <vector> | 9 #include <vector> |
10 | 10 |
11 #include "IntRect.h" | 11 #include "IntRect.h" |
12 #include "IntSize.h" | 12 #include "IntSize.h" |
13 #include "base/basictypes.h" | 13 #include "base/basictypes.h" |
14 #include "base/hash_tables.h" | 14 #include "base/hash_tables.h" |
15 #include "base/memory/scoped_ptr.h" | 15 #include "base/memory/scoped_ptr.h" |
| 16 #include "cc/proxy.h" |
16 #include "cc/prioritized_texture.h" | 17 #include "cc/prioritized_texture.h" |
17 #include "cc/priority_calculator.h" | 18 #include "cc/priority_calculator.h" |
18 #include "cc/texture.h" | 19 #include "cc/texture.h" |
19 #include "third_party/khronos/GLES2/gl2.h" | 20 #include "third_party/khronos/GLES2/gl2.h" |
20 | 21 |
21 #if defined(COMPILER_GCC) | 22 #if defined(COMPILER_GCC) |
22 namespace BASE_HASH_NAMESPACE { | 23 namespace BASE_HASH_NAMESPACE { |
23 template<> | 24 template<> |
24 struct hash<cc::PrioritizedTexture*> { | 25 struct hash<cc::PrioritizedTexture*> { |
25 size_t operator()(cc::PrioritizedTexture* ptr) const { | 26 size_t operator()(cc::PrioritizedTexture* ptr) const { |
26 return hash<size_t>()(reinterpret_cast<size_t>(ptr)); | 27 return hash<size_t>()(reinterpret_cast<size_t>(ptr)); |
27 } | 28 } |
28 }; | 29 }; |
29 } // namespace BASE_HASH_NAMESPACE | 30 } // namespace BASE_HASH_NAMESPACE |
30 #endif // COMPILER | 31 #endif // COMPILER |
31 | 32 |
32 namespace cc { | 33 namespace cc { |
33 | 34 |
34 class PriorityCalculator; | 35 class PriorityCalculator; |
| 36 class Proxy; |
35 | 37 |
36 class PrioritizedTextureManager { | 38 class PrioritizedTextureManager { |
37 public: | 39 public: |
38 static scoped_ptr<PrioritizedTextureManager> create(size_t maxMemoryLimitByt
es, int maxTextureSize, int pool) | 40 static scoped_ptr<PrioritizedTextureManager> create(size_t maxMemoryLimitByt
es, int maxTextureSize, int pool, const Proxy* proxy) |
39 { | 41 { |
40 return make_scoped_ptr(new PrioritizedTextureManager(maxMemoryLimitBytes
, maxTextureSize, pool)); | 42 return make_scoped_ptr(new PrioritizedTextureManager(maxMemoryLimitBytes
, maxTextureSize, pool, proxy)); |
41 } | 43 } |
42 scoped_ptr<PrioritizedTexture> createTexture(IntSize size, GLenum format) | 44 scoped_ptr<PrioritizedTexture> createTexture(IntSize size, GLenum format) |
43 { | 45 { |
44 return make_scoped_ptr(new PrioritizedTexture(this, size, format)); | 46 return make_scoped_ptr(new PrioritizedTexture(this, size, format)); |
45 } | 47 } |
46 ~PrioritizedTextureManager(); | 48 ~PrioritizedTextureManager(); |
47 | 49 |
48 typedef std::list<PrioritizedTexture::Backing*> BackingList; | 50 typedef std::list<PrioritizedTexture::Backing*> BackingList; |
49 | 51 |
50 // FIXME (http://crbug.com/137094): This 64MB default is a straggler from th
e | 52 // FIXME (http://crbug.com/137094): This 64MB default is a straggler from th
e |
(...skipping 80 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
131 // Then sort by priority (note that backings that no longer have owners
will | 133 // Then sort by priority (note that backings that no longer have owners
will |
132 // always have the lowest priority) | 134 // always have the lowest priority) |
133 if (a->requestPriorityAtLastPriorityUpdate() != b->requestPriorityAtLast
PriorityUpdate()) | 135 if (a->requestPriorityAtLastPriorityUpdate() != b->requestPriorityAtLast
PriorityUpdate()) |
134 return PriorityCalculator::priorityIsLower(a->requestPriorityAtLastP
riorityUpdate(), b->requestPriorityAtLastPriorityUpdate()); | 136 return PriorityCalculator::priorityIsLower(a->requestPriorityAtLastP
riorityUpdate(), b->requestPriorityAtLastPriorityUpdate()); |
135 // Finally sort by being in the impl tree versus being completely unrefe
renced | 137 // Finally sort by being in the impl tree versus being completely unrefe
renced |
136 if (a->inDrawingImplTree() != b->inDrawingImplTree()) | 138 if (a->inDrawingImplTree() != b->inDrawingImplTree()) |
137 return (a->inDrawingImplTree() < b->inDrawingImplTree()); | 139 return (a->inDrawingImplTree() < b->inDrawingImplTree()); |
138 return a < b; | 140 return a < b; |
139 } | 141 } |
140 | 142 |
141 PrioritizedTextureManager(size_t maxMemoryLimitBytes, int maxTextureSize, in
t pool); | 143 PrioritizedTextureManager(size_t maxMemoryLimitBytes, int maxTextureSize, in
t pool, const Proxy* proxy); |
142 | 144 |
143 bool evictBackingsToReduceMemory(size_t limitBytes, int priorityCutoff, Evic
tionPolicy, ResourceProvider*); | 145 bool evictBackingsToReduceMemory(size_t limitBytes, int priorityCutoff, Evic
tionPolicy, ResourceProvider*); |
144 PrioritizedTexture::Backing* createBacking(IntSize, GLenum format, ResourceP
rovider*); | 146 PrioritizedTexture::Backing* createBacking(IntSize, GLenum format, ResourceP
rovider*); |
145 void evictFirstBackingResource(ResourceProvider*); | 147 void evictFirstBackingResource(ResourceProvider*); |
146 void deleteUnlinkedEvictedBackings(); | 148 void deleteUnlinkedEvictedBackings(); |
147 void sortBackings(); | 149 void sortBackings(); |
148 | 150 |
149 void assertInvariants(); | 151 void assertInvariants(); |
150 | 152 |
151 size_t m_maxMemoryLimitBytes; | 153 size_t m_maxMemoryLimitBytes; |
152 // The priority cutoff based on memory pressure. This is not a strict | 154 // The priority cutoff based on memory pressure. This is not a strict |
153 // cutoff -- requestLate allows textures with priority equal to this | 155 // cutoff -- requestLate allows textures with priority equal to this |
154 // cutoff to be allowed. | 156 // cutoff to be allowed. |
155 int m_priorityCutoff; | 157 int m_priorityCutoff; |
156 // The priority cutoff based on external memory policy. This is a strict | 158 // The priority cutoff based on external memory policy. This is a strict |
157 // cutoff -- no textures with priority equal to this cutoff will be allowed. | 159 // cutoff -- no textures with priority equal to this cutoff will be allowed. |
158 int m_externalPriorityCutoff; | 160 int m_externalPriorityCutoff; |
159 size_t m_memoryUseBytes; | 161 size_t m_memoryUseBytes; |
160 size_t m_memoryAboveCutoffBytes; | 162 size_t m_memoryAboveCutoffBytes; |
161 size_t m_memoryAvailableBytes; | 163 size_t m_memoryAvailableBytes; |
162 int m_pool; | 164 int m_pool; |
163 | 165 |
164 typedef base::hash_set<PrioritizedTexture*> TextureSet; | 166 typedef base::hash_set<PrioritizedTexture*> TextureSet; |
165 typedef std::vector<PrioritizedTexture*> TextureVector; | 167 typedef std::vector<PrioritizedTexture*> TextureVector; |
166 | 168 |
| 169 const Proxy* m_proxy; |
| 170 |
167 TextureSet m_textures; | 171 TextureSet m_textures; |
168 // This list is always sorted in eviction order, with the exception the | 172 // This list is always sorted in eviction order, with the exception the |
169 // newly-allocated or recycled textures at the very end of the tail that | 173 // newly-allocated or recycled textures at the very end of the tail that |
170 // are not sorted by priority. | 174 // are not sorted by priority. |
171 BackingList m_backings; | 175 BackingList m_backings; |
172 bool m_backingsTailNotSorted; | 176 bool m_backingsTailNotSorted; |
173 BackingList m_evictedBackings; | 177 BackingList m_evictedBackings; |
174 | 178 |
175 TextureVector m_tempTextureVector; | 179 TextureVector m_tempTextureVector; |
176 | 180 |
177 DISALLOW_COPY_AND_ASSIGN(PrioritizedTextureManager); | 181 DISALLOW_COPY_AND_ASSIGN(PrioritizedTextureManager); |
178 }; | 182 }; |
179 | 183 |
180 } // namespace cc | 184 } // namespace cc |
181 | 185 |
182 #endif | 186 #endif |
OLD | NEW |