Commit e43658af by ibaker Committed by Oliver Woodman

Switch back from method ref to Runnable in HlsSampleStreamWrapper

This reverts https://github.com/google/ExoPlayer/commit/a81dea6a47c7df83f029e03080dd6878ab75f133 and adds in the necessary nullness annotations

After a discussion that this:: method references allocate on every call:
https://dzone.com/articles/passing-thismethod-reference-within-a-loop-affects

PiperOrigin-RevId: 275813989
parent e6e2dcc5
...@@ -121,6 +121,9 @@ import org.checkerframework.checker.nullness.qual.RequiresNonNull; ...@@ -121,6 +121,9 @@ import org.checkerframework.checker.nullness.qual.RequiresNonNull;
private final HlsChunkSource.HlsChunkHolder nextChunkHolder; private final HlsChunkSource.HlsChunkHolder nextChunkHolder;
private final ArrayList<HlsMediaChunk> mediaChunks; private final ArrayList<HlsMediaChunk> mediaChunks;
private final List<HlsMediaChunk> readOnlyMediaChunks; private final List<HlsMediaChunk> readOnlyMediaChunks;
// Using runnables rather than in-line method references to avoid repeated allocations.
private final Runnable maybeFinishPrepareRunnable;
private final Runnable onTracksEndedRunnable;
private final Handler handler; private final Handler handler;
private final ArrayList<HlsSampleStream> hlsSampleStreams; private final ArrayList<HlsSampleStream> hlsSampleStreams;
private final Map<String, DrmInitData> overridingDrmInitData; private final Map<String, DrmInitData> overridingDrmInitData;
...@@ -212,6 +215,13 @@ import org.checkerframework.checker.nullness.qual.RequiresNonNull; ...@@ -212,6 +215,13 @@ import org.checkerframework.checker.nullness.qual.RequiresNonNull;
mediaChunks = new ArrayList<>(); mediaChunks = new ArrayList<>();
readOnlyMediaChunks = Collections.unmodifiableList(mediaChunks); readOnlyMediaChunks = Collections.unmodifiableList(mediaChunks);
hlsSampleStreams = new ArrayList<>(); hlsSampleStreams = new ArrayList<>();
// Suppressions are needed because `this` is not initialized here.
@SuppressWarnings("nullness:methodref.receiver.bound.invalid")
Runnable maybeFinishPrepareRunnable = this::maybeFinishPrepare;
this.maybeFinishPrepareRunnable = maybeFinishPrepareRunnable;
@SuppressWarnings("nullness:methodref.receiver.bound.invalid")
Runnable onTracksEndedRunnable = this::onTracksEnded;
this.onTracksEndedRunnable = onTracksEndedRunnable;
handler = new Handler(); handler = new Handler();
lastSeekPositionUs = positionUs; lastSeekPositionUs = positionUs;
pendingResetPositionUs = positionUs; pendingResetPositionUs = positionUs;
...@@ -936,7 +946,7 @@ import org.checkerframework.checker.nullness.qual.RequiresNonNull; ...@@ -936,7 +946,7 @@ import org.checkerframework.checker.nullness.qual.RequiresNonNull;
@Override @Override
public void endTracks() { public void endTracks() {
tracksEnded = true; tracksEnded = true;
handler.post(this::onTracksEnded); handler.post(onTracksEndedRunnable);
} }
@Override @Override
...@@ -948,7 +958,7 @@ import org.checkerframework.checker.nullness.qual.RequiresNonNull; ...@@ -948,7 +958,7 @@ import org.checkerframework.checker.nullness.qual.RequiresNonNull;
@Override @Override
public void onUpstreamFormatChanged(Format format) { public void onUpstreamFormatChanged(Format format) {
handler.post(this::maybeFinishPrepare); handler.post(maybeFinishPrepareRunnable);
} }
// Called by the loading thread. // Called by the loading thread.
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or sign in to comment