Unverified Commit e4e8ab47 authored by Jonah Williams's avatar Jonah Williams Committed by GitHub

increase cache size if image is loaded that is larger than max size (#19352)

parent 5d0d1b03
...@@ -145,6 +145,12 @@ class ImageCache { ...@@ -145,6 +145,12 @@ class ImageCache {
// Images that fail to load don't contribute to cache size. // Images that fail to load don't contribute to cache size.
final int imageSize = info.image == null ? 0 : info.image.height * info.image.width * 4; final int imageSize = info.image == null ? 0 : info.image.height * info.image.width * 4;
final _CachedImage image = new _CachedImage(result, imageSize); final _CachedImage image = new _CachedImage(result, imageSize);
// If the image is bigger than the maximum cache size, and the cache size
// is not zero, then increase the cache size to the size of the image plus
// some change.
if (maximumSizeBytes > 0 && imageSize > maximumSizeBytes) {
_maximumSizeBytes = imageSize + 1000;
}
_currentSizeBytes += imageSize; _currentSizeBytes += imageSize;
_pendingImages.remove(key); _pendingImages.remove(key);
_cache[key] = image; _cache[key] = image;
......
...@@ -118,5 +118,15 @@ void main() { ...@@ -118,5 +118,15 @@ void main() {
expect(imageCache.currentSize, 1); expect(imageCache.currentSize, 1);
expect(imageCache.currentSizeBytes, 256); expect(imageCache.currentSizeBytes, 256);
}); });
test('Increases cache size if an image is loaded that is larger then the maximum size', () async {
const TestImage testImage = const TestImage(width: 8, height: 8);
imageCache.maximumSizeBytes = 1;
await extractOneFrame(const TestImageProvider(1, 1, image: testImage).resolve(ImageConfiguration.empty));
expect(imageCache.currentSize, 1);
expect(imageCache.currentSizeBytes, 256);
expect(imageCache.maximumSizeBytes, 256 + 1000);
});
}); });
} }
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment