Commit 4df7470d by tonihei Committed by Ian Baker

Remove onSeekProcessed dependency from playback stats tracking.

The method is used to finish a brief "seeking" state that can be removed entirely
now state changes for seeking are masked.

PiperOrigin-RevId: 308237009
parent b3dc0593
...@@ -163,9 +163,8 @@ public final class PlaybackStats { ...@@ -163,9 +163,8 @@ public final class PlaybackStats {
* #PLAYBACK_STATE_JOINING_FOREGROUND}, {@link #PLAYBACK_STATE_JOINING_BACKGROUND}, {@link * #PLAYBACK_STATE_JOINING_FOREGROUND}, {@link #PLAYBACK_STATE_JOINING_BACKGROUND}, {@link
* #PLAYBACK_STATE_PLAYING}, {@link #PLAYBACK_STATE_PAUSED}, {@link #PLAYBACK_STATE_SEEKING}, * #PLAYBACK_STATE_PLAYING}, {@link #PLAYBACK_STATE_PAUSED}, {@link #PLAYBACK_STATE_SEEKING},
* {@link #PLAYBACK_STATE_BUFFERING}, {@link #PLAYBACK_STATE_PAUSED_BUFFERING}, {@link * {@link #PLAYBACK_STATE_BUFFERING}, {@link #PLAYBACK_STATE_PAUSED_BUFFERING}, {@link
* #PLAYBACK_STATE_SEEK_BUFFERING}, {@link #PLAYBACK_STATE_SUPPRESSED}, {@link * #PLAYBACK_STATE_SUPPRESSED}, {@link #PLAYBACK_STATE_SUPPRESSED_BUFFERING}, {@link
* #PLAYBACK_STATE_SUPPRESSED_BUFFERING}, {@link #PLAYBACK_STATE_ENDED}, {@link * #PLAYBACK_STATE_ENDED}, {@link #PLAYBACK_STATE_STOPPED}, {@link #PLAYBACK_STATE_FAILED}, {@link
* #PLAYBACK_STATE_STOPPED}, {@link #PLAYBACK_STATE_FAILED}, {@link
* #PLAYBACK_STATE_INTERRUPTED_BY_AD} or {@link #PLAYBACK_STATE_ABANDONED}. * #PLAYBACK_STATE_INTERRUPTED_BY_AD} or {@link #PLAYBACK_STATE_ABANDONED}.
*/ */
@Documented @Documented
...@@ -180,7 +179,6 @@ public final class PlaybackStats { ...@@ -180,7 +179,6 @@ public final class PlaybackStats {
PLAYBACK_STATE_SEEKING, PLAYBACK_STATE_SEEKING,
PLAYBACK_STATE_BUFFERING, PLAYBACK_STATE_BUFFERING,
PLAYBACK_STATE_PAUSED_BUFFERING, PLAYBACK_STATE_PAUSED_BUFFERING,
PLAYBACK_STATE_SEEK_BUFFERING,
PLAYBACK_STATE_SUPPRESSED, PLAYBACK_STATE_SUPPRESSED,
PLAYBACK_STATE_SUPPRESSED_BUFFERING, PLAYBACK_STATE_SUPPRESSED_BUFFERING,
PLAYBACK_STATE_ENDED, PLAYBACK_STATE_ENDED,
...@@ -206,8 +204,6 @@ public final class PlaybackStats { ...@@ -206,8 +204,6 @@ public final class PlaybackStats {
public static final int PLAYBACK_STATE_BUFFERING = 6; public static final int PLAYBACK_STATE_BUFFERING = 6;
/** Playback is buffering while paused. */ /** Playback is buffering while paused. */
public static final int PLAYBACK_STATE_PAUSED_BUFFERING = 7; public static final int PLAYBACK_STATE_PAUSED_BUFFERING = 7;
/** Playback is buffering after a seek. */
public static final int PLAYBACK_STATE_SEEK_BUFFERING = 8;
/** Playback is suppressed (e.g. due to audio focus loss). */ /** Playback is suppressed (e.g. due to audio focus loss). */
public static final int PLAYBACK_STATE_SUPPRESSED = 9; public static final int PLAYBACK_STATE_SUPPRESSED = 9;
/** Playback is suppressed (e.g. due to audio focus loss) while buffering to resume a playback. */ /** Playback is suppressed (e.g. due to audio focus loss) while buffering to resume a playback. */
...@@ -769,8 +765,7 @@ public final class PlaybackStats { ...@@ -769,8 +765,7 @@ public final class PlaybackStats {
* milliseconds. * milliseconds.
*/ */
public long getTotalSeekTimeMs() { public long getTotalSeekTimeMs() {
return getPlaybackStateDurationMs(PLAYBACK_STATE_SEEKING) return getPlaybackStateDurationMs(PLAYBACK_STATE_SEEKING);
+ getPlaybackStateDurationMs(PLAYBACK_STATE_SEEK_BUFFERING);
} }
/** /**
...@@ -799,8 +794,7 @@ public final class PlaybackStats { ...@@ -799,8 +794,7 @@ public final class PlaybackStats {
public long getTotalWaitTimeMs() { public long getTotalWaitTimeMs() {
return getPlaybackStateDurationMs(PLAYBACK_STATE_JOINING_FOREGROUND) return getPlaybackStateDurationMs(PLAYBACK_STATE_JOINING_FOREGROUND)
+ getPlaybackStateDurationMs(PLAYBACK_STATE_BUFFERING) + getPlaybackStateDurationMs(PLAYBACK_STATE_BUFFERING)
+ getPlaybackStateDurationMs(PLAYBACK_STATE_SEEKING) + getPlaybackStateDurationMs(PLAYBACK_STATE_SEEKING);
+ getPlaybackStateDurationMs(PLAYBACK_STATE_SEEK_BUFFERING);
} }
/** /**
......
...@@ -83,7 +83,7 @@ public final class PlaybackStatsListener ...@@ -83,7 +83,7 @@ public final class PlaybackStatsListener
@Player.State private int playbackState; @Player.State private int playbackState;
private boolean isSuppressed; private boolean isSuppressed;
private float playbackSpeed; private float playbackSpeed;
private boolean isSeeking; private boolean onSeekStartedCalled;
/** /**
* Creates listener for playback stats. * Creates listener for playback stats.
...@@ -170,7 +170,7 @@ public final class PlaybackStatsListener ...@@ -170,7 +170,7 @@ public final class PlaybackStatsListener
@Override @Override
public void onSessionCreated(EventTime eventTime, String session) { public void onSessionCreated(EventTime eventTime, String session) {
PlaybackStatsTracker tracker = new PlaybackStatsTracker(keepHistory, eventTime); PlaybackStatsTracker tracker = new PlaybackStatsTracker(keepHistory, eventTime);
if (isSeeking) { if (onSeekStartedCalled) {
tracker.onSeekStarted(eventTime, /* belongsToPlayback= */ true); tracker.onSeekStarted(eventTime, /* belongsToPlayback= */ true);
} }
tracker.onPlaybackStateChanged(eventTime, playbackState, /* belongsToPlayback= */ true); tracker.onPlaybackStateChanged(eventTime, playbackState, /* belongsToPlayback= */ true);
...@@ -269,7 +269,7 @@ public final class PlaybackStatsListener ...@@ -269,7 +269,7 @@ public final class PlaybackStatsListener
@Override @Override
public void onPlaybackSuppressionReasonChanged( public void onPlaybackSuppressionReasonChanged(
EventTime eventTime, int playbackSuppressionReason) { EventTime eventTime, @Player.PlaybackSuppressionReason int playbackSuppressionReason) {
isSuppressed = playbackSuppressionReason != Player.PLAYBACK_SUPPRESSION_REASON_NONE; isSuppressed = playbackSuppressionReason != Player.PLAYBACK_SUPPRESSION_REASON_NONE;
maybeAddSession(eventTime); maybeAddSession(eventTime);
for (String session : playbackStatsTrackers.keySet()) { for (String session : playbackStatsTrackers.keySet()) {
...@@ -281,23 +281,29 @@ public final class PlaybackStatsListener ...@@ -281,23 +281,29 @@ public final class PlaybackStatsListener
} }
@Override @Override
public void onTimelineChanged(EventTime eventTime, int reason) { public void onTimelineChanged(EventTime eventTime, @Player.TimelineChangeReason int reason) {
sessionManager.handleTimelineUpdate(eventTime); sessionManager.handleTimelineUpdate(eventTime);
maybeAddSession(eventTime); maybeAddSession(eventTime);
for (String session : playbackStatsTrackers.keySet()) { for (String session : playbackStatsTrackers.keySet()) {
if (sessionManager.belongsToSession(eventTime, session)) { if (sessionManager.belongsToSession(eventTime, session)) {
playbackStatsTrackers.get(session).onPositionDiscontinuity(eventTime); playbackStatsTrackers.get(session).onPositionDiscontinuity(eventTime, /* isSeek= */ false);
} }
} }
} }
@Override @Override
public void onPositionDiscontinuity(EventTime eventTime, int reason) { public void onPositionDiscontinuity(EventTime eventTime, @Player.DiscontinuityReason int reason) {
sessionManager.handlePositionDiscontinuity(eventTime, reason); sessionManager.handlePositionDiscontinuity(eventTime, reason);
maybeAddSession(eventTime); maybeAddSession(eventTime);
if (reason == Player.DISCONTINUITY_REASON_SEEK) {
onSeekStartedCalled = false;
}
for (String session : playbackStatsTrackers.keySet()) { for (String session : playbackStatsTrackers.keySet()) {
if (sessionManager.belongsToSession(eventTime, session)) { if (sessionManager.belongsToSession(eventTime, session)) {
playbackStatsTrackers.get(session).onPositionDiscontinuity(eventTime); playbackStatsTrackers
.get(session)
.onPositionDiscontinuity(
eventTime, /* isSeek= */ reason == Player.DISCONTINUITY_REASON_SEEK);
} }
} }
} }
...@@ -309,17 +315,7 @@ public final class PlaybackStatsListener ...@@ -309,17 +315,7 @@ public final class PlaybackStatsListener
boolean belongsToPlayback = sessionManager.belongsToSession(eventTime, session); boolean belongsToPlayback = sessionManager.belongsToSession(eventTime, session);
playbackStatsTrackers.get(session).onSeekStarted(eventTime, belongsToPlayback); playbackStatsTrackers.get(session).onSeekStarted(eventTime, belongsToPlayback);
} }
isSeeking = true; onSeekStartedCalled = true;
}
@Override
public void onSeekProcessed(EventTime eventTime) {
maybeAddSession(eventTime);
for (String session : playbackStatsTrackers.keySet()) {
boolean belongsToPlayback = sessionManager.belongsToSession(eventTime, session);
playbackStatsTrackers.get(session).onSeekProcessed(eventTime, belongsToPlayback);
}
isSeeking = false;
} }
@Override @Override
...@@ -551,6 +547,9 @@ public final class PlaybackStatsListener ...@@ -551,6 +547,9 @@ public final class PlaybackStatsListener
if (state != Player.STATE_IDLE) { if (state != Player.STATE_IDLE) {
hasFatalError = false; hasFatalError = false;
} }
if (state != Player.STATE_BUFFERING) {
isSeeking = false;
}
if (state == Player.STATE_IDLE || state == Player.STATE_ENDED) { if (state == Player.STATE_IDLE || state == Player.STATE_ENDED) {
isInterruptedByAd = false; isInterruptedByAd = false;
} }
...@@ -589,8 +588,12 @@ public final class PlaybackStatsListener ...@@ -589,8 +588,12 @@ public final class PlaybackStatsListener
* Notifies the tracker of a position discontinuity or timeline update for the current playback. * Notifies the tracker of a position discontinuity or timeline update for the current playback.
* *
* @param eventTime The {@link EventTime}. * @param eventTime The {@link EventTime}.
* @param isSeek Whether the position discontinuity is for a seek.
*/ */
public void onPositionDiscontinuity(EventTime eventTime) { public void onPositionDiscontinuity(EventTime eventTime, boolean isSeek) {
if (isSeek && playerPlaybackState == Player.STATE_IDLE) {
isSeeking = false;
}
isInterruptedByAd = false; isInterruptedByAd = false;
maybeUpdatePlaybackState(eventTime, /* belongsToPlayback= */ true); maybeUpdatePlaybackState(eventTime, /* belongsToPlayback= */ true);
} }
...@@ -608,18 +611,6 @@ public final class PlaybackStatsListener ...@@ -608,18 +611,6 @@ public final class PlaybackStatsListener
} }
/** /**
* Notifies the tracker that a seek has been processed, including all seeks while the playback
* is not in the foreground.
*
* @param eventTime The {@link EventTime}.
* @param belongsToPlayback Whether the {@code eventTime} belongs to the current playback.
*/
public void onSeekProcessed(EventTime eventTime, boolean belongsToPlayback) {
isSeeking = false;
maybeUpdatePlaybackState(eventTime, belongsToPlayback);
}
/**
* Notifies the tracker of fatal player error in the current playback. * Notifies the tracker of fatal player error in the current playback.
* *
* @param eventTime The {@link EventTime}. * @param eventTime The {@link EventTime}.
...@@ -934,10 +925,6 @@ public final class PlaybackStatsListener ...@@ -934,10 +925,6 @@ public final class PlaybackStatsListener
|| currentPlaybackState == PlaybackStats.PLAYBACK_STATE_INTERRUPTED_BY_AD) { || currentPlaybackState == PlaybackStats.PLAYBACK_STATE_INTERRUPTED_BY_AD) {
return PlaybackStats.PLAYBACK_STATE_JOINING_FOREGROUND; return PlaybackStats.PLAYBACK_STATE_JOINING_FOREGROUND;
} }
if (currentPlaybackState == PlaybackStats.PLAYBACK_STATE_SEEKING
|| currentPlaybackState == PlaybackStats.PLAYBACK_STATE_SEEK_BUFFERING) {
return PlaybackStats.PLAYBACK_STATE_SEEK_BUFFERING;
}
if (!playWhenReady) { if (!playWhenReady) {
return PlaybackStats.PLAYBACK_STATE_PAUSED_BUFFERING; return PlaybackStats.PLAYBACK_STATE_PAUSED_BUFFERING;
} }
......
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