Commit 5862fe4d by tonihei

Use more realistic time values for MediaCodecVideoRendererTest

This test became flaky after https://github.com/google/ExoPlayer/commit/cbb6878f9fef20ea440c6ffda77dd4edc00ce1f2 because some of the
unrealistic frame times ended up on the same release time.

Using realistic numbers avoids the flakiness.

PiperOrigin-RevId: 512566469
(cherry picked from commit 13700e0a)
parent 29eeca33
......@@ -19,6 +19,7 @@ import static android.view.Display.DEFAULT_DISPLAY;
import static com.google.android.exoplayer2.testutil.FakeSampleStream.FakeSampleStreamItem.END_OF_STREAM_ITEM;
import static com.google.android.exoplayer2.testutil.FakeSampleStream.FakeSampleStreamItem.format;
import static com.google.android.exoplayer2.testutil.FakeSampleStream.FakeSampleStreamItem.oneByteSample;
import static com.google.android.exoplayer2.util.Util.msToUs;
import static com.google.common.truth.Truth.assertThat;
import static org.mockito.ArgumentMatchers.anyLong;
import static org.mockito.ArgumentMatchers.eq;
......@@ -58,6 +59,7 @@ import com.google.android.exoplayer2.util.MimeTypes;
import com.google.common.collect.ImmutableList;
import java.util.Collections;
import java.util.List;
import java.util.concurrent.TimeUnit;
import java.util.stream.Collectors;
import org.junit.After;
import org.junit.Before;
......@@ -71,6 +73,7 @@ import org.mockito.junit.MockitoRule;
import org.robolectric.Shadows;
import org.robolectric.shadows.ShadowDisplay;
import org.robolectric.shadows.ShadowLooper;
import org.robolectric.shadows.ShadowSystemClock;
/** Unit test for {@link MediaCodecVideoRenderer}. */
@RunWith(AndroidJUnit4.class)
......@@ -260,7 +263,7 @@ public class MediaCodecVideoRendererTest {
/* initialFormat= */ pAsp1,
ImmutableList.of(oneByteSample(/* timeUs= */ 0, C.BUFFER_FLAG_KEY_FRAME)));
fakeSampleStream.writeData(/* startPositionUs= */ 0);
SystemClock.setCurrentTimeMillis(876_000_000);
mediaCodecVideoRenderer.enable(
RendererConfiguration.DEFAULT,
new Format[] {pAsp1, pAsp2, pAsp3},
......@@ -271,25 +274,27 @@ public class MediaCodecVideoRendererTest {
/* startPositionUs= */ 0,
/* offsetUs */ 0);
mediaCodecVideoRenderer.start();
mediaCodecVideoRenderer.render(/* positionUs= */ 0, SystemClock.elapsedRealtime() * 1000);
mediaCodecVideoRenderer.render(/* positionUs= */ 250, SystemClock.elapsedRealtime() * 1000);
mediaCodecVideoRenderer.render(/* positionUs= */ 0, msToUs(SystemClock.elapsedRealtime()));
ShadowSystemClock.advanceBy(10, TimeUnit.MILLISECONDS);
mediaCodecVideoRenderer.render(/* positionUs= */ 10_000, msToUs(SystemClock.elapsedRealtime()));
fakeSampleStream.append(
ImmutableList.of(
format(pAsp2),
oneByteSample(/* timeUs= */ 5_000),
oneByteSample(/* timeUs= */ 10_000),
format(pAsp3),
oneByteSample(/* timeUs= */ 15_000),
oneByteSample(/* timeUs= */ 20_000),
oneByteSample(/* timeUs= */ 40_000),
format(pAsp3),
oneByteSample(/* timeUs= */ 60_000),
oneByteSample(/* timeUs= */ 80_000),
END_OF_STREAM_ITEM));
fakeSampleStream.writeData(/* startPositionUs= */ 5_000);
fakeSampleStream.writeData(/* startPositionUs= */ 20_000);
mediaCodecVideoRenderer.setCurrentStreamFinal();
int pos = 500;
int positionUs = 20_000;
do {
mediaCodecVideoRenderer.render(/* positionUs= */ pos, SystemClock.elapsedRealtime() * 1000);
pos += 250;
ShadowSystemClock.advanceBy(10, TimeUnit.MILLISECONDS);
mediaCodecVideoRenderer.render(positionUs, msToUs(SystemClock.elapsedRealtime()));
positionUs += 10_000;
} while (!mediaCodecVideoRenderer.isEnded());
shadowOf(testMainLooper).idle();
......
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