OLD | NEW |
1 | 1 |
2 /* | 2 /* |
3 * Copyright 2011 Google Inc. | 3 * Copyright 2011 Google Inc. |
4 * | 4 * |
5 * Use of this source code is governed by a BSD-style license that can be | 5 * Use of this source code is governed by a BSD-style license that can be |
6 * found in the LICENSE file. | 6 * found in the LICENSE file. |
7 */ | 7 */ |
8 | 8 |
9 | 9 |
10 | 10 |
11 #ifndef GrResourceCache_DEFINED | 11 #ifndef GrResourceCache_DEFINED |
12 #define GrResourceCache_DEFINED | 12 #define GrResourceCache_DEFINED |
13 | 13 |
14 #include "GrConfig.h" | 14 #include "GrConfig.h" |
15 #include "GrTypes.h" | 15 #include "GrTypes.h" |
16 #include "GrTMultiMap.h" | 16 #include "GrTMultiMap.h" |
17 #include "GrBinHashKey.h" | 17 #include "GrBinHashKey.h" |
18 #include "SkMessageBus.h" | 18 #include "SkMessageBus.h" |
19 #include "SkTInternalLList.h" | 19 #include "SkTInternalLList.h" |
20 | 20 |
21 class GrCacheable; | 21 class GrCacheable; |
| 22 class GrResourceCache; |
22 class GrResourceCacheEntry; | 23 class GrResourceCacheEntry; |
23 | 24 |
24 class GrResourceKey { | 25 class GrResourceKey { |
25 public: | 26 public: |
26 static GrCacheID::Domain ScratchDomain() { | 27 static GrCacheID::Domain ScratchDomain() { |
27 static const GrCacheID::Domain gDomain = GrCacheID::GenerateDomain(); | 28 static const GrCacheID::Domain gDomain = GrCacheID::GenerateDomain(); |
28 return gDomain; | 29 return gDomain; |
29 } | 30 } |
30 | 31 |
31 /** Uniquely identifies the GrCacheable subclass in the key to avoid collisi
ons | 32 /** Uniquely identifies the GrCacheable subclass in the key to avoid collisi
ons |
(...skipping 89 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
121 const GrResourceKey& key() const { return fKey; } | 122 const GrResourceKey& key() const { return fKey; } |
122 | 123 |
123 static const GrResourceKey& GetKey(const GrResourceCacheEntry& e) { return e
.key(); } | 124 static const GrResourceKey& GetKey(const GrResourceCacheEntry& e) { return e
.key(); } |
124 static uint32_t Hash(const GrResourceKey& key) { return key.getHash(); } | 125 static uint32_t Hash(const GrResourceKey& key) { return key.getHash(); } |
125 #ifdef SK_DEBUG | 126 #ifdef SK_DEBUG |
126 void validate() const; | 127 void validate() const; |
127 #else | 128 #else |
128 void validate() const {} | 129 void validate() const {} |
129 #endif | 130 #endif |
130 | 131 |
| 132 /** |
| 133 * Update the cached size for this entry and inform the resource cache that |
| 134 * it has changed. Usually invoked from GrCacheable::didChangeGpuMemorySize
, |
| 135 * not directly from here. |
| 136 */ |
| 137 void didChangeResourceSize(); |
| 138 |
131 private: | 139 private: |
132 GrResourceCacheEntry(const GrResourceKey& key, GrCacheable* resource); | 140 GrResourceCacheEntry(GrResourceCache* resourceCache, |
| 141 const GrResourceKey& key, |
| 142 GrCacheable* resource); |
133 ~GrResourceCacheEntry(); | 143 ~GrResourceCacheEntry(); |
134 | 144 |
| 145 GrResourceCache* fResourceCache; |
135 GrResourceKey fKey; | 146 GrResourceKey fKey; |
136 GrCacheable* fResource; | 147 GrCacheable* fResource; |
| 148 size_t fCachedSize; |
| 149 bool fIsExclusive; |
137 | 150 |
138 // Linked list for the LRU ordering. | 151 // Linked list for the LRU ordering. |
139 SK_DECLARE_INTERNAL_LLIST_INTERFACE(GrResourceCacheEntry); | 152 SK_DECLARE_INTERNAL_LLIST_INTERFACE(GrResourceCacheEntry); |
140 | 153 |
141 friend class GrResourceCache; | 154 friend class GrResourceCache; |
142 }; | 155 }; |
143 | 156 |
144 /////////////////////////////////////////////////////////////////////////////// | 157 /////////////////////////////////////////////////////////////////////////////// |
145 | 158 |
146 /** | 159 /** |
(...skipping 118 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
265 */ | 278 */ |
266 void makeExclusive(GrResourceCacheEntry* entry); | 279 void makeExclusive(GrResourceCacheEntry* entry); |
267 | 280 |
268 /** | 281 /** |
269 * Restore 'entry' so that it can be found by future searches. 'entry' | 282 * Restore 'entry' so that it can be found by future searches. 'entry' |
270 * will also be purgeable (provided its lock count is now 0.) | 283 * will also be purgeable (provided its lock count is now 0.) |
271 */ | 284 */ |
272 void makeNonExclusive(GrResourceCacheEntry* entry); | 285 void makeNonExclusive(GrResourceCacheEntry* entry); |
273 | 286 |
274 /** | 287 /** |
| 288 * Notify the cache that the size of a resource has changed. |
| 289 */ |
| 290 void didIncreaseResourceSize(const GrResourceCacheEntry*, size_t amountInc); |
| 291 void didDecreaseResourceSize(const GrResourceCacheEntry*, size_t amountDec); |
| 292 |
| 293 /** |
275 * Remove a resource from the cache and delete it! | 294 * Remove a resource from the cache and delete it! |
276 */ | 295 */ |
277 void deleteResource(GrResourceCacheEntry* entry); | 296 void deleteResource(GrResourceCacheEntry* entry); |
278 | 297 |
279 /** | 298 /** |
280 * Removes every resource in the cache that isn't locked. | 299 * Removes every resource in the cache that isn't locked. |
281 */ | 300 */ |
282 void purgeAllUnlocked(); | 301 void purgeAllUnlocked(); |
283 | 302 |
284 /** | 303 /** |
(...skipping 90 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
375 GrResourceCache* fCache; | 394 GrResourceCache* fCache; |
376 }; | 395 }; |
377 #else | 396 #else |
378 class GrAutoResourceCacheValidate { | 397 class GrAutoResourceCacheValidate { |
379 public: | 398 public: |
380 GrAutoResourceCacheValidate(GrResourceCache*) {} | 399 GrAutoResourceCacheValidate(GrResourceCache*) {} |
381 }; | 400 }; |
382 #endif | 401 #endif |
383 | 402 |
384 #endif | 403 #endif |
OLD | NEW |