@@ -21,6 +21,11 @@ void main() {
21
21
void testMain () {
22
22
setUpCanvasKitTest ();
23
23
24
+ tearDown (() {
25
+ ui.Image .onCreate = null ;
26
+ ui.Image .onDispose = null ;
27
+ });
28
+
24
29
test ('toImage succeeds' , () async {
25
30
final ui.Image image = await _createImage ();
26
31
expect (image.runtimeType.toString (), equals ('CkImage' ));
@@ -44,8 +49,6 @@ void testMain() {
44
49
45
50
expect (onCreateInvokedCount, 2 );
46
51
expect (createdImage, image2);
47
-
48
- ui.Image .onCreate = null ;
49
52
});
50
53
51
54
test ('dispose() invokes onDispose once' , () async {
@@ -65,8 +68,6 @@ void testMain() {
65
68
66
69
expect (onDisposeInvokedCount, 2 );
67
70
expect (disposedImage, image2);
68
-
69
- ui.Image .onDispose = null ;
70
71
});
71
72
72
73
test ('fetchImage fetches image in chunks' , () async {
@@ -106,6 +107,30 @@ void testMain() {
106
107
expect (size? .width, 600 );
107
108
expect (size? .height, 300 );
108
109
});
110
+
111
+ test ('instantiateImageCodecWithSize disposes temporary image' , () async {
112
+ final Set <ui.Image > activeImages = < ui.Image > {};
113
+ ui.Image .onCreate = activeImages.add;
114
+ ui.Image .onDispose = activeImages.remove;
115
+
116
+ final ui.Image image = await _createImage ();
117
+ final ByteData ? imageData = await image.toByteData (format: ui.ImageByteFormat .png);
118
+ final ui.ImmutableBuffer imageBuffer = await ui.ImmutableBuffer .fromUint8List (imageData! .buffer.asUint8List ());
119
+ image.dispose ();
120
+
121
+ final ui.Codec codec = await ui.instantiateImageCodecWithSize (
122
+ imageBuffer,
123
+ getTargetSize: (w, h) => ui.TargetImageSize (width: w ~ / 2 , height: h ~ / 2 )
124
+ );
125
+ final ui.FrameInfo frameInfo = await codec.getNextFrame ();
126
+
127
+ expect (activeImages.length, 1 );
128
+
129
+ frameInfo.image.dispose ();
130
+ codec.dispose ();
131
+
132
+ expect (activeImages.length, 0 );
133
+ });
109
134
}
110
135
111
136
Future <ui.Image > _createImage () => _createPicture ().toImage (10 , 10 );
0 commit comments