Add buffer length metric to ABR playback test.

This metric is measured once every second.

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=161527345
This commit is contained in:
tonihei 2017-07-11 07:43:38 -07:00 committed by Oliver Woodman
parent 0b58c33632
commit 0621651476

View File

@ -17,6 +17,7 @@ package com.google.android.exoplayer2.testutil;
import android.os.Handler; import android.os.Handler;
import android.view.Surface; import android.view.Surface;
import com.google.android.exoplayer2.C;
import com.google.android.exoplayer2.SimpleExoPlayer; import com.google.android.exoplayer2.SimpleExoPlayer;
import com.google.android.exoplayer2.testutil.Action.ClearVideoSurface; import com.google.android.exoplayer2.testutil.Action.ClearVideoSurface;
import com.google.android.exoplayer2.testutil.Action.Seek; import com.google.android.exoplayer2.testutil.Action.Seek;
@ -91,11 +92,18 @@ public final class ActionSchedule {
* @return The builder, for convenience. * @return The builder, for convenience.
*/ */
public Builder apply(Action action) { public Builder apply(Action action) {
ActionNode next = new ActionNode(action, currentDelayMs); return appendActionNode(new ActionNode(action, currentDelayMs));
previousNode.setNext(next); }
previousNode = next;
currentDelayMs = 0; /**
return this; * Schedules an action to be executed repeatedly.
*
* @param action The action to schedule.
* @param intervalMs The interval between each repetition in milliseconds.
* @return The builder, for convenience.
*/
public Builder repeat(Action action, long intervalMs) {
return appendActionNode(new ActionNode(action, currentDelayMs, intervalMs));
} }
/** /**
@ -175,6 +183,13 @@ public final class ActionSchedule {
return new ActionSchedule(rootNode); return new ActionSchedule(rootNode);
} }
private Builder appendActionNode(ActionNode actionNode) {
previousNode.setNext(actionNode);
previousNode = actionNode;
currentDelayMs = 0;
return this;
}
} }
/** /**
@ -184,6 +199,7 @@ public final class ActionSchedule {
private final Action action; private final Action action;
private final long delayMs; private final long delayMs;
private final long repeatIntervalMs;
private ActionNode next; private ActionNode next;
@ -197,8 +213,19 @@ public final class ActionSchedule {
* @param delayMs The delay between the node being scheduled and the action being executed. * @param delayMs The delay between the node being scheduled and the action being executed.
*/ */
public ActionNode(Action action, long delayMs) { public ActionNode(Action action, long delayMs) {
this(action, delayMs, C.TIME_UNSET);
}
/**
* @param action The wrapped action.
* @param delayMs The delay between the node being scheduled and the action being executed.
* @param repeatIntervalMs The interval between one execution and the next repetition. If set to
* {@link C#TIME_UNSET}, the action is executed once only.
*/
public ActionNode(Action action, long delayMs, long repeatIntervalMs) {
this.action = action; this.action = action;
this.delayMs = delayMs; this.delayMs = delayMs;
this.repeatIntervalMs = repeatIntervalMs;
} }
/** /**
@ -234,6 +261,9 @@ public final class ActionSchedule {
if (next != null) { if (next != null) {
next.schedule(player, trackSelector, surface, mainHandler); next.schedule(player, trackSelector, surface, mainHandler);
} }
if (repeatIntervalMs != C.TIME_UNSET) {
mainHandler.postDelayed(this, repeatIntervalMs);
}
} }
} }