Use EventLogger in ExoHostedTest

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=210082909
This commit is contained in:
olly 2018-08-24 04:44:53 -07:00 committed by Oliver Woodman
parent 335fa13063
commit 0da7f6ca08
2 changed files with 32 additions and 89 deletions

View File

@ -44,7 +44,7 @@ import java.util.Locale;
/** Logs events from {@link Player} and other core components using {@link Log}. */ /** Logs events from {@link Player} and other core components using {@link Log}. */
public class EventLogger implements AnalyticsListener { public class EventLogger implements AnalyticsListener {
private static final String TAG = "EventLogger"; private static final String DEFAULT_TAG = "EventLogger";
private static final int MAX_TIMELINE_ITEM_LINES = 3; private static final int MAX_TIMELINE_ITEM_LINES = 3;
private static final NumberFormat TIME_FORMAT; private static final NumberFormat TIME_FORMAT;
static { static {
@ -55,6 +55,7 @@ public class EventLogger implements AnalyticsListener {
} }
private final @Nullable MappingTrackSelector trackSelector; private final @Nullable MappingTrackSelector trackSelector;
private final String tag;
private final Timeline.Window window; private final Timeline.Window window;
private final Timeline.Period period; private final Timeline.Period period;
private final long startTimeMs; private final long startTimeMs;
@ -66,7 +67,19 @@ public class EventLogger implements AnalyticsListener {
* logging of track mapping is not required. * logging of track mapping is not required.
*/ */
public EventLogger(@Nullable MappingTrackSelector trackSelector) { public EventLogger(@Nullable MappingTrackSelector trackSelector) {
this(trackSelector, DEFAULT_TAG);
}
/**
* Creates event logger.
*
* @param trackSelector The mapping track selector used by the player. May be null if detailed
* logging of track mapping is not required.
* @param tag The tag used for logging.
*/
public EventLogger(@Nullable MappingTrackSelector trackSelector, String tag) {
this.trackSelector = trackSelector; this.trackSelector = trackSelector;
this.tag = tag;
window = new Timeline.Window(); window = new Timeline.Window();
period = new Timeline.Period(); period = new Timeline.Period();
startTimeMs = SystemClock.elapsedRealtime(); startTimeMs = SystemClock.elapsedRealtime();
@ -403,7 +416,7 @@ public class EventLogger implements AnalyticsListener {
* @param msg The message to log. * @param msg The message to log.
*/ */
protected void logd(String msg) { protected void logd(String msg) {
Log.d(TAG, msg); Log.d(tag, msg);
} }
/** /**
@ -413,7 +426,7 @@ public class EventLogger implements AnalyticsListener {
* @param tr The exception to log. * @param tr The exception to log.
*/ */
protected void loge(String msg, Throwable tr) { protected void loge(String msg, Throwable tr) {
Log.e(TAG, msg, tr); Log.e(tag, msg, tr);
} }
// Internal methods // Internal methods

View File

@ -22,17 +22,16 @@ import android.os.Looper;
import android.os.SystemClock; import android.os.SystemClock;
import android.util.Log; import android.util.Log;
import android.view.Surface; import android.view.Surface;
import com.google.android.exoplayer2.C;
import com.google.android.exoplayer2.DefaultLoadControl; import com.google.android.exoplayer2.DefaultLoadControl;
import com.google.android.exoplayer2.DefaultRenderersFactory; import com.google.android.exoplayer2.DefaultRenderersFactory;
import com.google.android.exoplayer2.ExoPlaybackException; import com.google.android.exoplayer2.ExoPlaybackException;
import com.google.android.exoplayer2.ExoPlayer; import com.google.android.exoplayer2.ExoPlayer;
import com.google.android.exoplayer2.ExoPlayerFactory; import com.google.android.exoplayer2.ExoPlayerFactory;
import com.google.android.exoplayer2.Format;
import com.google.android.exoplayer2.Player; import com.google.android.exoplayer2.Player;
import com.google.android.exoplayer2.RenderersFactory; import com.google.android.exoplayer2.RenderersFactory;
import com.google.android.exoplayer2.SimpleExoPlayer; import com.google.android.exoplayer2.SimpleExoPlayer;
import com.google.android.exoplayer2.analytics.AnalyticsListener; import com.google.android.exoplayer2.analytics.AnalyticsListener;
import com.google.android.exoplayer2.audio.AudioRendererEventListener;
import com.google.android.exoplayer2.audio.DefaultAudioSink; import com.google.android.exoplayer2.audio.DefaultAudioSink;
import com.google.android.exoplayer2.decoder.DecoderCounters; import com.google.android.exoplayer2.decoder.DecoderCounters;
import com.google.android.exoplayer2.drm.DrmSessionManager; import com.google.android.exoplayer2.drm.DrmSessionManager;
@ -43,16 +42,12 @@ import com.google.android.exoplayer2.trackselection.AdaptiveTrackSelection;
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.util.Clock; import com.google.android.exoplayer2.util.Clock;
import com.google.android.exoplayer2.util.EventLogger;
import com.google.android.exoplayer2.util.HandlerWrapper; import com.google.android.exoplayer2.util.HandlerWrapper;
import com.google.android.exoplayer2.util.Util; import com.google.android.exoplayer2.util.Util;
import com.google.android.exoplayer2.video.VideoRendererEventListener;
/** A {@link HostedTest} for {@link ExoPlayer} playback tests. */ /** A {@link HostedTest} for {@link ExoPlayer} playback tests. */
public abstract class ExoHostedTest public abstract class ExoHostedTest implements AnalyticsListener, HostedTest {
implements Player.EventListener,
HostedTest,
AudioRendererEventListener,
VideoRendererEventListener {
static { static {
// DefaultAudioSink is able to work around spurious timestamps reported by the platform (by // DefaultAudioSink is able to work around spurious timestamps reported by the platform (by
@ -151,12 +146,11 @@ public abstract class ExoHostedTest
DrmSessionManager<FrameworkMediaCrypto> drmSessionManager = buildDrmSessionManager(userAgent); DrmSessionManager<FrameworkMediaCrypto> drmSessionManager = buildDrmSessionManager(userAgent);
player = buildExoPlayer(host, surface, trackSelector, drmSessionManager); player = buildExoPlayer(host, surface, trackSelector, drmSessionManager);
player.prepare(buildSource(host, Util.getUserAgent(host, userAgent))); player.prepare(buildSource(host, Util.getUserAgent(host, userAgent)));
player.addAnalyticsListener(this);
player.addAnalyticsListener(new EventLogger(trackSelector, tag));
if (analyticsListener != null) { if (analyticsListener != null) {
player.addAnalyticsListener(analyticsListener); player.addAnalyticsListener(analyticsListener);
} }
player.addListener(this);
player.addAudioDebugListener(this);
player.addVideoDebugListener(this);
player.setPlayWhenReady(true); player.setPlayWhenReady(true);
actionHandler = Clock.DEFAULT.createHandler(Looper.myLooper(), /* callback= */ null); actionHandler = Clock.DEFAULT.createHandler(Looper.myLooper(), /* callback= */ null);
// Schedule any pending actions. // Schedule any pending actions.
@ -199,10 +193,11 @@ public abstract class ExoHostedTest
assertPassed(audioDecoderCounters, videoDecoderCounters); assertPassed(audioDecoderCounters, videoDecoderCounters);
} }
// Player.EventListener // AnalyticsListener
@Override @Override
public final void onPlayerStateChanged(boolean playWhenReady, int playbackState) { public final void onPlayerStateChanged(
EventTime eventTime, boolean playWhenReady, int playbackState) {
Log.d(tag, "state [" + playWhenReady + ", " + playbackState + "]"); Log.d(tag, "state [" + playWhenReady + ", " + playbackState + "]");
playerWasPrepared |= playbackState != Player.STATE_IDLE; playerWasPrepared |= playbackState != Player.STATE_IDLE;
if (playbackState == Player.STATE_ENDED if (playbackState == Player.STATE_ENDED
@ -219,85 +214,20 @@ public abstract class ExoHostedTest
} }
@Override @Override
public final void onPlayerError(ExoPlaybackException error) { public final void onPlayerError(EventTime eventTime, ExoPlaybackException error) {
playerWasPrepared = true; playerWasPrepared = true;
playerError = error; playerError = error;
onPlayerErrorInternal(error); onPlayerErrorInternal(error);
} }
// AudioRendererEventListener
@Override @Override
public void onAudioEnabled(DecoderCounters counters) { public void onDecoderDisabled(
Log.d(tag, "audioEnabled"); EventTime eventTime, int trackType, DecoderCounters decoderCounters) {
} if (trackType == C.TRACK_TYPE_AUDIO) {
audioDecoderCounters.merge(decoderCounters);
@Override } else if (trackType == C.TRACK_TYPE_VIDEO) {
public void onAudioSessionId(int audioSessionId) { videoDecoderCounters.merge(decoderCounters);
Log.d(tag, "audioSessionId [" + audioSessionId + "]"); }
}
@Override
public void onAudioDecoderInitialized(String decoderName, long elapsedRealtimeMs,
long initializationDurationMs) {
Log.d(tag, "audioDecoderInitialized [" + decoderName + "]");
}
@Override
public void onAudioInputFormatChanged(Format format) {
Log.d(tag, "audioFormatChanged [" + Format.toLogString(format) + "]");
}
@Override
public void onAudioDisabled(DecoderCounters counters) {
Log.d(tag, "audioDisabled");
audioDecoderCounters.merge(counters);
}
@Override
public void onAudioSinkUnderrun(int bufferSize, long bufferSizeMs, long elapsedSinceLastFeedMs) {
Log.e(tag, "audioTrackUnderrun [" + bufferSize + ", " + bufferSizeMs + ", "
+ elapsedSinceLastFeedMs + "]", null);
}
// VideoRendererEventListener
@Override
public void onVideoEnabled(DecoderCounters counters) {
Log.d(tag, "videoEnabled");
}
@Override
public void onVideoDecoderInitialized(String decoderName, long elapsedRealtimeMs,
long initializationDurationMs) {
Log.d(tag, "videoDecoderInitialized [" + decoderName + "]");
}
@Override
public void onVideoInputFormatChanged(Format format) {
Log.d(tag, "videoFormatChanged [" + Format.toLogString(format) + "]");
}
@Override
public void onVideoDisabled(DecoderCounters counters) {
Log.d(tag, "videoDisabled");
videoDecoderCounters.merge(counters);
}
@Override
public void onDroppedFrames(int count, long elapsed) {
Log.d(tag, "droppedFrames [" + count + "]");
}
@Override
public void onVideoSizeChanged(int width, int height, int unappliedRotationDegrees,
float pixelWidthHeightRatio) {
// Do nothing.
}
@Override
public void onRenderedFirstFrame(Surface surface) {
// Do nothing.
} }
// Internal logic // Internal logic