| OLD | NEW |
| 1 | 1 |
| 2 /* | 2 /* |
| 3 * Copyright 2010 Google Inc. | 3 * Copyright 2010 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 | |
| 10 | |
| 11 #include "GrResourceCache.h" | 9 #include "GrResourceCache.h" |
| 12 #include "GrGpuResource.h" | 10 #include "GrGpuResource.h" |
| 13 #include "GrTexturePriv.h" | 11 #include "GrTexturePriv.h" |
| 14 | 12 |
| 15 | |
| 16 DECLARE_SKMESSAGEBUS_MESSAGE(GrResourceInvalidatedMessage); | 13 DECLARE_SKMESSAGEBUS_MESSAGE(GrResourceInvalidatedMessage); |
| 17 | 14 |
| 18 /////////////////////////////////////////////////////////////////////////////// | 15 /////////////////////////////////////////////////////////////////////////////// |
| 19 | 16 |
| 20 void GrGpuResource::didChangeGpuMemorySize() const { | 17 void GrGpuResource::didChangeGpuMemorySize() const { |
| 21 if (this->isInCache()) { | 18 if (this->isInCache()) { |
| 22 fCacheEntry->didChangeResourceSize(); | 19 fCacheEntry->didChangeResourceSize(); |
| 23 } | 20 } |
| 24 } | 21 } |
| 25 | 22 |
| (...skipping 148 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 174 this->internalDetach(entry); | 171 this->internalDetach(entry); |
| 175 this->attachToHead(entry); | 172 this->attachToHead(entry); |
| 176 } | 173 } |
| 177 } | 174 } |
| 178 | 175 |
| 179 void GrResourceCache::notifyPurgable(const GrGpuResource* resource) { | 176 void GrResourceCache::notifyPurgable(const GrGpuResource* resource) { |
| 180 // Remove scratch textures from the cache the moment they become purgeable i
f | 177 // Remove scratch textures from the cache the moment they become purgeable i
f |
| 181 // scratch texture reuse is turned off. | 178 // scratch texture reuse is turned off. |
| 182 SkASSERT(resource->getCacheEntry()); | 179 SkASSERT(resource->getCacheEntry()); |
| 183 if (resource->getCacheEntry()->key().getResourceType() == GrTexturePriv::Res
ourceType() && | 180 if (resource->getCacheEntry()->key().getResourceType() == GrTexturePriv::Res
ourceType() && |
| 184 resource->fIsScratch && | 181 resource->getCacheEntry()->key().isScratch() && |
| 185 !fCaps->reuseScratchTextures() && | 182 !fCaps->reuseScratchTextures() && |
| 186 !(static_cast<const GrTexture*>(resource)->desc().fFlags & | 183 !(static_cast<const GrTexture*>(resource)->desc().fFlags & |
| 187 kRenderTarget_GrTextureFlagBit)) { | 184 kRenderTarget_GrTextureFlagBit)) { |
| 188 this->deleteResource(resource->getCacheEntry()); | 185 this->deleteResource(resource->getCacheEntry()); |
| 189 } | 186 } |
| 190 } | 187 } |
| 191 | 188 |
| 192 GrGpuResource* GrResourceCache::find(const GrResourceKey& key) { | 189 GrGpuResource* GrResourceCache::find(const GrResourceKey& key) { |
| 190 // GrResourceCache2 is responsible for scratch resources. |
| 191 SkASSERT(!key.isScratch()); |
| 192 |
| 193 GrAutoResourceCacheValidate atcv(this); | 193 GrAutoResourceCacheValidate atcv(this); |
| 194 | 194 |
| 195 GrResourceCacheEntry* entry = NULL; | 195 GrResourceCacheEntry* entry = fCache.find(key); |
| 196 | |
| 197 entry = fCache.find(key); | |
| 198 | |
| 199 if (NULL == entry) { | 196 if (NULL == entry) { |
| 200 return NULL; | 197 return NULL; |
| 201 } | 198 } |
| 202 | 199 |
| 203 // Make this resource MRU | 200 // Make this resource MRU |
| 204 this->internalDetach(entry); | 201 this->internalDetach(entry); |
| 205 this->attachToHead(entry); | 202 this->attachToHead(entry); |
| 206 | 203 |
| 207 // GrResourceCache2 is responsible for scratch resources. | |
| 208 SkASSERT(GrGpuResource::kNo_IsScratch == entry->resource()->fIsScratch); | |
| 209 return entry->fResource; | 204 return entry->fResource; |
| 210 } | 205 } |
| 211 | 206 |
| 212 void GrResourceCache::addResource(const GrResourceKey& key, GrGpuResource* resou
rce) { | 207 void GrResourceCache::addResource(const GrResourceKey& key, GrGpuResource* resou
rce) { |
| 213 SkASSERT(NULL == resource->getCacheEntry()); | 208 SkASSERT(NULL == resource->getCacheEntry()); |
| 214 // we don't expect to create new resources during a purge. In theory | 209 // we don't expect to create new resources during a purge. In theory |
| 215 // this could cause purgeAsNeeded() into an infinite loop (e.g. | 210 // this could cause purgeAsNeeded() into an infinite loop (e.g. |
| 216 // each resource destroyed creates and locks 2 resources and | 211 // each resource destroyed creates and locks 2 resources and |
| 217 // unlocks 1 thereby causing a new purge). | 212 // unlocks 1 thereby causing a new purge). |
| 218 SkASSERT(!fPurging); | 213 SkASSERT(!fPurging); |
| (...skipping 204 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 423 SkDebugf("Budget: %d items %d bytes\n", fMaxCount, fMaxBytes); | 418 SkDebugf("Budget: %d items %d bytes\n", fMaxCount, fMaxBytes); |
| 424 SkDebugf("\t\tEntry Count: current %d (%d locked) high %d\n", | 419 SkDebugf("\t\tEntry Count: current %d (%d locked) high %d\n", |
| 425 fEntryCount, locked, fHighWaterEntryCount); | 420 fEntryCount, locked, fHighWaterEntryCount); |
| 426 SkDebugf("\t\tEntry Bytes: current %d high %d\n", | 421 SkDebugf("\t\tEntry Bytes: current %d high %d\n", |
| 427 fEntryBytes, fHighWaterEntryBytes); | 422 fEntryBytes, fHighWaterEntryBytes); |
| 428 } | 423 } |
| 429 | 424 |
| 430 #endif | 425 #endif |
| 431 | 426 |
| 432 /////////////////////////////////////////////////////////////////////////////// | 427 /////////////////////////////////////////////////////////////////////////////// |
| OLD | NEW |