void SkResourceCache::add(Rec* rec) { this->checkMessages(); SkASSERT(rec); // See if we already have this key (racy inserts, etc.) Rec* existing = fHash->find(rec->getKey()); if (existing) { delete rec; return; } this->addToHead(rec); fHash->add(rec); if (gDumpCacheTransactions) { SkString bytesStr, totalStr; make_size_str(rec->bytesUsed(), &bytesStr); make_size_str(fTotalBytesUsed, &totalStr); SkDebugf("RC: add %5s %12p key %08x -- total %5s, count %d\n", bytesStr.c_str(), rec, rec->getHash(), totalStr.c_str(), fCount); } // since the new rec may push us over-budget, we perform a purge check now this->purgeAsNeeded(); }
void SkResourceCache::add(Rec* rec, void* payload) { this->checkMessages(); SkASSERT(rec); // See if we already have this key (racy inserts, etc.) if (Rec** preexisting = fHash->find(rec->getKey())) { Rec* prev = *preexisting; if (prev->canBePurged()) { // if it can be purged, the install may fail, so we have to remove it this->remove(prev); } else { // if it cannot be purged, we reuse it and delete the new one prev->postAddInstall(payload); delete rec; return; } } this->addToHead(rec); fHash->set(rec); rec->postAddInstall(payload); if (gDumpCacheTransactions) { SkString bytesStr, totalStr; make_size_str(rec->bytesUsed(), &bytesStr); make_size_str(fTotalBytesUsed, &totalStr); SkDebugf("RC: add %5s %12p key %08x -- total %5s, count %d\n", bytesStr.c_str(), rec, rec->getHash(), totalStr.c_str(), fCount); } // since the new rec may push us over-budget, we perform a purge check now this->purgeAsNeeded(); }
void SkResourceCache::remove(Rec* rec) { size_t used = rec->bytesUsed(); SkASSERT(used <= fTotalBytesUsed); this->release(rec); fHash->remove(rec->getKey()); fTotalBytesUsed -= used; fCount -= 1; if (gDumpCacheTransactions) { SkString bytesStr, totalStr; make_size_str(used, &bytesStr); make_size_str(fTotalBytesUsed, &totalStr); SkDebugf("RC: remove %5s %12p key %08x -- total %5s, count %d\n", bytesStr.c_str(), rec, rec->getHash(), totalStr.c_str(), fCount); } delete rec; }