| OLD | NEW |
| 1 | 1 |
| 2 /* | 2 /* |
| 3 * Copyright 2014 Google Inc. | 3 * Copyright 2014 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 #ifndef GrResourceCache2_DEFINED | 9 #ifndef GrResourceCache2_DEFINED |
| 10 #define GrResourceCache2_DEFINED | 10 #define GrResourceCache2_DEFINED |
| (...skipping 80 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 91 enum { | 91 enum { |
| 92 /** Preferentially returns scratch resources with no pending IO. */ | 92 /** Preferentially returns scratch resources with no pending IO. */ |
| 93 kPreferNoPendingIO_ScratchFlag = 0x1, | 93 kPreferNoPendingIO_ScratchFlag = 0x1, |
| 94 /** Will not return any resources that match but have pending IO. */ | 94 /** Will not return any resources that match but have pending IO. */ |
| 95 kRequireNoPendingIO_ScratchFlag = 0x2, | 95 kRequireNoPendingIO_ScratchFlag = 0x2, |
| 96 }; | 96 }; |
| 97 | 97 |
| 98 /** | 98 /** |
| 99 * Find a resource that matches a scratch key. | 99 * Find a resource that matches a scratch key. |
| 100 */ | 100 */ |
| 101 GrGpuResource* findAndRefScratchResource(const GrResourceKey& scratchKey, ui
nt32_t flags = 0); | 101 GrGpuResource* findAndRefScratchResource(const GrScratchKey& scratchKey, uin
t32_t flags = 0); |
| 102 | 102 |
| 103 #ifdef SK_DEBUG | 103 #ifdef SK_DEBUG |
| 104 // This is not particularly fast and only used for validation, so debug only
. | 104 // This is not particularly fast and only used for validation, so debug only
. |
| 105 int countScratchEntriesForKey(const GrResourceKey& scratchKey) const { | 105 int countScratchEntriesForKey(const GrScratchKey& scratchKey) const { |
| 106 SkASSERT(scratchKey.isScratch()); | |
| 107 return fScratchMap.countForKey(scratchKey); | 106 return fScratchMap.countForKey(scratchKey); |
| 108 } | 107 } |
| 109 #endif | 108 #endif |
| 110 | 109 |
| 111 /** | 110 /** |
| 112 * Find a resource that matches a content key. | 111 * Find a resource that matches a content key. |
| 113 */ | 112 */ |
| 114 GrGpuResource* findAndRefContentResource(const GrResourceKey& contentKey) { | 113 GrGpuResource* findAndRefContentResource(const GrResourceKey& contentKey) { |
| 115 SkASSERT(!contentKey.isScratch()); | |
| 116 GrGpuResource* resource = fContentHash.find(contentKey); | 114 GrGpuResource* resource = fContentHash.find(contentKey); |
| 117 if (resource) { | 115 if (resource) { |
| 118 resource->ref(); | 116 resource->ref(); |
| 119 this->makeResourceMRU(resource); | 117 this->makeResourceMRU(resource); |
| 120 } | 118 } |
| 121 return resource; | 119 return resource; |
| 122 } | 120 } |
| 123 | 121 |
| 124 /** | 122 /** |
| 125 * Query whether a content key exists in the cache. | 123 * Query whether a content key exists in the cache. |
| 126 */ | 124 */ |
| 127 bool hasContentKey(const GrResourceKey& contentKey) const { | 125 bool hasContentKey(const GrResourceKey& contentKey) const { |
| 128 SkASSERT(!contentKey.isScratch()); | |
| 129 return SkToBool(fContentHash.find(contentKey)); | 126 return SkToBool(fContentHash.find(contentKey)); |
| 130 } | 127 } |
| 131 | 128 |
| 132 /** Purges all resources that don't have external owners. */ | 129 /** Purges all resources that don't have external owners. */ |
| 133 void purgeAllUnlocked(); | 130 void purgeAllUnlocked(); |
| 134 | 131 |
| 135 /** | 132 /** |
| 136 * The callback function used by the cache when it is still over budget afte
r a purge. The | 133 * The callback function used by the cache when it is still over budget afte
r a purge. The |
| 137 * passed in 'data' is the same 'data' handed to setOverbudgetCallback. | 134 * passed in 'data' is the same 'data' handed to setOverbudgetCallback. |
| 138 */ | 135 */ |
| (...skipping 41 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 180 void validate() const; | 177 void validate() const; |
| 181 #else | 178 #else |
| 182 void validate() const {} | 179 void validate() const {} |
| 183 #endif | 180 #endif |
| 184 | 181 |
| 185 class AutoValidate; | 182 class AutoValidate; |
| 186 | 183 |
| 187 class AvailableForScratchUse; | 184 class AvailableForScratchUse; |
| 188 | 185 |
| 189 struct ScratchMapTraits { | 186 struct ScratchMapTraits { |
| 190 static const GrResourceKey& GetKey(const GrGpuResource& r) { | 187 static const GrScratchKey& GetKey(const GrGpuResource& r) { |
| 191 return r.cacheAccess().getScratchKey(); | 188 return r.cacheAccess().getScratchKey(); |
| 192 } | 189 } |
| 193 | 190 |
| 194 static uint32_t Hash(const GrResourceKey& key) { return key.getHash(); } | 191 static uint32_t Hash(const GrScratchKey& key) { return key.hash(); } |
| 195 }; | 192 }; |
| 196 typedef SkTMultiMap<GrGpuResource, GrResourceKey, ScratchMapTraits> ScratchM
ap; | 193 typedef SkTMultiMap<GrGpuResource, GrScratchKey, ScratchMapTraits> ScratchMa
p; |
| 197 | 194 |
| 198 struct ContentHashTraits { | 195 struct ContentHashTraits { |
| 199 static const GrResourceKey& GetKey(const GrGpuResource& r) { | 196 static const GrResourceKey& GetKey(const GrGpuResource& r) { |
| 200 return *r.cacheAccess().getContentKey(); | 197 return *r.cacheAccess().getContentKey(); |
| 201 } | 198 } |
| 202 | 199 |
| 203 static uint32_t Hash(const GrResourceKey& key) { return key.getHash(); } | 200 static uint32_t Hash(const GrResourceKey& key) { return key.getHash(); } |
| 204 }; | 201 }; |
| 205 typedef SkTDynamicHash<GrGpuResource, GrResourceKey, ContentHashTraits> Cont
entHash; | 202 typedef SkTDynamicHash<GrGpuResource, GrResourceKey, ContentHashTraits> Cont
entHash; |
| 206 | 203 |
| (...skipping 91 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 298 | 295 |
| 299 friend class GrGpuResource; // To access all the proxy inline methods. | 296 friend class GrGpuResource; // To access all the proxy inline methods. |
| 300 friend class GrResourceCache2; // To create this type. | 297 friend class GrResourceCache2; // To create this type. |
| 301 }; | 298 }; |
| 302 | 299 |
| 303 inline GrResourceCache2::ResourceAccess GrResourceCache2::resourceAccess() { | 300 inline GrResourceCache2::ResourceAccess GrResourceCache2::resourceAccess() { |
| 304 return ResourceAccess(this); | 301 return ResourceAccess(this); |
| 305 } | 302 } |
| 306 | 303 |
| 307 #endif | 304 #endif |
| OLD | NEW |