Commit 074307dd by tonihei Committed by Oliver Woodman

Improve knowledge of last playing period in AnalyticsCollector.

We keep track of the last publicly known playing period to report it as part
of events happening after the period has been released.

In cases where a period briefly becomes the playing one and is released
immediately afterwards, we currently don't save it as the "last known playing
one". Improve that by saving an explicit reference.

Issue:#5407
PiperOrigin-RevId: 259737218
parent 59331c3c
......@@ -277,8 +277,8 @@ import com.google.android.exoplayer2.util.Assertions;
if (front != null) {
oldFrontPeriodUid = keepFrontPeriodUid ? front.uid : null;
oldFrontPeriodWindowSequenceNumber = front.info.id.windowSequenceNumber;
front.release();
removeAfter(front);
front.release();
} else if (!keepFrontPeriodUid) {
oldFrontPeriodUid = null;
}
......
......@@ -686,6 +686,7 @@ public class AnalyticsCollector
private final HashMap<MediaPeriodId, MediaPeriodInfo> mediaPeriodIdToInfo;
private final Period period;
@Nullable private MediaPeriodInfo lastPlayingMediaPeriod;
@Nullable private MediaPeriodInfo lastReportedPlayingMediaPeriod;
@Nullable private MediaPeriodInfo readingMediaPeriod;
private Timeline timeline;
......@@ -780,7 +781,7 @@ public class AnalyticsCollector
/** Updates the queue with a reported position discontinuity . */
public void onPositionDiscontinuity(@Player.DiscontinuityReason int reason) {
updateLastReportedPlayingMediaPeriod();
lastReportedPlayingMediaPeriod = lastPlayingMediaPeriod;
}
/** Updates the queue with a reported timeline change. */
......@@ -795,7 +796,7 @@ public class AnalyticsCollector
readingMediaPeriod = updateMediaPeriodInfoToNewTimeline(readingMediaPeriod, timeline);
}
this.timeline = timeline;
updateLastReportedPlayingMediaPeriod();
lastReportedPlayingMediaPeriod = lastPlayingMediaPeriod;
}
/** Updates the queue with a reported start of seek. */
......@@ -806,7 +807,7 @@ public class AnalyticsCollector
/** Updates the queue with a reported processed seek. */
public void onSeekProcessed() {
isSeeking = false;
updateLastReportedPlayingMediaPeriod();
lastReportedPlayingMediaPeriod = lastPlayingMediaPeriod;
}
/** Updates the queue with a newly created media period. */
......@@ -816,8 +817,9 @@ public class AnalyticsCollector
new MediaPeriodInfo(mediaPeriodId, isInTimeline ? timeline : Timeline.EMPTY, windowIndex);
mediaPeriodInfoQueue.add(mediaPeriodInfo);
mediaPeriodIdToInfo.put(mediaPeriodId, mediaPeriodInfo);
lastPlayingMediaPeriod = mediaPeriodInfoQueue.get(0);
if (mediaPeriodInfoQueue.size() == 1 && !timeline.isEmpty()) {
updateLastReportedPlayingMediaPeriod();
lastReportedPlayingMediaPeriod = lastPlayingMediaPeriod;
}
}
......@@ -835,6 +837,9 @@ public class AnalyticsCollector
if (readingMediaPeriod != null && mediaPeriodId.equals(readingMediaPeriod.mediaPeriodId)) {
readingMediaPeriod = mediaPeriodInfoQueue.isEmpty() ? null : mediaPeriodInfoQueue.get(0);
}
if (!mediaPeriodInfoQueue.isEmpty()) {
lastPlayingMediaPeriod = mediaPeriodInfoQueue.get(0);
}
return true;
}
......@@ -843,12 +848,6 @@ public class AnalyticsCollector
readingMediaPeriod = mediaPeriodIdToInfo.get(mediaPeriodId);
}
private void updateLastReportedPlayingMediaPeriod() {
if (!mediaPeriodInfoQueue.isEmpty()) {
lastReportedPlayingMediaPeriod = mediaPeriodInfoQueue.get(0);
}
}
private MediaPeriodInfo updateMediaPeriodInfoToNewTimeline(
MediaPeriodInfo info, Timeline newTimeline) {
int newPeriodIndex = newTimeline.getIndexOfPeriod(info.mediaPeriodId.periodUid);
......
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