From 85793ea2ca2a75feae0bd106236971e2c8893f08 Mon Sep 17 00:00:00 2001 From: ibaker Date: Wed, 3 Apr 2024 08:01:50 -0700 Subject: [PATCH] Update `ClippedPlaybackTest` to fail on a player error (vs timing out) Also explicitly use a synchronized list to collect cues. The previous bare `ArrayList` was probably fine, because the `ConditionVariable` creates a memory barrier between the main thread and the test thread, but this seems more explicit (and any performance implications of the synchronization don't matter for this test). PiperOrigin-RevId: 621523824 --- .../media3/exoplayer/ClippedPlaybackTest.java | 18 ++++++++++++++++-- 1 file changed, 16 insertions(+), 2 deletions(-) diff --git a/libraries/exoplayer/src/androidTest/java/androidx/media3/exoplayer/ClippedPlaybackTest.java b/libraries/exoplayer/src/androidTest/java/androidx/media3/exoplayer/ClippedPlaybackTest.java index 19376fe793..0cc3f5f2e6 100644 --- a/libraries/exoplayer/src/androidTest/java/androidx/media3/exoplayer/ClippedPlaybackTest.java +++ b/libraries/exoplayer/src/androidTest/java/androidx/media3/exoplayer/ClippedPlaybackTest.java @@ -24,6 +24,7 @@ import androidx.media3.common.C; import androidx.media3.common.MediaItem; import androidx.media3.common.MediaItem.SubtitleConfiguration; import androidx.media3.common.MimeTypes; +import androidx.media3.common.PlaybackException; import androidx.media3.common.Player; import androidx.media3.common.text.Cue; import androidx.media3.common.text.CueGroup; @@ -33,6 +34,7 @@ import androidx.media3.exoplayer.source.DefaultMediaSourceFactory; import com.google.common.collect.ImmutableList; import com.google.common.collect.Iterables; import java.util.ArrayList; +import java.util.Collections; import java.util.List; import java.util.concurrent.atomic.AtomicBoolean; import java.util.concurrent.atomic.AtomicReference; @@ -180,10 +182,12 @@ public final class ClippedPlaybackTest { private final ConditionVariable playbackEnded; private final List> cues; + private final AtomicReference playerError; private TextCapturingPlaybackListener() { playbackEnded = new ConditionVariable(); - cues = new ArrayList<>(); + cues = Collections.synchronizedList(new ArrayList<>()); + playerError = new AtomicReference<>(); } @Override @@ -198,8 +202,18 @@ public final class ClippedPlaybackTest { } } - public void block() throws InterruptedException { + @Override + public void onPlayerError(PlaybackException error) { + playerError.set(error); + playbackEnded.open(); + } + + public void block() throws InterruptedException, PlaybackException { playbackEnded.block(); + PlaybackException playerError = this.playerError.get(); + if (playerError != null) { + throw playerError; + } } } }