mirror of
https://github.com/androidx/media.git
synced 2025-04-30 06:46:50 +08:00
Work around SurfaceView creation issues on API<26 for tests
PiperOrigin-RevId: 731643287
This commit is contained in:
parent
addf01b9a8
commit
a3c9060daa
@ -24,6 +24,7 @@ import androidx.media3.common.TrackSelectionParameters;
|
|||||||
import androidx.media3.exoplayer.upstream.DefaultBandwidthMeter;
|
import androidx.media3.exoplayer.upstream.DefaultBandwidthMeter;
|
||||||
import androidx.media3.exoplayer.util.EventLogger;
|
import androidx.media3.exoplayer.util.EventLogger;
|
||||||
import androidx.media3.test.utils.BinderStressCreator;
|
import androidx.media3.test.utils.BinderStressCreator;
|
||||||
|
import androidx.media3.test.utils.TestUtil;
|
||||||
import androidx.test.core.app.ApplicationProvider;
|
import androidx.test.core.app.ApplicationProvider;
|
||||||
import androidx.test.ext.junit.runners.AndroidJUnit4;
|
import androidx.test.ext.junit.runners.AndroidJUnit4;
|
||||||
import androidx.test.filters.SdkSuppress;
|
import androidx.test.filters.SdkSuppress;
|
||||||
@ -41,7 +42,7 @@ public class ExoPlayerBinderStressTest {
|
|||||||
@Test
|
@Test
|
||||||
public void binderStressTest() throws Exception {
|
public void binderStressTest() throws Exception {
|
||||||
Context context = ApplicationProvider.getApplicationContext();
|
Context context = ApplicationProvider.getApplicationContext();
|
||||||
SurfaceView surfaceView = new SurfaceView(context);
|
SurfaceView surfaceView = TestUtil.createSurfaceView(context);
|
||||||
|
|
||||||
BinderStressCreator.verifyNoSystemBinderCalls(
|
BinderStressCreator.verifyNoSystemBinderCalls(
|
||||||
/* systemUnderTest= */ () -> {
|
/* systemUnderTest= */ () -> {
|
||||||
|
@ -27,6 +27,7 @@ import androidx.media3.exoplayer.ExoPlayer;
|
|||||||
import androidx.media3.exoplayer.upstream.DefaultBandwidthMeter;
|
import androidx.media3.exoplayer.upstream.DefaultBandwidthMeter;
|
||||||
import androidx.media3.exoplayer.util.EventLogger;
|
import androidx.media3.exoplayer.util.EventLogger;
|
||||||
import androidx.media3.test.utils.BinderStressCreator;
|
import androidx.media3.test.utils.BinderStressCreator;
|
||||||
|
import androidx.media3.test.utils.TestUtil;
|
||||||
import androidx.test.core.app.ApplicationProvider;
|
import androidx.test.core.app.ApplicationProvider;
|
||||||
import androidx.test.ext.junit.runners.AndroidJUnit4;
|
import androidx.test.ext.junit.runners.AndroidJUnit4;
|
||||||
import androidx.test.filters.SdkSuppress;
|
import androidx.test.filters.SdkSuppress;
|
||||||
@ -45,7 +46,7 @@ public class DefaultPreloadManagerBinderStressTest {
|
|||||||
@Test
|
@Test
|
||||||
public void binderStressTest() throws Exception {
|
public void binderStressTest() throws Exception {
|
||||||
Context context = ApplicationProvider.getApplicationContext();
|
Context context = ApplicationProvider.getApplicationContext();
|
||||||
SurfaceView surfaceView = new SurfaceView(context);
|
SurfaceView surfaceView = TestUtil.createSurfaceView(context);
|
||||||
|
|
||||||
BinderStressCreator.verifyNoSystemBinderCalls(
|
BinderStressCreator.verifyNoSystemBinderCalls(
|
||||||
/* systemUnderTest= */ () -> {
|
/* systemUnderTest= */ () -> {
|
||||||
|
@ -29,7 +29,9 @@ import android.graphics.Color;
|
|||||||
import android.media.MediaCodec;
|
import android.media.MediaCodec;
|
||||||
import android.net.Uri;
|
import android.net.Uri;
|
||||||
import android.os.Bundle;
|
import android.os.Bundle;
|
||||||
|
import android.os.Looper;
|
||||||
import android.os.Parcel;
|
import android.os.Parcel;
|
||||||
|
import android.view.SurfaceView;
|
||||||
import androidx.annotation.Nullable;
|
import androidx.annotation.Nullable;
|
||||||
import androidx.media3.common.C;
|
import androidx.media3.common.C;
|
||||||
import androidx.media3.common.Format;
|
import androidx.media3.common.Format;
|
||||||
@ -54,6 +56,7 @@ import androidx.media3.extractor.ExtractorInput;
|
|||||||
import androidx.media3.extractor.PositionHolder;
|
import androidx.media3.extractor.PositionHolder;
|
||||||
import androidx.media3.extractor.SeekMap;
|
import androidx.media3.extractor.SeekMap;
|
||||||
import androidx.media3.extractor.metadata.MetadataInputBuffer;
|
import androidx.media3.extractor.metadata.MetadataInputBuffer;
|
||||||
|
import androidx.test.platform.app.InstrumentationRegistry;
|
||||||
import com.google.common.base.Function;
|
import com.google.common.base.Function;
|
||||||
import com.google.common.collect.BoundType;
|
import com.google.common.collect.BoundType;
|
||||||
import com.google.common.collect.ImmutableList;
|
import com.google.common.collect.ImmutableList;
|
||||||
@ -90,6 +93,7 @@ import java.util.Random;
|
|||||||
import java.util.Set;
|
import java.util.Set;
|
||||||
import java.util.UUID;
|
import java.util.UUID;
|
||||||
import java.util.concurrent.ExecutionException;
|
import java.util.concurrent.ExecutionException;
|
||||||
|
import java.util.concurrent.atomic.AtomicReference;
|
||||||
import org.checkerframework.checker.nullness.qual.NonNull;
|
import org.checkerframework.checker.nullness.qual.NonNull;
|
||||||
import org.mockito.Mockito;
|
import org.mockito.Mockito;
|
||||||
|
|
||||||
@ -939,6 +943,21 @@ public class TestUtil {
|
|||||||
return buffer;
|
return buffer;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Creates a {@link SurfaceView} for tests where the creation is moved to the main thread if run
|
||||||
|
* on a non-Looper thread. This is needed on API < 26 where {@link SurfaceView} cannot be
|
||||||
|
* created on a non-Looper thread.
|
||||||
|
*/
|
||||||
|
public static SurfaceView createSurfaceView(Context context) {
|
||||||
|
if (Util.SDK_INT >= 26 || Looper.myLooper() != null) {
|
||||||
|
return new SurfaceView(context);
|
||||||
|
}
|
||||||
|
AtomicReference<SurfaceView> surfaceView = new AtomicReference<>();
|
||||||
|
InstrumentationRegistry.getInstrumentation()
|
||||||
|
.runOnMainSync(() -> surfaceView.set(new SurfaceView(context)));
|
||||||
|
return surfaceView.get();
|
||||||
|
}
|
||||||
|
|
||||||
private static final class NoUidOrShufflingTimeline extends Timeline {
|
private static final class NoUidOrShufflingTimeline extends Timeline {
|
||||||
|
|
||||||
private final Timeline delegate;
|
private final Timeline delegate;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user