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

Side by Side Diff: cc/CCPrioritizedTextureManager.h

Issue 11122003: [cc] Rename all cc/ filenames to Chromium style (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 8 years, 2 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 | Annotate | Revision Log
« no previous file with comments | « cc/CCPrioritizedTexture.cpp ('k') | cc/CCPrioritizedTextureManager.cpp » ('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 CCPrioritizedTextureManager_h 5 // Temporary forwarding header
6 #define CCPrioritizedTextureManager_h 6 #include "cc/prioritized_texture_manager.h"
7
8 #include "base/basictypes.h"
9 #include "base/hash_tables.h"
10 #include "base/memory/scoped_ptr.h"
11 #include "CCPrioritizedTexture.h"
12 #include "CCPriorityCalculator.h"
13 #include "CCTexture.h"
14 #include "GraphicsContext3D.h"
15 #include "IntRect.h"
16 #include "IntSize.h"
17 #include <wtf/ListHashSet.h>
18 #include <wtf/Vector.h>
19
20 #if defined(COMPILER_GCC)
21 namespace BASE_HASH_NAMESPACE {
22 template<>
23 struct hash<cc::CCPrioritizedTexture*> {
24 size_t operator()(cc::CCPrioritizedTexture* ptr) const {
25 return hash<size_t>()(reinterpret_cast<size_t>(ptr));
26 }
27 };
28 } // namespace BASE_HASH_NAMESPACE
29 #endif // COMPILER
30
31 namespace cc {
32
33 class CCPriorityCalculator;
34
35 class CCPrioritizedTextureManager {
36 public:
37 static scoped_ptr<CCPrioritizedTextureManager> create(size_t maxMemoryLimitB ytes, int maxTextureSize, int pool)
38 {
39 return make_scoped_ptr(new CCPrioritizedTextureManager(maxMemoryLimitByt es, maxTextureSize, pool));
40 }
41 scoped_ptr<CCPrioritizedTexture> createTexture(IntSize size, GC3Denum format )
42 {
43 return make_scoped_ptr(new CCPrioritizedTexture(this, size, format));
44 }
45 ~CCPrioritizedTextureManager();
46
47 typedef Vector<CCPrioritizedTexture::Backing*> BackingVector;
48
49 // FIXME (http://crbug.com/137094): This 64MB default is a straggler from th e
50 // old texture manager and is just to give us a default memory allocation be fore
51 // we get a callback from the GPU memory manager. We should probaby either:
52 // - wait for the callback before rendering anything instead
53 // - push this into the GPU memory manager somehow.
54 static size_t defaultMemoryAllocationLimit() { return 64 * 1024 * 1024; }
55
56 // memoryUseBytes() describes the number of bytes used by existing allocated textures.
57 // memoryAboveCutoffBytes() describes the number of bytes that would be used if all
58 // textures that are above the cutoff were allocated.
59 // memoryUseBytes() <= memoryAboveCutoffBytes() should always be true.
60 size_t memoryUseBytes() const { return m_memoryUseBytes; }
61 size_t memoryAboveCutoffBytes() const { return m_memoryAboveCutoffBytes; }
62 size_t memoryForSelfManagedTextures() const { return m_maxMemoryLimitBytes - m_memoryAvailableBytes; }
63
64 void setMaxMemoryLimitBytes(size_t bytes) { m_maxMemoryLimitBytes = bytes; }
65 size_t maxMemoryLimitBytes() const { return m_maxMemoryLimitBytes; }
66
67 void prioritizeTextures();
68 void clearPriorities();
69
70 void reduceMemoryOnImplThread(size_t limitBytes, CCResourceProvider*);
71 bool evictedBackingsExist() const { return !m_evictedBackings.isEmpty(); }
72 void getEvictedBackings(BackingVector& evictedBackings);
73 void unlinkEvictedBackings(const BackingVector& evictedBackings);
74 // Deletes all evicted backings, unlinking them from their owning textures i f needed.
75 // Returns true if this function unlinked any backings from their owning tex ture while
76 // destroying them.
77 bool deleteEvictedBackings();
78
79 bool requestLate(CCPrioritizedTexture*);
80
81 void reduceMemory(CCResourceProvider*);
82 void clearAllMemory(CCResourceProvider*);
83
84 void acquireBackingTextureIfNeeded(CCPrioritizedTexture*, CCResourceProvider *);
85
86 void registerTexture(CCPrioritizedTexture*);
87 void unregisterTexture(CCPrioritizedTexture*);
88 void returnBackingTexture(CCPrioritizedTexture*);
89
90 private:
91 friend class CCPrioritizedTextureTest;
92
93 enum EvictionPriorityPolicy {
94 RespectManagerPriorityCutoff,
95 DoNotRespectManagerPriorityCutoff,
96 };
97
98 // Compare textures. Highest priority first.
99 static inline bool compareTextures(CCPrioritizedTexture* a, CCPrioritizedTex ture* b)
100 {
101 if (a->requestPriority() == b->requestPriority())
102 return a < b;
103 return CCPriorityCalculator::priorityIsHigher(a->requestPriority(), b->r equestPriority());
104 }
105 // Compare backings. Lowest priority first.
106 static inline bool compareBackings(CCPrioritizedTexture::Backing* a, CCPrior itizedTexture::Backing* b)
107 {
108 int priorityA = a->requestPriorityAtLastPriorityUpdate();
109 int priorityB = b->requestPriorityAtLastPriorityUpdate();
110 if (priorityA != priorityB)
111 return CCPriorityCalculator::priorityIsLower(priorityA, priorityB);
112 bool aboveCutoffA = a->wasAbovePriorityCutoffAtLastPriorityUpdate();
113 bool aboveCutoffB = b->wasAbovePriorityCutoffAtLastPriorityUpdate();
114 if (!aboveCutoffA && aboveCutoffB)
115 return true;
116 if (aboveCutoffA && !aboveCutoffB)
117 return false;
118 return a < b;
119 }
120
121 CCPrioritizedTextureManager(size_t maxMemoryLimitBytes, int maxTextureSize, int pool);
122
123 void updateBackingsPriorities();
124 void evictBackingsToReduceMemory(size_t limitBytes, EvictionPriorityPolicy, CCResourceProvider*);
125 CCPrioritizedTexture::Backing* createBacking(IntSize, GC3Denum format, CCRes ourceProvider*);
126 void evictBackingResource(CCPrioritizedTexture::Backing*, CCResourceProvider *);
127
128 #if !ASSERT_DISABLED
129 void assertInvariants();
130 #endif
131
132 size_t m_maxMemoryLimitBytes;
133 unsigned m_priorityCutoff;
134 size_t m_memoryUseBytes;
135 size_t m_memoryAboveCutoffBytes;
136 size_t m_memoryAvailableBytes;
137 int m_pool;
138
139 typedef base::hash_set<CCPrioritizedTexture*> TextureSet;
140 typedef ListHashSet<CCPrioritizedTexture::Backing*> BackingSet;
141 typedef Vector<CCPrioritizedTexture*> TextureVector;
142
143 TextureSet m_textures;
144 BackingSet m_backings;
145 BackingVector m_evictedBackings;
146
147 TextureVector m_tempTextureVector;
148 BackingVector m_tempBackingVector;
149
150 // Set by the main thread when it adjust priorities in such a way that
151 // the m_backings array's view of priorities is now out of date.
152 bool m_needsUpdateBackingsPrioritites;
153
154 DISALLOW_COPY_AND_ASSIGN(CCPrioritizedTextureManager);
155 };
156
157 } // namespace cc
158
159 #endif
OLDNEW
« no previous file with comments | « cc/CCPrioritizedTexture.cpp ('k') | cc/CCPrioritizedTextureManager.cpp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698