diff --git a/dev/tracing_tests/test/image_cache_tracing_test.dart b/dev/tracing_tests/test/image_cache_tracing_test.dart index 6cc366b46b..c1ce7bcd6e 100644 --- a/dev/tracing_tests/test/image_cache_tracing_test.dart +++ b/dev/tracing_tests/test/image_cache_tracing_test.dart @@ -34,11 +34,18 @@ void main() { >[ { 'name': 'ImageCache.putIfAbsent', - 'args': {'key': 'Test', 'isolateId': isolateId}, + 'args': { + 'key': 'Test', + 'isolateId': isolateId, + 'parentId': null, + }, }, { 'name': 'listener', - 'args': {'isolateId': isolateId}, + 'args': { + 'isolateId': isolateId, + 'parentId': null, + }, }, { 'name': 'ImageCache.clear', @@ -48,15 +55,24 @@ void main() { 'liveImages': 1, 'currentSizeInBytes': 0, 'isolateId': isolateId, + 'parentId': null, }, }, { 'name': 'ImageCache.putIfAbsent', - 'args': {'key': 'Test2', 'isolateId': isolateId}, + 'args': { + 'key': 'Test2', + 'isolateId': isolateId, + 'parentId': null, + }, }, { 'name': 'ImageCache.evict', - 'args': {'sizeInBytes': 4, 'isolateId': isolateId}, + 'args': { + 'sizeInBytes': 4, + 'isolateId': isolateId, + 'parentId': null, + }, }, ], ); diff --git a/packages/flutter/lib/src/painting/image_cache.dart b/packages/flutter/lib/src/painting/image_cache.dart index 06c6c3da42..d14bab2ccd 100644 --- a/packages/flutter/lib/src/painting/image_cache.dart +++ b/packages/flutter/lib/src/painting/image_cache.dart @@ -325,7 +325,6 @@ class ImageCache { /// cause other images in the cache to be evicted. ImageStreamCompleter? putIfAbsent(Object key, ImageStreamCompleter Function() loader, { ImageErrorListener? onError }) { TimelineTask? timelineTask; - TimelineTask? listenerTask; if (!kReleaseMode) { timelineTask = TimelineTask()..start( 'ImageCache.putIfAbsent', @@ -398,7 +397,7 @@ class ImageCache { } if (!kReleaseMode) { - listenerTask = TimelineTask(parent: timelineTask)..start('listener'); + timelineTask!.start('listener'); } // A multi-frame provider may call the listener more than once. We need do make // sure that some cleanup works won't run multiple times, such as finishing the @@ -425,7 +424,7 @@ class ImageCache { // Only touch if the cache was enabled when resolve was initially called. if (trackPendingImage) { - _touch(key, image, listenerTask); + _touch(key, image, timelineTask); } else { image.dispose(); } @@ -435,14 +434,15 @@ class ImageCache { pendingImage.removeListener(); } if (!kReleaseMode && !listenedOnce) { - listenerTask!.finish(arguments: { - 'syncCall': syncCall, - 'sizeInBytes': sizeBytes, - }); - timelineTask!.finish(arguments: { - 'currentSizeBytes': currentSizeBytes, - 'currentSize': currentSize, - }); + timelineTask! + ..finish(arguments: { + 'syncCall': syncCall, + 'sizeInBytes': sizeBytes, + }) + ..finish(arguments: { + 'currentSizeBytes': currentSizeBytes, + 'currentSize': currentSize, + }); } listenedOnce = true; } @@ -504,9 +504,8 @@ class ImageCache { // maximum, or the cache is empty. void _checkCacheSize(TimelineTask? timelineTask) { final Map finishArgs = {}; - TimelineTask? checkCacheTask; if (!kReleaseMode) { - checkCacheTask = TimelineTask(parent: timelineTask)..start('checkCacheSize'); + timelineTask!.start('checkCacheSize'); finishArgs['evictedKeys'] = []; finishArgs['currentSize'] = currentSize; finishArgs['currentSizeBytes'] = currentSizeBytes; @@ -524,7 +523,7 @@ class ImageCache { if (!kReleaseMode) { finishArgs['endSize'] = currentSize; finishArgs['endSizeBytes'] = currentSizeBytes; - checkCacheTask!.finish(arguments: finishArgs); + timelineTask!.finish(arguments: finishArgs); } assert(_currentSizeBytes >= 0); assert(_cache.length <= maximumSize);