Skip to content

Commit 610dcb7

Browse files
[camera_android_camerax] Fixes premature garbage collection of native objects when app is under memory pressure (#9287)
~~*Note:* Waiting on #9264 to land and to regenerate baseline file with.~~ This bumps `pigeon` to `25.3.2` and regenerates the code to fix a bug where native objects were getting garbage collected prematurely. See flutter/flutter#168531 Fixes flutter/flutter#152763 ## Pre-Review Checklist - [s] All existing and new tests are passing. [^1]: Regular contributors who have demonstrated familiarity with the repository guidelines only need to comment if the PR is not auto-exempted by repo tooling.
1 parent 45cb199 commit 610dcb7

File tree

6 files changed

+105
-98
lines changed

6 files changed

+105
-98
lines changed

packages/camera/camera_android_camerax/CHANGELOG.md

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,7 @@
1+
## 0.6.18+2
2+
3+
* Fixes premature garbage collection of native objects when app is under memory pressure.
4+
15
## 0.6.18+1
26

37
* Makes Java style improvements.
Lines changed: 71 additions & 71 deletions
Original file line numberDiff line numberDiff line change
@@ -1,125 +1,125 @@
11
<?xml version="1.0" encoding="UTF-8"?>
2-
<issues format="6" by="lint 8.6.0" type="baseline" client="gradle" dependencies="false" name="AGP (8.6.0)" variant="all" version="8.6.0">
2+
<issues format="6" by="lint 8.9.1" type="baseline" client="gradle" dependencies="false" name="AGP (8.9.1)" variant="all" version="8.9.1">
33

44
<issue
55
id="UnsafeOptInUsageError"
66
message="This declaration is opt-in and its usage should be marked with `@androidx.camera.camera2.interop.ExperimentalCamera2Interop` or `@OptIn(markerClass = androidx.camera.camera2.interop.ExperimentalCamera2Interop.class)`"
7-
errorLine1=" else if (value is androidx.camera.camera2.interop.CaptureRequestOptions) {"
8-
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
7+
errorLine1=" } else if (value is androidx.camera.camera2.interop.CaptureRequestOptions) {"
8+
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
99
<location
1010
file="src/main/java/io/flutter/plugins/camerax/CameraXLibrary.g.kt"
11-
line="939"
12-
column="24"/>
11+
line="937"
12+
column="25"/>
1313
</issue>
1414

1515
<issue
1616
id="UnsafeOptInUsageError"
1717
message="This declaration is opt-in and its usage should be marked with `@androidx.camera.camera2.interop.ExperimentalCamera2Interop` or `@OptIn(markerClass = androidx.camera.camera2.interop.ExperimentalCamera2Interop.class)`"
18-
errorLine1=" else if (value is androidx.camera.camera2.interop.Camera2CameraControl) {"
19-
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
18+
errorLine1=" } else if (value is androidx.camera.camera2.interop.Camera2CameraControl) {"
19+
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
2020
<location
2121
file="src/main/java/io/flutter/plugins/camerax/CameraXLibrary.g.kt"
22-
line="942"
23-
column="24"/>
22+
line="939"
23+
column="25"/>
2424
</issue>
2525

2626
<issue
2727
id="UnsafeOptInUsageError"
2828
message="This declaration is opt-in and its usage should be marked with `@androidx.camera.camera2.interop.ExperimentalCamera2Interop` or `@OptIn(markerClass = androidx.camera.camera2.interop.ExperimentalCamera2Interop.class)`"
29-
errorLine1=" else if (value is androidx.camera.camera2.interop.Camera2CameraInfo) {"
30-
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
29+
errorLine1=" } else if (value is androidx.camera.camera2.interop.Camera2CameraInfo) {"
30+
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
3131
<location
3232
file="src/main/java/io/flutter/plugins/camerax/CameraXLibrary.g.kt"
33-
line="954"
34-
column="24"/>
33+
line="947"
34+
column="25"/>
3535
</issue>
3636

3737
<issue
3838
id="UnsafeOptInUsageError"
3939
message="This declaration is opt-in and its usage should be marked with `@androidx.camera.camera2.interop.ExperimentalCamera2Interop` or `@OptIn(markerClass = androidx.camera.camera2.interop.ExperimentalCamera2Interop.class)`"
40-
errorLine1=" abstract fun pigeon_defaultConstructor(options: Map&lt;android.hardware.camera2.CaptureRequest.Key&lt;*>, Any?>): androidx.camera.camera2.interop.CaptureRequestOptions"
41-
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
40+
errorLine1=" ): androidx.camera.camera2.interop.CaptureRequestOptions"
41+
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
4242
<location
4343
file="src/main/java/io/flutter/plugins/camerax/CameraXLibrary.g.kt"
44-
line="5555"
45-
column="111"/>
44+
line="6418"
45+
column="6"/>
4646
</issue>
4747

4848
<issue
4949
id="UnsafeOptInUsageError"
5050
message="This declaration is opt-in and its usage should be marked with `@androidx.camera.camera2.interop.ExperimentalCamera2Interop` or `@OptIn(markerClass = androidx.camera.camera2.interop.ExperimentalCamera2Interop.class)`"
51-
errorLine1=" abstract fun getCaptureRequestOption(pigeon_instance: androidx.camera.camera2.interop.CaptureRequestOptions, key: android.hardware.camera2.CaptureRequest.Key&lt;*>): Any?"
52-
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
51+
errorLine1=" pigeon_instance: androidx.camera.camera2.interop.CaptureRequestOptions,"
52+
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
5353
<location
5454
file="src/main/java/io/flutter/plugins/camerax/CameraXLibrary.g.kt"
55-
line="5561"
56-
column="57"/>
55+
line="6422"
56+
column="24"/>
5757
</issue>
5858

5959
<issue
6060
id="UnsafeOptInUsageError"
6161
message="This declaration is opt-in and its usage should be marked with `@androidx.camera.camera2.interop.ExperimentalCamera2Interop` or `@OptIn(markerClass = androidx.camera.camera2.interop.ExperimentalCamera2Interop.class)`"
62-
errorLine1=" val pigeon_instanceArg = args[0] as androidx.camera.camera2.interop.CaptureRequestOptions"
62+
errorLine1=" val pigeon_instanceArg ="
6363
errorLine2=" ~~~~~~~~~~~~~~~~~~">
6464
<location
6565
file="src/main/java/io/flutter/plugins/camerax/CameraXLibrary.g.kt"
66-
line="5591"
66+
line="6467"
6767
column="17"/>
6868
</issue>
6969

7070
<issue
7171
id="UnsafeOptInUsageError"
7272
message="This declaration is opt-in and its usage should be marked with `@androidx.camera.camera2.interop.ExperimentalCamera2Interop` or `@OptIn(markerClass = androidx.camera.camera2.interop.ExperimentalCamera2Interop.class)`"
73-
errorLine1=" val pigeon_instanceArg = args[0] as androidx.camera.camera2.interop.CaptureRequestOptions"
74-
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
73+
errorLine1=" args[0] as androidx.camera.camera2.interop.CaptureRequestOptions"
74+
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
7575
<location
7676
file="src/main/java/io/flutter/plugins/camerax/CameraXLibrary.g.kt"
77-
line="5591"
78-
column="49"/>
77+
line="6468"
78+
column="28"/>
7979
</issue>
8080

8181
<issue
8282
id="UnsafeOptInUsageError"
8383
message="This declaration is opt-in and its usage should be marked with `@androidx.camera.camera2.interop.ExperimentalCamera2Interop` or `@OptIn(markerClass = androidx.camera.camera2.interop.ExperimentalCamera2Interop.class)`"
84-
errorLine1=" fun pigeon_newInstance(pigeon_instanceArg: androidx.camera.camera2.interop.CaptureRequestOptions, callback: (Result&lt;Unit>) -> Unit)"
85-
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
84+
errorLine1=" pigeon_instanceArg: androidx.camera.camera2.interop.CaptureRequestOptions,"
85+
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
8686
<location
8787
file="src/main/java/io/flutter/plugins/camerax/CameraXLibrary.g.kt"
88-
line="5609"
89-
column="46"/>
88+
line="6488"
89+
column="27"/>
9090
</issue>
9191

9292
<issue
9393
id="UnsafeOptInUsageError"
9494
message="This declaration is opt-in and its usage should be marked with `@androidx.camera.camera2.interop.ExperimentalCamera2Interop` or `@OptIn(markerClass = androidx.camera.camera2.interop.ExperimentalCamera2Interop.class)`"
95-
errorLine1=" abstract fun from(cameraControl: androidx.camera.core.CameraControl): androidx.camera.camera2.interop.Camera2CameraControl"
96-
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
95+
errorLine1=" ): androidx.camera.camera2.interop.Camera2CameraControl"
96+
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
9797
<location
9898
file="src/main/java/io/flutter/plugins/camerax/CameraXLibrary.g.kt"
99-
line="5647"
100-
column="73"/>
99+
line="6533"
100+
column="6"/>
101101
</issue>
102102

103103
<issue
104104
id="UnsafeOptInUsageError"
105105
message="This declaration is opt-in and its usage should be marked with `@androidx.camera.camera2.interop.ExperimentalCamera2Interop` or `@OptIn(markerClass = androidx.camera.camera2.interop.ExperimentalCamera2Interop.class)`"
106-
errorLine1=" abstract fun addCaptureRequestOptions(pigeon_instance: androidx.camera.camera2.interop.Camera2CameraControl, bundle: androidx.camera.camera2.interop.CaptureRequestOptions, callback: (Result&lt;Unit>) -> Unit)"
107-
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
106+
errorLine1=" pigeon_instance: androidx.camera.camera2.interop.Camera2CameraControl,"
107+
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
108108
<location
109109
file="src/main/java/io/flutter/plugins/camerax/CameraXLibrary.g.kt"
110-
line="5653"
111-
column="58"/>
110+
line="6537"
111+
column="24"/>
112112
</issue>
113113

114114
<issue
115115
id="UnsafeOptInUsageError"
116116
message="This declaration is opt-in and its usage should be marked with `@androidx.camera.camera2.interop.ExperimentalCamera2Interop` or `@OptIn(markerClass = androidx.camera.camera2.interop.ExperimentalCamera2Interop.class)`"
117-
errorLine1=" abstract fun addCaptureRequestOptions(pigeon_instance: androidx.camera.camera2.interop.Camera2CameraControl, bundle: androidx.camera.camera2.interop.CaptureRequestOptions, callback: (Result&lt;Unit>) -> Unit)"
118-
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
117+
errorLine1=" bundle: androidx.camera.camera2.interop.CaptureRequestOptions,"
118+
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
119119
<location
120120
file="src/main/java/io/flutter/plugins/camerax/CameraXLibrary.g.kt"
121-
line="5653"
122-
column="120"/>
121+
line="6538"
122+
column="15"/>
123123
</issue>
124124

125125
<issue
@@ -129,7 +129,7 @@
129129
errorLine2=" ~~~~~~~~~~~~~~~~~~">
130130
<location
131131
file="src/main/java/io/flutter/plugins/camerax/CameraXLibrary.g.kt"
132-
line="5683"
132+
line="6583"
133133
column="17"/>
134134
</issue>
135135

@@ -140,7 +140,7 @@
140140
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
141141
<location
142142
file="src/main/java/io/flutter/plugins/camerax/CameraXLibrary.g.kt"
143-
line="5683"
143+
line="6583"
144144
column="49"/>
145145
</issue>
146146

@@ -151,7 +151,7 @@
151151
errorLine2=" ~~~~~~~~~">
152152
<location
153153
file="src/main/java/io/flutter/plugins/camerax/CameraXLibrary.g.kt"
154-
line="5684"
154+
line="6584"
155155
column="17"/>
156156
</issue>
157157

@@ -162,52 +162,52 @@
162162
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
163163
<location
164164
file="src/main/java/io/flutter/plugins/camerax/CameraXLibrary.g.kt"
165-
line="5684"
165+
line="6584"
166166
column="40"/>
167167
</issue>
168168

169169
<issue
170170
id="UnsafeOptInUsageError"
171171
message="This declaration is opt-in and its usage should be marked with `@androidx.camera.camera2.interop.ExperimentalCamera2Interop` or `@OptIn(markerClass = androidx.camera.camera2.interop.ExperimentalCamera2Interop.class)`"
172-
errorLine1=" fun pigeon_newInstance(pigeon_instanceArg: androidx.camera.camera2.interop.Camera2CameraControl, callback: (Result&lt;Unit>) -> Unit)"
173-
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
172+
errorLine1=" pigeon_instanceArg: androidx.camera.camera2.interop.Camera2CameraControl,"
173+
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
174174
<location
175175
file="src/main/java/io/flutter/plugins/camerax/CameraXLibrary.g.kt"
176-
line="5703"
177-
column="46"/>
176+
line="6604"
177+
column="27"/>
178178
</issue>
179179

180180
<issue
181181
id="UnsafeOptInUsageError"
182182
message="This declaration is opt-in and its usage should be marked with `@androidx.camera.camera2.interop.ExperimentalCamera2Interop` or `@OptIn(markerClass = androidx.camera.camera2.interop.ExperimentalCamera2Interop.class)`"
183-
errorLine1=" abstract fun from(cameraInfo: androidx.camera.core.CameraInfo): androidx.camera.camera2.interop.Camera2CameraInfo"
184-
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
183+
errorLine1=" ): androidx.camera.camera2.interop.Camera2CameraInfo"
184+
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
185185
<location
186186
file="src/main/java/io/flutter/plugins/camerax/CameraXLibrary.g.kt"
187-
line="5946"
188-
column="67"/>
187+
line="6899"
188+
column="6"/>
189189
</issue>
190190

191191
<issue
192192
id="UnsafeOptInUsageError"
193193
message="This declaration is opt-in and its usage should be marked with `@androidx.camera.camera2.interop.ExperimentalCamera2Interop` or `@OptIn(markerClass = androidx.camera.camera2.interop.ExperimentalCamera2Interop.class)`"
194-
errorLine1=" abstract fun getCameraId(pigeon_instance: androidx.camera.camera2.interop.Camera2CameraInfo): String"
195-
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
194+
errorLine1=" pigeon_instance: androidx.camera.camera2.interop.Camera2CameraInfo"
195+
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
196196
<location
197197
file="src/main/java/io/flutter/plugins/camerax/CameraXLibrary.g.kt"
198-
line="5949"
199-
column="45"/>
198+
line="6903"
199+
column="24"/>
200200
</issue>
201201

202202
<issue
203203
id="UnsafeOptInUsageError"
204204
message="This declaration is opt-in and its usage should be marked with `@androidx.camera.camera2.interop.ExperimentalCamera2Interop` or `@OptIn(markerClass = androidx.camera.camera2.interop.ExperimentalCamera2Interop.class)`"
205-
errorLine1=" abstract fun getCameraCharacteristic(pigeon_instance: androidx.camera.camera2.interop.Camera2CameraInfo, key: android.hardware.camera2.CameraCharacteristics.Key&lt;*>): Any?"
206-
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
205+
errorLine1=" pigeon_instance: androidx.camera.camera2.interop.Camera2CameraInfo,"
206+
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
207207
<location
208208
file="src/main/java/io/flutter/plugins/camerax/CameraXLibrary.g.kt"
209-
line="5952"
210-
column="57"/>
209+
line="6908"
210+
column="24"/>
211211
</issue>
212212

213213
<issue
@@ -217,7 +217,7 @@
217217
errorLine2=" ~~~~~~~~~~~~~~~~~~">
218218
<location
219219
file="src/main/java/io/flutter/plugins/camerax/CameraXLibrary.g.kt"
220-
line="5982"
220+
line="6950"
221221
column="17"/>
222222
</issue>
223223

@@ -228,7 +228,7 @@
228228
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
229229
<location
230230
file="src/main/java/io/flutter/plugins/camerax/CameraXLibrary.g.kt"
231-
line="5982"
231+
line="6950"
232232
column="49"/>
233233
</issue>
234234

@@ -239,7 +239,7 @@
239239
errorLine2=" ~~~~~~~~~~~~~~~~~~">
240240
<location
241241
file="src/main/java/io/flutter/plugins/camerax/CameraXLibrary.g.kt"
242-
line="5999"
242+
line="6972"
243243
column="17"/>
244244
</issue>
245245

@@ -250,19 +250,19 @@
250250
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
251251
<location
252252
file="src/main/java/io/flutter/plugins/camerax/CameraXLibrary.g.kt"
253-
line="5999"
253+
line="6972"
254254
column="49"/>
255255
</issue>
256256

257257
<issue
258258
id="UnsafeOptInUsageError"
259259
message="This declaration is opt-in and its usage should be marked with `@androidx.camera.camera2.interop.ExperimentalCamera2Interop` or `@OptIn(markerClass = androidx.camera.camera2.interop.ExperimentalCamera2Interop.class)`"
260-
errorLine1=" fun pigeon_newInstance(pigeon_instanceArg: androidx.camera.camera2.interop.Camera2CameraInfo, callback: (Result&lt;Unit>) -> Unit)"
261-
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
260+
errorLine1=" pigeon_instanceArg: androidx.camera.camera2.interop.Camera2CameraInfo,"
261+
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
262262
<location
263263
file="src/main/java/io/flutter/plugins/camerax/CameraXLibrary.g.kt"
264-
line="6017"
265-
column="46"/>
264+
line="6992"
265+
column="27"/>
266266
</issue>
267267

268268
</issues>

packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/CameraXLibrary.g.kt

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
// Copyright 2013 The Flutter Authors. All rights reserved.
22
// Use of this source code is governed by a BSD-style license that can be
33
// found in the LICENSE file.
4-
// Autogenerated from Pigeon (v25.3.1), do not edit directly.
4+
// Autogenerated from Pigeon (v25.3.2), do not edit directly.
55
// See also: https://pub.dev/packages/pigeon
66
@file:Suppress("UNCHECKED_CAST", "ArrayInDataClass")
77

@@ -3643,7 +3643,7 @@ abstract class PigeonApiVideoRecordEventListener(
36433643
abstract class PigeonApiPendingRecording(
36443644
open val pigeonRegistrar: CameraXLibraryPigeonProxyApiRegistrar
36453645
) {
3646-
/** Enables audio to be recorded for this recording. */
3646+
/** Enables/disables audio to be recorded for this recording. */
36473647
abstract fun withAudioEnabled(
36483648
pigeon_instance: androidx.camera.video.PendingRecording,
36493649
initialMuted: Boolean

packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/ProxyApiRegistrar.java

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -60,7 +60,7 @@ void onFailure(@NonNull String methodName, @NonNull Throwable throwable) {
6060
}
6161

6262
// PreviewProxyApi maintains a state to track SurfaceProducers provided by the Flutter engine.
63-
@NonNull private final PreviewProxyApi previewProxyApi = new PreviewProxyApi(this);
63+
@Nullable private PreviewProxyApi previewProxyApi;
6464

6565
public ProxyApiRegistrar(
6666
@NonNull BinaryMessenger binaryMessenger,
@@ -221,6 +221,9 @@ public DeviceOrientationManagerProxyApi getPigeonApiDeviceOrientationManager() {
221221
@NonNull
222222
@Override
223223
public PigeonApiPreview getPigeonApiPreview() {
224+
if (previewProxyApi == null) {
225+
previewProxyApi = new PreviewProxyApi(this);
226+
}
224227
return previewProxyApi;
225228
}
226229

0 commit comments

Comments
 (0)