internal DiskCacheConfig(Builder builder) { _version = builder._version; _baseDirectoryName = Preconditions.CheckNotNull(builder._baseDirectoryName); _baseDirectoryPathSupplier = Preconditions.CheckNotNull(builder._baseDirectoryPathSupplier); _defaultSizeLimit = builder._maxCacheSize; _lowDiskSpaceSizeLimit = builder._maxCacheSizeOnLowDiskSpace; _minimumSizeLimit = builder._maxCacheSizeOnVeryLowDiskSpace; _entryEvictionComparatorSupplier = Preconditions.CheckNotNull(builder._entryEvictionComparatorSupplier); _cacheErrorLogger = builder._cacheErrorLogger ?? NoOpCacheErrorLogger.Instance; _cacheEventListener = builder._cacheEventListener ?? NoOpCacheEventListener.Instance; _diskTrimmableRegistry = builder._diskTrimmableRegistry ?? NoOpDiskTrimmableRegistry.Instance; _indexPopulateAtStartupEnabled = builder._indexPopulateAtStartupEnabled; }
/// <summary> /// Provides the logic to determine the eviction order based on entry's /// access time and size. /// </summary> public Builder SetEntryEvictionComparatorSupplier(IEntryEvictionComparatorSupplier supplier) { _entryEvictionComparatorSupplier = supplier; return(this); }
/// <summary> /// Instantiates the <see cref="DiskStorageCache"/>. /// </summary> public DiskStorageCache( IDiskStorage diskStorage, IEntryEvictionComparatorSupplier entryEvictionComparatorSupplier, Params parameters, ICacheEventListener cacheEventListener, ICacheErrorLogger cacheErrorLogger, IDiskTrimmableRegistry diskTrimmableRegistry, bool indexPopulateAtStartupEnabled, Clock clock = null) { _lowDiskSpaceCacheSizeLimit = parameters.LowDiskSpaceCacheSizeLimit; _defaultCacheSizeLimit = parameters.DefaultCacheSizeLimit; _cacheSizeLimit = parameters.DefaultCacheSizeLimit; _statFsHelper = StatFsHelper.Instance; _storage = diskStorage; _entryEvictionComparatorSupplier = entryEvictionComparatorSupplier; _cacheSizeLastUpdateTime = default(DateTime); _cacheEventListener = cacheEventListener; _cacheSizeLimitMinimum = parameters.CacheSizeLimitMinimum; _cacheErrorLogger = cacheErrorLogger; _cacheStats = new CacheStats(); if (diskTrimmableRegistry != null) { diskTrimmableRegistry.RegisterDiskTrimmable(this); } _clock = clock ?? SystemClock.Get(); _indexPopulateAtStartupEnabled = indexPopulateAtStartupEnabled; _resourceIndex = new HashSet <string>(); if (_indexPopulateAtStartupEnabled) { Task.Run(() => { try { lock (_lock) { MaybeUpdateFileCacheSize(); } } finally { _countdownEvent.Signal(); } }); } else { _countdownEvent.Reset(0); } }