From 31f399f9739903fcd93b8cc25eac9f80add18a9b Mon Sep 17 00:00:00 2001 From: gaaclarke <30870216+gaaclarke@users.noreply.github.com> Date: Fri, 10 Jan 2020 09:43:03 -0800 Subject: [PATCH] Stopped increasing the cache size to accomodate large images. (#47387) --- packages/flutter/lib/src/painting/image_cache.dart | 14 +++++--------- .../flutter/test/painting/image_cache_test.dart | 8 ++++---- 2 files changed, 9 insertions(+), 13 deletions(-) diff --git a/packages/flutter/lib/src/painting/image_cache.dart b/packages/flutter/lib/src/painting/image_cache.dart index a16e3eba3c..75e8d05184 100644 --- a/packages/flutter/lib/src/painting/image_cache.dart +++ b/packages/flutter/lib/src/painting/image_cache.dart @@ -207,20 +207,16 @@ class ImageCache { // 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 _CachedImage image = _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; final _PendingImage pendingImage = _pendingImages.remove(key); if (pendingImage != null) { pendingImage.removeListener(); } - _cache[key] = image; - _checkCacheSize(); + if (imageSize <= maximumSizeBytes) { + _currentSizeBytes += imageSize; + _cache[key] = image; + _checkCacheSize(); + } } if (maximumSize > 0 && maximumSizeBytes > 0) { final ImageStreamListener streamListener = ImageStreamListener(listener); diff --git a/packages/flutter/test/painting/image_cache_test.dart b/packages/flutter/test/painting/image_cache_test.dart index 0d4dbbcf7b..aa1da21712 100644 --- a/packages/flutter/test/painting/image_cache_test.dart +++ b/packages/flutter/test/painting/image_cache_test.dart @@ -121,14 +121,14 @@ void main() { expect(imageCache.currentSizeBytes, 256); }); - test('Increases cache size if an image is loaded that is larger then the maximum size', () async { + test('Do not cache large images', () async { const TestImage testImage = 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); + expect(imageCache.currentSize, 0); + expect(imageCache.currentSizeBytes, 0); + expect(imageCache.maximumSizeBytes, 1); }); test('Returns null if an error is caught resolving an image', () {