Skip to content

Commit

Permalink
Fix duplicated action issue found in test
Browse files Browse the repository at this point in the history
  • Loading branch information
stoyicker committed Jun 24, 2024
1 parent 73df46e commit dcd1e02
Show file tree
Hide file tree
Showing 2 changed files with 26 additions and 19 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -460,7 +460,7 @@ internal class ExoPlayerPlaybackEngine(
} else {
Action.Type.PLAYBACK_STOP
}
currentPlaybackSession?.actions?.add(
currentPlaybackSession?.tryAddAction(
Action(
trueTimeWrapper.currentTimeMillis,
positionInSeconds,
Expand Down Expand Up @@ -594,9 +594,15 @@ internal class ExoPlayerPlaybackEngine(
}.toDouble() / MS_IN_SECOND
startStall(Stall.Reason.SEEK, stallPositionSeconds, invokedAtMillis)
}
currentPlaybackSession?.actions?.apply {
add(Action(invokedAtMillis, oldPositionSeconds, Action.Type.PLAYBACK_STOP))
add(Action(invokedAtMillis, newPositionSeconds, Action.Type.PLAYBACK_START))
currentPlaybackSession?.apply {
tryAddAction(Action(invokedAtMillis, oldPositionSeconds, Action.Type.PLAYBACK_STOP))
tryAddAction(
Action(
invokedAtMillis,
newPositionSeconds,
Action.Type.PLAYBACK_START,
),
)
}
}
}
Expand Down Expand Up @@ -674,7 +680,7 @@ internal class ExoPlayerPlaybackEngine(
} else {
eventTime.currentPlaybackPositionMs
}.toDouble() / MS_IN_SECOND
currentPlaybackSession?.actions?.add(
currentPlaybackSession?.tryAddAction(
Action(
trueTimeWrapper.currentTimeMillis,
positionInSeconds,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -17,14 +17,25 @@ internal sealed class PlaybackSession {
abstract val actualQuality: ProductQuality
abstract val sourceType: String?
abstract val sourceId: String?
abstract val actions: MutableList<Action>
val actions: List<Action> = mutableListOf()

var startTimestamp = 0L
var startAssetPosition by
Delegates.vetoable(START_ASSET_POSITION_UNASSIGNED) { _, oldValue, newValue ->
oldValue == START_ASSET_POSITION_UNASSIGNED && newValue >= 0
}

fun tryAddAction(action: Action) {
if (actions.lastOrNull()?.actionType == action.actionType) {
/**
* PlayLog-wise, we can't start while started or stop while stopped. However,
* ExoPlayer-wise, it can happen for example when a discontinuity occurs while paused.
*/
return
}
(actions as MutableList<Action>).add(action)
}

@Suppress("LongParameterList")
class Audio(
override val playbackSessionId: UUID,
Expand All @@ -35,10 +46,7 @@ internal sealed class PlaybackSession {
override val actualQuality: AudioQuality,
override val sourceType: String?,
override val sourceId: String?,
) : PlaybackSession() {

override val actions = mutableListOf<Action>()
}
) : PlaybackSession()

@Suppress("LongParameterList")
class Video(
Expand All @@ -49,10 +57,7 @@ internal sealed class PlaybackSession {
override val actualQuality: VideoQuality,
override val sourceType: String?,
override val sourceId: String?,
) : PlaybackSession() {

override val actions = mutableListOf<Action>()
}
) : PlaybackSession()

class Broadcast(
override val playbackSessionId: UUID,
Expand All @@ -61,10 +66,7 @@ internal sealed class PlaybackSession {
override val actualQuality: AudioQuality,
override val sourceType: String?,
override val sourceId: String?,
) : PlaybackSession() {

override val actions = mutableListOf<Action>()
}
) : PlaybackSession()

@Suppress("LongParameterList")
class UC(
Expand All @@ -76,7 +78,6 @@ internal sealed class PlaybackSession {
) : PlaybackSession() {

override val actualQuality = AudioQuality.LOW
override val actions = mutableListOf<Action>()
}

companion object {
Expand Down

0 comments on commit dcd1e02

Please sign in to comment.