From 7703676c87a220277dbb89f80a53e164e01451cb Mon Sep 17 00:00:00 2001 From: tonihei Date: Mon, 29 Jul 2019 11:06:50 +0100 Subject: [PATCH] Swap reading and playing media period updates. Both periods are rarely updated in the same iteration. If they are, advancing the reading period first seems more logical and also more efficient as it may avoid one extra doSomeWork iteration. PiperOrigin-RevId: 260463735 --- .../exoplayer2/ExoPlayerImplInternal.java | 54 +++++++++---------- 1 file changed, 27 insertions(+), 27 deletions(-) diff --git a/library/core/src/main/java/com/google/android/exoplayer2/ExoPlayerImplInternal.java b/library/core/src/main/java/com/google/android/exoplayer2/ExoPlayerImplInternal.java index d356fe11d2..b6317941fb 100644 --- a/library/core/src/main/java/com/google/android/exoplayer2/ExoPlayerImplInternal.java +++ b/library/core/src/main/java/com/google/android/exoplayer2/ExoPlayerImplInternal.java @@ -1491,8 +1491,8 @@ import java.util.concurrent.atomic.AtomicBoolean; return; } maybeUpdateLoadingPeriod(); - maybeUpdatePlayingPeriod(); maybeUpdateReadingPeriod(); + maybeUpdatePlayingPeriod(); } private void maybeUpdateLoadingPeriod() throws IOException { @@ -1518,32 +1518,6 @@ import java.util.concurrent.atomic.AtomicBoolean; } } - private void maybeUpdatePlayingPeriod() throws ExoPlaybackException { - boolean advancedPlayingPeriod = false; - while (shouldAdvancePlayingPeriod()) { - if (advancedPlayingPeriod) { - // If we advance more than one period at a time, notify listeners after each update. - maybeNotifyPlaybackInfoChanged(); - } - MediaPeriodHolder oldPlayingPeriodHolder = queue.getPlayingPeriod(); - MediaPeriodHolder newPlayingPeriodHolder = queue.advancePlayingPeriod(); - updatePlayingPeriodRenderers(oldPlayingPeriodHolder); - playbackInfo = - playbackInfo.copyWithNewPosition( - newPlayingPeriodHolder.info.id, - newPlayingPeriodHolder.info.startPositionUs, - newPlayingPeriodHolder.info.contentPositionUs, - getTotalBufferedDurationUs()); - int discontinuityReason = - oldPlayingPeriodHolder.info.isLastInTimelinePeriod - ? Player.DISCONTINUITY_REASON_PERIOD_TRANSITION - : Player.DISCONTINUITY_REASON_AD_INSERTION; - playbackInfoUpdate.setPositionDiscontinuity(discontinuityReason); - updatePlaybackPositions(); - advancedPlayingPeriod = true; - } - } - private void maybeUpdateReadingPeriod() throws ExoPlaybackException, IOException { MediaPeriodHolder readingPeriodHolder = queue.getReadingPeriod(); if (readingPeriodHolder == null) { @@ -1621,6 +1595,32 @@ import java.util.concurrent.atomic.AtomicBoolean; } } + private void maybeUpdatePlayingPeriod() throws ExoPlaybackException { + boolean advancedPlayingPeriod = false; + while (shouldAdvancePlayingPeriod()) { + if (advancedPlayingPeriod) { + // If we advance more than one period at a time, notify listeners after each update. + maybeNotifyPlaybackInfoChanged(); + } + MediaPeriodHolder oldPlayingPeriodHolder = queue.getPlayingPeriod(); + MediaPeriodHolder newPlayingPeriodHolder = queue.advancePlayingPeriod(); + updatePlayingPeriodRenderers(oldPlayingPeriodHolder); + playbackInfo = + playbackInfo.copyWithNewPosition( + newPlayingPeriodHolder.info.id, + newPlayingPeriodHolder.info.startPositionUs, + newPlayingPeriodHolder.info.contentPositionUs, + getTotalBufferedDurationUs()); + int discontinuityReason = + oldPlayingPeriodHolder.info.isLastInTimelinePeriod + ? Player.DISCONTINUITY_REASON_PERIOD_TRANSITION + : Player.DISCONTINUITY_REASON_AD_INSERTION; + playbackInfoUpdate.setPositionDiscontinuity(discontinuityReason); + updatePlaybackPositions(); + advancedPlayingPeriod = true; + } + } + private boolean shouldAdvancePlayingPeriod() { if (!playWhenReady) { return false;