cleanCache method

int cleanCache(
  1. int maxMemory
)

Implementation

int cleanCache(int maxMemory) {
  if (maxMemory <= 0) return -1;

  if (_usedMemory <= maxMemory) return 0;

  // Over the limit: the timed out entries first. At most once per second
  // (all the entries are checked), the minimal [timeout].
  if (hasTimeout) {
    var now = DateTime.now().millisecondsSinceEpoch;
    if (now - _lastCleanTimedOut >= 1000) {
      _lastCleanTimedOut = now;
      cleanCacheTimedOut();
    }
  }

  var usedMemory = _usedMemory;
  if (usedMemory <= maxMemory) return 0;

  var removeNeeded = usedMemory - maxMemory;

  var removed = 0;
  while (_bySize.isNotEmpty) {
    // The largest first.
    var entry = _bySize.first;
    var memory = entry.memory;
    _removeEntry(entry.request);
    removed += memory;

    if (verbose) {
      _log('Removed cached entry> memory: $memory / $removeNeeded');
    }

    if ((usedMemory - removed) <= maxMemory) break;
  }

  if (verbose) {
    _log('Total removed memory: $removed / $usedMemory / $maxMemory');
  }

  return removed;
}