Use more realistic time values for MediaCodecVideoRendererTest

This test became flaky after cbb6878f9f 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 13700e0aec)
This commit is contained in:
tonihei 2023-02-27 10:11:19 +00:00
parent 29eeca3359
commit 5862fe4d8c

View file

@ -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();