public bool evict(object key, bool includeLive = true) { if (includeLive) { _LiveImage liveImage = _liveImages.getOrDefault(key); _liveImages.Remove(key); liveImage?.removeListener(); } D.assert(key != null); if (_pendingImages.TryGetValue(key, out var pendingImage)) { pendingImage.removeListener(); _pendingImages.Remove(key); return(true); } if (_cache.TryGetValue(key, out var image)) { _currentSizeBytes -= image.sizeBytes ?? 0; _cache.Remove(key); _lruKeys.Remove(image.node); return(true); } return(false); }
void _trackLiveImage(Object key, _LiveImage image, bool debugPutOk = true) { var imageOut = _liveImages.putIfAbsent(key, () => { D.assert(debugPutOk); image.completer.addOnLastListenerRemovedCallback(image.handleRemove); return(image); }); imageOut.sizeBytes = image.sizeBytes ?? image.sizeBytes; }