Skip to content

Commit 65177cb

Browse files
author
Jonah Williams
authored
[vector_graphics] Revert leak tracker change (#8544)
The leak tracker changes are causing runtime crashes because an object is disposed too eagerly. Fixes flutter/flutter#162486
1 parent c6fcb9b commit 65177cb

File tree

7 files changed

+15
-32
lines changed

7 files changed

+15
-32
lines changed

packages/vector_graphics/CHANGELOG.md

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,7 @@
1+
## 1.1.17
2+
3+
* Reverts leaker tracker changes that caused runtime exceptions.
4+
15
## 1.1.16
26

37
* Fixes some memory leaks by disposing undisposed `ImageInfo`, `ui.Picture` and `Picture`.

packages/vector_graphics/lib/src/listener.dart

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -252,7 +252,7 @@ class FlutterVectorGraphicsListener extends VectorGraphicsCodecListener {
252252
final List<_TextConfig> _textConfig = <_TextConfig>[];
253253
final List<_TextPosition> _textPositions = <_TextPosition>[];
254254
final List<Future<void>> _pendingImages = <Future<void>>[];
255-
final Map<int, ImageInfo> _images = <int, ImageInfo>{};
255+
final Map<int, Image> _images = <int, Image>{};
256256
final Map<int, _PatternState> _patterns = <int, _PatternState>{};
257257
Path? _currentPath;
258258
Size _size = Size.zero;
@@ -283,7 +283,7 @@ class FlutterVectorGraphicsListener extends VectorGraphicsCodecListener {
283283
try {
284284
return PictureInfo._(_recorder.endRecording(), _size);
285285
} finally {
286-
for (final ImageInfo image in _images.values) {
286+
for (final Image image in _images.values) {
287287
image.dispose();
288288
}
289289
_images.clear();
@@ -746,7 +746,7 @@ class FlutterVectorGraphicsListener extends VectorGraphicsCodecListener {
746746
listener = ImageStreamListener(
747747
(ImageInfo image, bool synchronousCall) {
748748
cacheCompleter.removeListener(listener);
749-
_images[imageId] = image;
749+
_images[imageId] = image.image;
750750
completer.complete();
751751
},
752752
onError: (Object exception, StackTrace? stackTrace) {
@@ -773,7 +773,7 @@ class FlutterVectorGraphicsListener extends VectorGraphicsCodecListener {
773773
@override
774774
void onDrawImage(int imageId, double x, double y, double width, double height,
775775
Float64List? transform) {
776-
final Image image = _images[imageId]!.image;
776+
final Image image = _images[imageId]!;
777777
if (transform != null) {
778778
_canvas.save();
779779
_canvas.transform(transform);

packages/vector_graphics/lib/src/render_vector_graphic.dart

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -213,7 +213,6 @@ class RenderVectorGraphic extends RenderBox {
213213

214214
final ui.Image pending =
215215
rasterPicture.toImageSync(scaledWidth, scaledHeight);
216-
rasterPicture.dispose();
217216
return RasterData(pending, 0, key);
218217
}
219218

packages/vector_graphics/lib/src/vector_graphics.dart

Lines changed: 3 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -340,10 +340,8 @@ class _VectorGraphicWidgetState extends State<VectorGraphic> {
340340
return;
341341
}
342342
data.count -= 1;
343-
if (data.count == 0) {
344-
if (_livePictureCache.containsKey(data.key)) {
345-
_livePictureCache.remove(data.key);
346-
}
343+
if (data.count == 0 && _livePictureCache.containsKey(data.key)) {
344+
_livePictureCache.remove(data.key);
347345
data.pictureInfo.picture.dispose();
348346
}
349347
}
@@ -384,7 +382,7 @@ class _VectorGraphicWidgetState extends State<VectorGraphic> {
384382
}
385383

386384
Future<void> _loadAssetBytes() async {
387-
// First check if we have an available picture and use this immediately.
385+
// First check if we have an avilable picture and use this immediately.
388386
final Object loaderKey = widget.loader.cacheKey(context);
389387
final _PictureKey key =
390388
_PictureKey(loaderKey, locale, textDirection, widget.clipViewbox);

packages/vector_graphics/pubspec.yaml

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@ name: vector_graphics
22
description: A vector graphics rendering package for Flutter using a binary encoding.
33
repository: https://github.com/flutter/packages/tree/main/packages/vector_graphics
44
issue_tracker: https://github.com/flutter/flutter/issues?q=is%3Aissue+is%3Aopen+label%3A%22p%3A+vector_graphics%22
5-
version: 1.1.16
5+
version: 1.1.17
66

77
environment:
88
sdk: ^3.4.0
@@ -17,7 +17,6 @@ dependencies:
1717
dev_dependencies:
1818
flutter_test:
1919
sdk: flutter
20-
leak_tracker_flutter_testing: any
2120
vector_graphics_compiler: ^1.1.11+1
2221

2322
platforms:

packages/vector_graphics/test/flutter_test_config.dart

Lines changed: 0 additions & 13 deletions
This file was deleted.

packages/vector_graphics/test/vector_graphics_test.dart

Lines changed: 3 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -442,9 +442,7 @@ void main() {
442442
);
443443
await tester.pumpAndSettle();
444444

445-
final PictureInfo picture = await completer.future;
446-
addTearDown(picture.picture.dispose);
447-
expect(picture, isA<PictureInfo>());
445+
expect(await completer.future, isA<PictureInfo>());
448446
expect(debugLastLocale, const Locale('fr', 'CH'));
449447
expect(debugLastTextDirection, TextDirection.rtl);
450448
});
@@ -477,9 +475,7 @@ void main() {
477475
);
478476
await tester.pumpAndSettle();
479477

480-
final PictureInfo picture = await completer.future;
481-
addTearDown(picture.picture.dispose);
482-
expect(picture, isA<PictureInfo>());
478+
expect(await completer.future, isA<PictureInfo>());
483479
expect(debugLastLocale, PlatformDispatcher.instance.locale);
484480
expect(debugLastTextDirection, TextDirection.ltr);
485481
});
@@ -588,7 +584,7 @@ void main() {
588584
expect(imageCache.statusForKey(imageKey).live, false);
589585
expect(imageCache.statusForKey(imageKey).keepAlive, true);
590586

591-
// A blue square, because the image is available now.
587+
// A blue square, becuase the image is available now.
592588
await expectLater(
593589
find.byKey(key),
594590
matchesGoldenFile('vg_with_image_blue.png'),

0 commit comments

Comments
 (0)