Chromium Code Reviews| Index: src/core/SkResourceCache.cpp |
| diff --git a/src/core/SkResourceCache.cpp b/src/core/SkResourceCache.cpp |
| index 73f788cd172a7ac1e6e049a5ce246d2fff92eb64..f67146e3ecd181a07855df65e936c48e66950dd3 100644 |
| --- a/src/core/SkResourceCache.cpp |
| +++ b/src/core/SkResourceCache.cpp |
| @@ -286,6 +286,23 @@ void SkResourceCache::unlock(SkResourceCache::ID id) { |
| } |
| } |
| +void SkResourceCache::remove(Rec* rec) { |
| + SkASSERT(0 == rec->fLockCount); |
| + |
| + size_t used = rec->bytesUsed(); |
| + SkASSERT(used <= fTotalBytesUsed); |
| + |
| + this->detach(rec); |
| +#ifdef USE_HASH |
| + fHash->remove(rec->getKey()); |
| +#endif |
| + |
| + SkDELETE(rec); |
| + |
| + fTotalBytesUsed -= used; |
| + fCount -= 1; |
| +} |
| + |
| void SkResourceCache::purgeAsNeeded() { |
| size_t byteLimit; |
| int countLimit; |
| @@ -298,34 +315,18 @@ void SkResourceCache::purgeAsNeeded() { |
| byteLimit = fTotalByteLimit; |
| } |
| - size_t bytesUsed = fTotalBytesUsed; |
| - int countUsed = fCount; |
| - |
| Rec* rec = fTail; |
| while (rec) { |
| - if (bytesUsed < byteLimit && countUsed < countLimit) { |
| + if (fTotalBytesUsed < byteLimit && fCount < countLimit) { |
| break; |
| } |
| Rec* prev = rec->fPrev; |
| if (0 == rec->fLockCount) { |
| - size_t used = rec->bytesUsed(); |
| - SkASSERT(used <= bytesUsed); |
| - this->detach(rec); |
| -#ifdef USE_HASH |
| - fHash->remove(rec->getKey()); |
| -#endif |
| - |
| - SkDELETE(rec); |
| - |
| - bytesUsed -= used; |
| - countUsed -= 1; |
| + remove(rec); |
|
reed1
2014/09/11 15:11:17
nit: this->remove(rec)
danakj
2014/09/11 17:01:32
Done.
|
| } |
| rec = prev; |
| } |
| - |
| - fTotalBytesUsed = bytesUsed; |
| - fCount = countUsed; |
| } |
| size_t SkResourceCache::setTotalByteLimit(size_t newLimit) { |
| @@ -506,6 +507,28 @@ void SkResourceCache::Unlock(SkResourceCache::ID id) { |
| // get_cache()->dump(); |
| } |
| +void SkResourceCache::Remove(SkResourceCache::ID id) { |
| + SkAutoMutexAcquire am(gMutex); |
| + SkASSERT(id); |
| + |
| +#ifdef SK_DEBUG |
| + { |
| + bool found = false; |
| + Rec* rec = get_cache()->fHead; |
| + while (rec != NULL) { |
| + if (rec == id) { |
| + found = true; |
| + break; |
| + } |
| + rec = rec->fNext; |
| + } |
| + SkASSERT(found); |
| + } |
| +#endif |
| + const Rec* rec = id; |
| + get_cache()->remove(const_cast<Rec*>(rec)); |
| +} |
| + |
| size_t SkResourceCache::GetTotalBytesUsed() { |
| SkAutoMutexAcquire am(gMutex); |
| return get_cache()->getTotalBytesUsed(); |