Skip to content

Commit 8abfc8d

Browse files
jushgithub-actions[bot]
authored andcommitted
[Maps-SDK][Android] Fix benchmark tests Map leak (#14638)
GitOrigin-RevId: 11a8f121979939d7703fe235cf621c0f4ef6d206
1 parent 2a804a3 commit 8abfc8d

2 files changed

Lines changed: 19 additions & 3 deletions

File tree

maps-sdk/src/main/java/com/mapbox/maps/MapSurface.kt

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -90,6 +90,7 @@ class MapSurface : MapPluginProviderDelegate, MapControllable {
9090
* Must be called when the surface has been created.
9191
*/
9292
fun surfaceCreated() {
93+
logI(TAG, "surfaceCreated() called")
9394
renderer.surfaceCreated()
9495
// Set default refresh rate immediately to ensure map controller has a valid value
9596
mapController.setScreenRefreshRate(MapView.DEFAULT_FPS)
@@ -112,6 +113,8 @@ class MapSurface : MapPluginProviderDelegate, MapControllable {
112113
}
113114
}
114115

116+
// Stop any previous display refresh rate monitor in case `surfaceCreated` is called twice
117+
stopDisplayRefreshRateMonitor()
115118
// Subscribe to live refresh-rate changes (VRR mode switches, per-UID frameRateOverride).
116119
displayRefreshRateMonitor = DisplayRefreshRateMonitor(
117120
context = context,
@@ -134,9 +137,14 @@ class MapSurface : MapPluginProviderDelegate, MapControllable {
134137
* Must be called when the surface is destroyed.
135138
*/
136139
fun surfaceDestroyed() {
140+
logI(TAG, "surfaceDestroyed() called")
141+
stopDisplayRefreshRateMonitor()
142+
renderer.surfaceDestroyed()
143+
}
144+
145+
private fun stopDisplayRefreshRateMonitor() {
137146
displayRefreshRateMonitor?.stop()
138147
displayRefreshRateMonitor = null
139-
renderer.surfaceDestroyed()
140148
}
141149

142150
/**

maps-sdk/src/main/java/com/mapbox/maps/MapView.kt

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -239,6 +239,7 @@ open class MapView : FrameLayout, MapPluginProviderDelegate, MapControllable {
239239
* @see android.app.Fragment.onStart
240240
*/
241241
override fun onStart() {
242+
logI(TAG, "onStart() called")
242243
// Set default refresh rate immediately to ensure map controller has a valid value
243244
mapController.setScreenRefreshRate(DEFAULT_FPS)
244245
// Retrieve screen refresh rate off the main thread to prevent ANR
@@ -254,6 +255,8 @@ open class MapView : FrameLayout, MapPluginProviderDelegate, MapControllable {
254255
}
255256
}
256257

258+
// Stop any previous display refresh rate monitor in case `onStart` is called twice
259+
stopDisplayRefreshRateMonitor()
257260
// Subscribe to live refresh-rate changes (VRR mode switches, per-UID frameRateOverride).
258261
displayRefreshRateMonitor = DisplayRefreshRateMonitor(
259262
context = context,
@@ -272,14 +275,19 @@ open class MapView : FrameLayout, MapPluginProviderDelegate, MapControllable {
272275
* @see android.app.Fragment.onStop
273276
*/
274277
override fun onStop() {
275-
displayRefreshRateMonitor?.stop()
276-
displayRefreshRateMonitor = null
278+
logI(TAG, "onStop() called")
279+
stopDisplayRefreshRateMonitor()
277280
mapController.onStop()
278281
if (debugOptionsControllerDelegate.isInitialized()) {
279282
debugOptionsController.started = false
280283
}
281284
}
282285

286+
private fun stopDisplayRefreshRateMonitor() {
287+
displayRefreshRateMonitor?.stop()
288+
displayRefreshRateMonitor = null
289+
}
290+
283291
/**
284292
* You must call this method from the parent's Activity#onResume() or Fragment#onResume()
285293
* @see android.app.Activity.onResume

0 commit comments

Comments
 (0)