Commit f279f3c8 by tonihei Committed by Oliver Woodman

Replace FakeExoPlayer with real player running with fake clock.

This ensures that simulated playbacks always use the current player implementation.

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=179929911
parent 410e614c
...@@ -19,7 +19,6 @@ import android.os.HandlerThread; ...@@ -19,7 +19,6 @@ import android.os.HandlerThread;
import android.support.annotation.Nullable; import android.support.annotation.Nullable;
import com.google.android.exoplayer2.DefaultLoadControl; import com.google.android.exoplayer2.DefaultLoadControl;
import com.google.android.exoplayer2.ExoPlaybackException; import com.google.android.exoplayer2.ExoPlaybackException;
import com.google.android.exoplayer2.ExoPlayerFactory;
import com.google.android.exoplayer2.Format; import com.google.android.exoplayer2.Format;
import com.google.android.exoplayer2.LoadControl; import com.google.android.exoplayer2.LoadControl;
import com.google.android.exoplayer2.Player; import com.google.android.exoplayer2.Player;
...@@ -32,11 +31,11 @@ import com.google.android.exoplayer2.audio.AudioRendererEventListener; ...@@ -32,11 +31,11 @@ import com.google.android.exoplayer2.audio.AudioRendererEventListener;
import com.google.android.exoplayer2.metadata.MetadataOutput; import com.google.android.exoplayer2.metadata.MetadataOutput;
import com.google.android.exoplayer2.source.MediaSource; import com.google.android.exoplayer2.source.MediaSource;
import com.google.android.exoplayer2.source.TrackGroupArray; import com.google.android.exoplayer2.source.TrackGroupArray;
import com.google.android.exoplayer2.testutil.ExoPlayerTestRunner.Builder.PlayerFactory;
import com.google.android.exoplayer2.text.TextOutput; import com.google.android.exoplayer2.text.TextOutput;
import com.google.android.exoplayer2.trackselection.DefaultTrackSelector; import com.google.android.exoplayer2.trackselection.DefaultTrackSelector;
import com.google.android.exoplayer2.trackselection.MappingTrackSelector; import com.google.android.exoplayer2.trackselection.MappingTrackSelector;
import com.google.android.exoplayer2.trackselection.TrackSelectionArray; import com.google.android.exoplayer2.trackselection.TrackSelectionArray;
import com.google.android.exoplayer2.trackselection.TrackSelector;
import com.google.android.exoplayer2.util.Clock; import com.google.android.exoplayer2.util.Clock;
import com.google.android.exoplayer2.util.HandlerWrapper; import com.google.android.exoplayer2.util.HandlerWrapper;
import com.google.android.exoplayer2.util.MimeTypes; import com.google.android.exoplayer2.util.MimeTypes;
...@@ -60,26 +59,6 @@ public final class ExoPlayerTestRunner extends Player.DefaultEventListener ...@@ -60,26 +59,6 @@ public final class ExoPlayerTestRunner extends Player.DefaultEventListener
public static final class Builder { public static final class Builder {
/** /**
* Factory to create an {@link SimpleExoPlayer} instance. The player will be created on its own
* {@link HandlerThread}.
*/
public interface PlayerFactory {
/**
* Creates a new {@link SimpleExoPlayer} using the provided renderers factory, track selector,
* and load control.
*
* @param renderersFactory A {@link RenderersFactory} to be used for the new player.
* @param trackSelector A {@link MappingTrackSelector} to be used for the new player.
* @param loadControl A {@link LoadControl} to be used for the new player.
* @return A new {@link SimpleExoPlayer}.
*/
SimpleExoPlayer createExoPlayer(RenderersFactory renderersFactory,
MappingTrackSelector trackSelector, LoadControl loadControl);
}
/**
* A generic video {@link Format} which can be used to set up media sources and renderers. * A generic video {@link Format} which can be used to set up media sources and renderers.
*/ */
public static final Format VIDEO_FORMAT = Format.createVideoSampleFormat(null, public static final Format VIDEO_FORMAT = Format.createVideoSampleFormat(null,
...@@ -93,7 +72,6 @@ public final class ExoPlayerTestRunner extends Player.DefaultEventListener ...@@ -93,7 +72,6 @@ public final class ExoPlayerTestRunner extends Player.DefaultEventListener
MimeTypes.AUDIO_AAC, null, Format.NO_VALUE, Format.NO_VALUE, 2, 44100, null, null, 0, null); MimeTypes.AUDIO_AAC, null, Format.NO_VALUE, Format.NO_VALUE, 2, 44100, null, null, 0, null);
private Clock clock; private Clock clock;
private PlayerFactory playerFactory;
private Timeline timeline; private Timeline timeline;
private Object manifest; private Object manifest;
private MediaSource mediaSource; private MediaSource mediaSource;
...@@ -224,21 +202,6 @@ public final class ExoPlayerTestRunner extends Player.DefaultEventListener ...@@ -224,21 +202,6 @@ public final class ExoPlayerTestRunner extends Player.DefaultEventListener
} }
/** /**
* Sets the {@link PlayerFactory} which creates the {@link SimpleExoPlayer} to be used by the
* test runner. The default value is a {@link SimpleExoPlayer} with the renderers provided by
* {@link #setRenderers(Renderer...)} or {@link #setRenderersFactory(RenderersFactory)}, the
* track selector provided by {@link #setTrackSelector(MappingTrackSelector)} and the load
* control provided by {@link #setLoadControl(LoadControl)}.
*
* @param playerFactory A {@link PlayerFactory} to create the player.
* @return This builder.
*/
public Builder setExoPlayer(PlayerFactory playerFactory) {
this.playerFactory = playerFactory;
return this;
}
/**
* Sets the {@link Clock} to be used by the test runner. The default value is {@link * Sets the {@link Clock} to be used by the test runner. The default value is {@link
* Clock#DEFAULT}. * Clock#DEFAULT}.
* *
...@@ -345,15 +308,6 @@ public final class ExoPlayerTestRunner extends Player.DefaultEventListener ...@@ -345,15 +308,6 @@ public final class ExoPlayerTestRunner extends Player.DefaultEventListener
if (clock == null) { if (clock == null) {
clock = Clock.DEFAULT; clock = Clock.DEFAULT;
} }
if (playerFactory == null) {
playerFactory = new PlayerFactory() {
@Override
public SimpleExoPlayer createExoPlayer(RenderersFactory renderersFactory,
MappingTrackSelector trackSelector, LoadControl loadControl) {
return ExoPlayerFactory.newSimpleInstance(renderersFactory, trackSelector, loadControl);
}
};
}
if (mediaSource == null) { if (mediaSource == null) {
if (timeline == null) { if (timeline == null) {
timeline = new FakeTimeline(1); timeline = new FakeTimeline(1);
...@@ -365,7 +319,6 @@ public final class ExoPlayerTestRunner extends Player.DefaultEventListener ...@@ -365,7 +319,6 @@ public final class ExoPlayerTestRunner extends Player.DefaultEventListener
} }
return new ExoPlayerTestRunner( return new ExoPlayerTestRunner(
clock, clock,
playerFactory,
mediaSource, mediaSource,
renderersFactory, renderersFactory,
trackSelector, trackSelector,
...@@ -378,7 +331,7 @@ public final class ExoPlayerTestRunner extends Player.DefaultEventListener ...@@ -378,7 +331,7 @@ public final class ExoPlayerTestRunner extends Player.DefaultEventListener
} }
} }
private final PlayerFactory playerFactory; private final Clock clock;
private final MediaSource mediaSource; private final MediaSource mediaSource;
private final RenderersFactory renderersFactory; private final RenderersFactory renderersFactory;
private final MappingTrackSelector trackSelector; private final MappingTrackSelector trackSelector;
...@@ -405,7 +358,6 @@ public final class ExoPlayerTestRunner extends Player.DefaultEventListener ...@@ -405,7 +358,6 @@ public final class ExoPlayerTestRunner extends Player.DefaultEventListener
private ExoPlayerTestRunner( private ExoPlayerTestRunner(
Clock clock, Clock clock,
PlayerFactory playerFactory,
MediaSource mediaSource, MediaSource mediaSource,
RenderersFactory renderersFactory, RenderersFactory renderersFactory,
MappingTrackSelector trackSelector, MappingTrackSelector trackSelector,
...@@ -415,7 +367,7 @@ public final class ExoPlayerTestRunner extends Player.DefaultEventListener ...@@ -415,7 +367,7 @@ public final class ExoPlayerTestRunner extends Player.DefaultEventListener
@Nullable VideoRendererEventListener videoRendererEventListener, @Nullable VideoRendererEventListener videoRendererEventListener,
@Nullable AudioRendererEventListener audioRendererEventListener, @Nullable AudioRendererEventListener audioRendererEventListener,
int expectedPlayerEndedCount) { int expectedPlayerEndedCount) {
this.playerFactory = playerFactory; this.clock = clock;
this.mediaSource = mediaSource; this.mediaSource = mediaSource;
this.renderersFactory = renderersFactory; this.renderersFactory = renderersFactory;
this.trackSelector = trackSelector; this.trackSelector = trackSelector;
...@@ -451,7 +403,7 @@ public final class ExoPlayerTestRunner extends Player.DefaultEventListener ...@@ -451,7 +403,7 @@ public final class ExoPlayerTestRunner extends Player.DefaultEventListener
@Override @Override
public void run() { public void run() {
try { try {
player = playerFactory.createExoPlayer(renderersFactory, trackSelector, loadControl); player = new TestSimpleExoPlayer(renderersFactory, trackSelector, loadControl, clock);
player.addListener(ExoPlayerTestRunner.this); player.addListener(ExoPlayerTestRunner.this);
if (eventListener != null) { if (eventListener != null) {
player.addListener(eventListener); player.addListener(eventListener);
...@@ -685,4 +637,15 @@ public final class ExoPlayerTestRunner extends Player.DefaultEventListener ...@@ -685,4 +637,15 @@ public final class ExoPlayerTestRunner extends Player.DefaultEventListener
actionScheduleFinishedCountDownLatch.countDown(); actionScheduleFinishedCountDownLatch.countDown();
} }
/** SimpleExoPlayer implementation using a custom Clock. */
private static final class TestSimpleExoPlayer extends SimpleExoPlayer {
public TestSimpleExoPlayer(
RenderersFactory renderersFactory,
TrackSelector trackSelector,
LoadControl loadControl,
Clock clock) {
super(renderersFactory, trackSelector, loadControl, clock);
}
}
} }
...@@ -24,7 +24,7 @@ import java.util.ArrayList; ...@@ -24,7 +24,7 @@ import java.util.ArrayList;
import java.util.List; import java.util.List;
/** Fake {@link Clock} implementation independent of {@link android.os.SystemClock}. */ /** Fake {@link Clock} implementation independent of {@link android.os.SystemClock}. */
public final class FakeClock implements Clock { public class FakeClock implements Clock {
private final List<Long> wakeUpTimes; private final List<Long> wakeUpTimes;
private final List<HandlerMessageData> handlerMessages; private final List<HandlerMessageData> handlerMessages;
......
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