commit af8ccf1f0232c22783179c5f19cee665420c6526
parent 8cc8a5dc560cb9a16ef6cc6b309289fee52c4f58
Author: Ryan VanderMeulen <rvandermeulen@mozilla.com>
Date: Wed, 12 Nov 2025 14:08:20 +0000
Bug 1998850 - Fix StaticFieldLeak by making DefaultBandwidthMeter non-static. r=geckoview-reviewers,ohall
warning: Do not place Android context classes in static fields (static reference to DefaultBandwidthMeter
which has field context pointing to Context); this is a memory leak (StaticFieldLeak)
Differential Revision: https://phabricator.services.mozilla.com/D271720
Diffstat:
1 file changed, 5 insertions(+), 4 deletions(-)
diff --git a/mobile/android/geckoview/src/main/java/org/mozilla/gecko/media/GeckoHlsPlayer.java b/mobile/android/geckoview/src/main/java/org/mozilla/gecko/media/GeckoHlsPlayer.java
@@ -47,8 +47,6 @@ import org.mozilla.thirdparty.com.google.android.exoplayer2.util.Util;
@ReflectionTarget
public class GeckoHlsPlayer implements BaseHlsPlayer, ExoPlayer.EventListener {
private static final String LOGTAG = "GeckoHlsPlayer";
- private static final DefaultBandwidthMeter BANDWIDTH_METER =
- new DefaultBandwidthMeter.Builder(null).build();
private static final int MAX_TIMELINE_ITEM_LINES = 3;
private static final boolean DEBUG = !BuildConfig.MOZILLA_OFFICIAL;
@@ -688,6 +686,9 @@ public class GeckoHlsPlayer implements BaseHlsPlayer, ExoPlayer.EventListener {
return enabled ? "[X]" : "[ ]";
}
+ private final DefaultBandwidthMeter mBandwidthMeter =
+ new DefaultBandwidthMeter.Builder(null).build();
+
// Called on GeckoHlsPlayerThread
private void createExoPlayer(final String url) {
assertTrue(isPlayerThread());
@@ -699,7 +700,7 @@ public class GeckoHlsPlayer implements BaseHlsPlayer, ExoPlayer.EventListener {
// Prepare trackSelector
final TrackSelection.Factory videoTrackSelectionFactory =
- new AdaptiveTrackSelection.Factory(BANDWIDTH_METER);
+ new AdaptiveTrackSelection.Factory(mBandwidthMeter);
mTrackSelector = new DefaultTrackSelector(videoTrackSelectionFactory);
// Prepare customized renderer
@@ -727,7 +728,7 @@ public class GeckoHlsPlayer implements BaseHlsPlayer, ExoPlayer.EventListener {
mPlayer.addListener(this);
final Uri uri = Uri.parse(url);
- mMediaSource = buildDataSourceFactory(ctx, BANDWIDTH_METER).createMediaSource(uri);
+ mMediaSource = buildDataSourceFactory(ctx, mBandwidthMeter).createMediaSource(uri);
mSourceEventListener = new SourceEventListener();
mMediaSource.addEventListener(mMainHandler, mSourceEventListener);
if (DEBUG) {