void SkResourceCache::purgeSharedID(uint64_t sharedID) { if (0 == sharedID) { return; } #ifdef SK_TRACK_PURGE_SHAREDID_HITRATE gPurgeCallCounter += 1; bool found = false; #endif // 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().getSharedID() == sharedID) { // SkDebugf("purgeSharedID id=%llx rec=%p\n", sharedID, rec); this->remove(rec); #ifdef SK_TRACK_PURGE_SHAREDID_HITRATE found = true; #endif } rec = prev; } #ifdef SK_TRACK_PURGE_SHAREDID_HITRATE if (found) { gPurgeHitCounter += 1; } SkDebugf("PurgeShared calls=%d hits=%d rate=%g\n", gPurgeCallCounter, gPurgeHitCounter, gPurgeHitCounter * 100.0 / gPurgeCallCounter); #endif }
void SkResourceCache::purgeSharedID(uint64_t sharedID) { if (0 == sharedID) { return; } #ifdef SK_TRACK_PURGE_SHAREDID_HITRATE gPurgeCallCounter += 1; bool found = false; #endif // 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().getSharedID() == sharedID) { // even though the "src" is now dead, caches could still be in-flight, so // we have to check if it can be removed. if (rec->canBePurged()) { this->remove(rec); } #ifdef SK_TRACK_PURGE_SHAREDID_HITRATE found = true; #endif } rec = prev; } #ifdef SK_TRACK_PURGE_SHAREDID_HITRATE if (found) { gPurgeHitCounter += 1; } SkDebugf("PurgeShared calls=%d hits=%d rate=%g\n", gPurgeCallCounter, gPurgeHitCounter, gPurgeHitCounter * 100.0 / gPurgeCallCounter); #endif }