Index: src/core/SkResourceCache.cpp |
diff --git a/src/core/SkResourceCache.cpp b/src/core/SkResourceCache.cpp |
index 73f788cd172a7ac1e6e049a5ce246d2fff92eb64..6400e8a71eccd0e45cc5c0bb2b26cc124fb07815 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; |
+ this->remove(rec); |
} |
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(); |