Commit 0c8ce183 by tonihei

Use more realistic time values for MediaCodecVideoRendererTest

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

Using realistic numbers avoids the flakiness.

PiperOrigin-RevId: 512566469
parent c7b4ec4d
...@@ -16,6 +16,7 @@ ...@@ -16,6 +16,7 @@
package androidx.media3.exoplayer.video; package androidx.media3.exoplayer.video;
import static android.view.Display.DEFAULT_DISPLAY; import static android.view.Display.DEFAULT_DISPLAY;
import static androidx.media3.common.util.Util.msToUs;
import static androidx.media3.test.utils.FakeSampleStream.FakeSampleStreamItem.END_OF_STREAM_ITEM; import static androidx.media3.test.utils.FakeSampleStream.FakeSampleStreamItem.END_OF_STREAM_ITEM;
import static androidx.media3.test.utils.FakeSampleStream.FakeSampleStreamItem.format; import static androidx.media3.test.utils.FakeSampleStream.FakeSampleStreamItem.format;
import static androidx.media3.test.utils.FakeSampleStream.FakeSampleStreamItem.oneByteSample; import static androidx.media3.test.utils.FakeSampleStream.FakeSampleStreamItem.oneByteSample;
...@@ -59,6 +60,7 @@ import androidx.test.ext.junit.runners.AndroidJUnit4; ...@@ -59,6 +60,7 @@ import androidx.test.ext.junit.runners.AndroidJUnit4;
import com.google.common.collect.ImmutableList; import com.google.common.collect.ImmutableList;
import java.util.Collections; import java.util.Collections;
import java.util.List; import java.util.List;
import java.util.concurrent.TimeUnit;
import java.util.stream.Collectors; import java.util.stream.Collectors;
import org.junit.After; import org.junit.After;
import org.junit.Before; import org.junit.Before;
...@@ -72,6 +74,7 @@ import org.mockito.junit.MockitoRule; ...@@ -72,6 +74,7 @@ import org.mockito.junit.MockitoRule;
import org.robolectric.Shadows; import org.robolectric.Shadows;
import org.robolectric.shadows.ShadowDisplay; import org.robolectric.shadows.ShadowDisplay;
import org.robolectric.shadows.ShadowLooper; import org.robolectric.shadows.ShadowLooper;
import org.robolectric.shadows.ShadowSystemClock;
/** Unit test for {@link MediaCodecVideoRenderer}. */ /** Unit test for {@link MediaCodecVideoRenderer}. */
@RunWith(AndroidJUnit4.class) @RunWith(AndroidJUnit4.class)
...@@ -261,7 +264,7 @@ public class MediaCodecVideoRendererTest { ...@@ -261,7 +264,7 @@ public class MediaCodecVideoRendererTest {
/* initialFormat= */ pAsp1, /* initialFormat= */ pAsp1,
ImmutableList.of(oneByteSample(/* timeUs= */ 0, C.BUFFER_FLAG_KEY_FRAME))); ImmutableList.of(oneByteSample(/* timeUs= */ 0, C.BUFFER_FLAG_KEY_FRAME)));
fakeSampleStream.writeData(/* startPositionUs= */ 0); fakeSampleStream.writeData(/* startPositionUs= */ 0);
SystemClock.setCurrentTimeMillis(876_000_000);
mediaCodecVideoRenderer.enable( mediaCodecVideoRenderer.enable(
RendererConfiguration.DEFAULT, RendererConfiguration.DEFAULT,
new Format[] {pAsp1, pAsp2, pAsp3}, new Format[] {pAsp1, pAsp2, pAsp3},
...@@ -272,25 +275,27 @@ public class MediaCodecVideoRendererTest { ...@@ -272,25 +275,27 @@ public class MediaCodecVideoRendererTest {
/* startPositionUs= */ 0, /* startPositionUs= */ 0,
/* offsetUs */ 0); /* offsetUs */ 0);
mediaCodecVideoRenderer.start(); mediaCodecVideoRenderer.start();
mediaCodecVideoRenderer.render(/* positionUs= */ 0, SystemClock.elapsedRealtime() * 1000); mediaCodecVideoRenderer.render(/* positionUs= */ 0, msToUs(SystemClock.elapsedRealtime()));
mediaCodecVideoRenderer.render(/* positionUs= */ 250, SystemClock.elapsedRealtime() * 1000); ShadowSystemClock.advanceBy(10, TimeUnit.MILLISECONDS);
mediaCodecVideoRenderer.render(/* positionUs= */ 10_000, msToUs(SystemClock.elapsedRealtime()));
fakeSampleStream.append( fakeSampleStream.append(
ImmutableList.of( ImmutableList.of(
format(pAsp2), format(pAsp2),
oneByteSample(/* timeUs= */ 5_000),
oneByteSample(/* timeUs= */ 10_000),
format(pAsp3),
oneByteSample(/* timeUs= */ 15_000),
oneByteSample(/* timeUs= */ 20_000), oneByteSample(/* timeUs= */ 20_000),
oneByteSample(/* timeUs= */ 40_000),
format(pAsp3),
oneByteSample(/* timeUs= */ 60_000),
oneByteSample(/* timeUs= */ 80_000),
END_OF_STREAM_ITEM)); END_OF_STREAM_ITEM));
fakeSampleStream.writeData(/* startPositionUs= */ 5_000); fakeSampleStream.writeData(/* startPositionUs= */ 20_000);
mediaCodecVideoRenderer.setCurrentStreamFinal(); mediaCodecVideoRenderer.setCurrentStreamFinal();
int pos = 500; int positionUs = 20_000;
do { do {
mediaCodecVideoRenderer.render(/* positionUs= */ pos, SystemClock.elapsedRealtime() * 1000); ShadowSystemClock.advanceBy(10, TimeUnit.MILLISECONDS);
pos += 250; mediaCodecVideoRenderer.render(positionUs, msToUs(SystemClock.elapsedRealtime()));
positionUs += 10_000;
} while (!mediaCodecVideoRenderer.isEnded()); } while (!mediaCodecVideoRenderer.isEnded());
shadowOf(testMainLooper).idle(); 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