Index: src/core/SkResourceCache.cpp |
diff --git a/src/core/SkResourceCache.cpp b/src/core/SkResourceCache.cpp |
index ae8412d8b47a323ecd7f5e2f6508629d8d6abcb4..bb159fe1e4baee9f88f1560cc0eaf13852bde9c2 100644 |
--- a/src/core/SkResourceCache.cpp |
+++ b/src/core/SkResourceCache.cpp |
@@ -294,6 +294,19 @@ void SkResourceCache::purgeAsNeeded(bool forcePurge) { |
} |
} |
+void SkResourceCache::purgeVisitor(const void* nameSpace, VisitorProc proc, void* context) { |
+ // go backwards, just like purgeAsNeeded, just to make the code similar. |
+ // could iterate either direction and still be correct. |
+ Rec* rec = fTail; |
+ while (rec) { |
+ Rec* prev = rec->fPrev; |
+ if (rec->getKey().getNamespace() == nameSpace && !proc(*rec, context)) { |
+ this->remove(rec); |
+ } |
+ rec = prev; |
+ } |
+} |
+ |
size_t SkResourceCache::setTotalByteLimit(size_t newLimit) { |
size_t prevLimit = fTotalByteLimit; |
fTotalByteLimit = newLimit; |
@@ -511,6 +524,11 @@ size_t SkResourceCache::GetSingleAllocationByteLimit() { |
return get_cache()->getSingleAllocationByteLimit(); |
} |
+void SkResourceCache::PurgeVisitor(const void* nameSpace, VisitorProc proc, void* context) { |
+ SkAutoMutexAcquire am(gMutex); |
+ return get_cache()->purgeVisitor(nameSpace, proc, context); |
+} |
+ |
void SkResourceCache::PurgeAll() { |
SkAutoMutexAcquire am(gMutex); |
return get_cache()->purgeAll(); |