From 0774ee1da91b90431a22fafb0560dbf486ecf3d0 Mon Sep 17 00:00:00 2001 From: aquilescanta Date: Fri, 1 May 2020 12:05:21 +0100 Subject: [PATCH] Merge LoadErrorHandlingPolicy cleanup methods Issue: #7309 PiperOrigin-RevId: 309387483 --- .../source/ProgressiveMediaPeriod.java | 10 +++++++--- .../source/SingleSampleMediaPeriod.java | 10 +++++++--- .../source/chunk/ChunkSampleStream.java | 5 +++-- .../upstream/LoadErrorHandlingPolicy.java | 16 ++++------------ .../source/dash/DashMediaSource.java | 13 +++++++++---- .../source/hls/HlsSampleStreamWrapper.java | 10 +++++++--- .../playlist/DefaultHlsPlaylistTracker.java | 18 ++++++++++++------ .../source/smoothstreaming/SsMediaSource.java | 10 +++++++--- 8 files changed, 56 insertions(+), 36 deletions(-) diff --git a/library/core/src/main/java/com/google/android/exoplayer2/source/ProgressiveMediaPeriod.java b/library/core/src/main/java/com/google/android/exoplayer2/source/ProgressiveMediaPeriod.java index 710e041857f..64307b028e8 100644 --- a/library/core/src/main/java/com/google/android/exoplayer2/source/ProgressiveMediaPeriod.java +++ b/library/core/src/main/java/com/google/android/exoplayer2/source/ProgressiveMediaPeriod.java @@ -563,7 +563,7 @@ public void onLoadCompleted( elapsedRealtimeMs, loadDurationMs, dataSource.getBytesRead()); - loadErrorHandlingPolicy.onLoadCompleted(loadEventInfo); + loadErrorHandlingPolicy.onLoadTaskConcluded(loadable.loadTaskId); eventDispatcher.loadCompleted( loadEventInfo, C.DATA_TYPE_MEDIA, @@ -591,7 +591,7 @@ public void onLoadCanceled( elapsedRealtimeMs, loadDurationMs, dataSource.getBytesRead()); - loadErrorHandlingPolicy.onLoadCanceled(loadEventInfo); + loadErrorHandlingPolicy.onLoadTaskConcluded(loadable.loadTaskId); eventDispatcher.loadCanceled( loadEventInfo, C.DATA_TYPE_MEDIA, @@ -635,6 +635,7 @@ public LoadErrorAction onLoadError( } StatsDataSource dataSource = loadable.dataSource; + boolean wasCanceled = !loadErrorAction.isRetry(); eventDispatcher.loadError( new LoadEventInfo( loadable.loadTaskId, @@ -652,7 +653,10 @@ public LoadErrorAction onLoadError( /* mediaStartTimeUs= */ loadable.seekTimeUs, durationUs, error, - !loadErrorAction.isRetry()); + wasCanceled); + if (wasCanceled) { + loadErrorHandlingPolicy.onLoadTaskConcluded(loadable.loadTaskId); + } return loadErrorAction; } diff --git a/library/core/src/main/java/com/google/android/exoplayer2/source/SingleSampleMediaPeriod.java b/library/core/src/main/java/com/google/android/exoplayer2/source/SingleSampleMediaPeriod.java index 79d8fc73c83..224acd7e153 100644 --- a/library/core/src/main/java/com/google/android/exoplayer2/source/SingleSampleMediaPeriod.java +++ b/library/core/src/main/java/com/google/android/exoplayer2/source/SingleSampleMediaPeriod.java @@ -227,7 +227,7 @@ public void onLoadCompleted( elapsedRealtimeMs, loadDurationMs, sampleSize); - loadErrorHandlingPolicy.onLoadCompleted(loadEventInfo); + loadErrorHandlingPolicy.onLoadTaskConcluded(loadable.loadTaskId); eventDispatcher.loadCompleted( loadEventInfo, C.DATA_TYPE_MEDIA, @@ -252,7 +252,7 @@ public void onLoadCanceled( elapsedRealtimeMs, loadDurationMs, dataSource.getBytesRead()); - loadErrorHandlingPolicy.onLoadCanceled(loadEventInfo); + loadErrorHandlingPolicy.onLoadTaskConcluded(loadable.loadTaskId); eventDispatcher.loadCanceled( loadEventInfo, C.DATA_TYPE_MEDIA, @@ -290,6 +290,7 @@ public LoadErrorAction onLoadError( : Loader.DONT_RETRY_FATAL; } StatsDataSource dataSource = loadable.dataSource; + boolean wasCanceled = !action.isRetry(); eventDispatcher.loadError( new LoadEventInfo( loadable.loadTaskId, @@ -307,7 +308,10 @@ public LoadErrorAction onLoadError( /* mediaStartTimeUs= */ 0, durationUs, error, - /* wasCanceled= */ !action.isRetry()); + wasCanceled); + if (wasCanceled) { + loadErrorHandlingPolicy.onLoadTaskConcluded(loadable.loadTaskId); + } return action; } diff --git a/library/core/src/main/java/com/google/android/exoplayer2/source/chunk/ChunkSampleStream.java b/library/core/src/main/java/com/google/android/exoplayer2/source/chunk/ChunkSampleStream.java index 5d5138dbc01..7c715e59792 100644 --- a/library/core/src/main/java/com/google/android/exoplayer2/source/chunk/ChunkSampleStream.java +++ b/library/core/src/main/java/com/google/android/exoplayer2/source/chunk/ChunkSampleStream.java @@ -414,7 +414,7 @@ public void onLoadCompleted(Chunk loadable, long elapsedRealtimeMs, long loadDur elapsedRealtimeMs, loadDurationMs, loadable.bytesLoaded()); - loadErrorHandlingPolicy.onLoadCompleted(loadEventInfo); + loadErrorHandlingPolicy.onLoadTaskConcluded(loadable.loadTaskId); eventDispatcher.loadCompleted( loadEventInfo, loadable.type, @@ -439,7 +439,7 @@ public void onLoadCanceled( elapsedRealtimeMs, loadDurationMs, loadable.bytesLoaded()); - loadErrorHandlingPolicy.onLoadCanceled(loadEventInfo); + loadErrorHandlingPolicy.onLoadTaskConcluded(loadable.loadTaskId); eventDispatcher.loadCanceled( loadEventInfo, loadable.type, @@ -522,6 +522,7 @@ public LoadErrorAction onLoadError( error, canceled); if (canceled) { + loadErrorHandlingPolicy.onLoadTaskConcluded(loadable.loadTaskId); callback.onContinueLoadingRequested(this); } return loadErrorAction; diff --git a/library/core/src/main/java/com/google/android/exoplayer2/upstream/LoadErrorHandlingPolicy.java b/library/core/src/main/java/com/google/android/exoplayer2/upstream/LoadErrorHandlingPolicy.java index 88c0c23f6c2..61e3b8309a0 100644 --- a/library/core/src/main/java/com/google/android/exoplayer2/upstream/LoadErrorHandlingPolicy.java +++ b/library/core/src/main/java/com/google/android/exoplayer2/upstream/LoadErrorHandlingPolicy.java @@ -137,20 +137,12 @@ default long getRetryDelayMsFor(LoadErrorInfo loadErrorInfo) { } /** - * Called when the load associated with the given {@link LoadEventInfo} completes. + * Called once {@code loadTaskId} will not be associated with any more load errors. * - *

Implementations of this interface should avoid resource leaks by releasing resources - * associated to the given {@link LoadEventInfo#loadTaskId}. + *

Implementations should clean up any resources associated with {@code loadTaskId} when this + * method is called. */ - default void onLoadCompleted(LoadEventInfo loadEventInfo) {} - - /** - * Called when the load associated with the given {@link LoadEventInfo} is canceled. - * - *

Implementations of this interface should avoid resource leaks by releasing resources - * associated to the given {@link LoadEventInfo#loadTaskId}. - */ - default void onLoadCanceled(LoadEventInfo loadEventInfo) {} + default void onLoadTaskConcluded(long loadTaskId) {} /** * Returns the minimum number of times to retry a load in the case of a load error, before diff --git a/library/dash/src/main/java/com/google/android/exoplayer2/source/dash/DashMediaSource.java b/library/dash/src/main/java/com/google/android/exoplayer2/source/dash/DashMediaSource.java index 72e38729c9a..b2c44e4a692 100644 --- a/library/dash/src/main/java/com/google/android/exoplayer2/source/dash/DashMediaSource.java +++ b/library/dash/src/main/java/com/google/android/exoplayer2/source/dash/DashMediaSource.java @@ -763,7 +763,7 @@ protected void releaseSourceInternal() { elapsedRealtimeMs, loadDurationMs, loadable.bytesLoaded()); - loadErrorHandlingPolicy.onLoadCompleted(loadEventInfo); + loadErrorHandlingPolicy.onLoadTaskConcluded(loadable.loadTaskId); manifestEventDispatcher.loadCompleted(loadEventInfo, loadable.type); DashManifest newManifest = loadable.getResult(); @@ -859,6 +859,7 @@ protected void releaseSourceInternal() { retryDelayMs == C.TIME_UNSET ? Loader.DONT_RETRY_FATAL : Loader.createRetryAction(/* resetErrorCount= */ false, retryDelayMs); + boolean wasCanceled = !loadErrorAction.isRetry(); manifestEventDispatcher.loadError( new LoadEventInfo( loadable.loadTaskId, @@ -870,7 +871,10 @@ protected void releaseSourceInternal() { loadable.bytesLoaded()), loadable.type, error, - !loadErrorAction.isRetry()); + wasCanceled); + if (wasCanceled) { + loadErrorHandlingPolicy.onLoadTaskConcluded(loadable.loadTaskId); + } return loadErrorAction; } @@ -885,7 +889,7 @@ protected void releaseSourceInternal() { elapsedRealtimeMs, loadDurationMs, loadable.bytesLoaded()); - loadErrorHandlingPolicy.onLoadCompleted(loadEventInfo); + loadErrorHandlingPolicy.onLoadTaskConcluded(loadable.loadTaskId); manifestEventDispatcher.loadCompleted(loadEventInfo, loadable.type); onUtcTimestampResolved(loadable.getResult() - elapsedRealtimeMs); } @@ -907,6 +911,7 @@ protected void releaseSourceInternal() { loadable.type, error, /* wasCanceled= */ true); + loadErrorHandlingPolicy.onLoadTaskConcluded(loadable.loadTaskId); onUtcTimestampResolutionError(error); return Loader.DONT_RETRY; } @@ -922,7 +927,7 @@ protected void releaseSourceInternal() { elapsedRealtimeMs, loadDurationMs, loadable.bytesLoaded()); - loadErrorHandlingPolicy.onLoadCanceled(loadEventInfo); + loadErrorHandlingPolicy.onLoadTaskConcluded(loadable.loadTaskId); manifestEventDispatcher.loadCanceled(loadEventInfo, loadable.type); } diff --git a/library/hls/src/main/java/com/google/android/exoplayer2/source/hls/HlsSampleStreamWrapper.java b/library/hls/src/main/java/com/google/android/exoplayer2/source/hls/HlsSampleStreamWrapper.java index 334a80bd742..69649297af9 100644 --- a/library/hls/src/main/java/com/google/android/exoplayer2/source/hls/HlsSampleStreamWrapper.java +++ b/library/hls/src/main/java/com/google/android/exoplayer2/source/hls/HlsSampleStreamWrapper.java @@ -711,7 +711,7 @@ public void onLoadCompleted(Chunk loadable, long elapsedRealtimeMs, long loadDur elapsedRealtimeMs, loadDurationMs, loadable.bytesLoaded()); - loadErrorHandlingPolicy.onLoadCompleted(loadEventInfo); + loadErrorHandlingPolicy.onLoadTaskConcluded(loadable.loadTaskId); eventDispatcher.loadCompleted( loadEventInfo, loadable.type, @@ -740,7 +740,7 @@ public void onLoadCanceled( elapsedRealtimeMs, loadDurationMs, loadable.bytesLoaded()); - loadErrorHandlingPolicy.onLoadCanceled(loadEventInfo); + loadErrorHandlingPolicy.onLoadTaskConcluded(loadable.loadTaskId); eventDispatcher.loadCanceled( loadEventInfo, loadable.type, @@ -796,6 +796,7 @@ public LoadErrorAction onLoadError( : Loader.DONT_RETRY_FATAL; } + boolean wasCanceled = !loadErrorAction.isRetry(); eventDispatcher.loadError( new LoadEventInfo( loadable.loadTaskId, @@ -813,7 +814,10 @@ public LoadErrorAction onLoadError( loadable.startTimeUs, loadable.endTimeUs, error, - /* wasCanceled= */ !loadErrorAction.isRetry()); + wasCanceled); + if (wasCanceled) { + loadErrorHandlingPolicy.onLoadTaskConcluded(loadable.loadTaskId); + } if (blacklistSucceeded) { if (!prepared) { diff --git a/library/hls/src/main/java/com/google/android/exoplayer2/source/hls/playlist/DefaultHlsPlaylistTracker.java b/library/hls/src/main/java/com/google/android/exoplayer2/source/hls/playlist/DefaultHlsPlaylistTracker.java index 2071da3ebb6..d6feb58d7b6 100644 --- a/library/hls/src/main/java/com/google/android/exoplayer2/source/hls/playlist/DefaultHlsPlaylistTracker.java +++ b/library/hls/src/main/java/com/google/android/exoplayer2/source/hls/playlist/DefaultHlsPlaylistTracker.java @@ -251,7 +251,7 @@ public void onLoadCompleted( elapsedRealtimeMs, loadDurationMs, loadable.bytesLoaded()); - loadErrorHandlingPolicy.onLoadCompleted(loadEventInfo); + loadErrorHandlingPolicy.onLoadTaskConcluded(loadable.loadTaskId); eventDispatcher.loadCompleted(loadEventInfo, C.DATA_TYPE_MANIFEST); } @@ -270,7 +270,7 @@ public void onLoadCanceled( elapsedRealtimeMs, loadDurationMs, loadable.bytesLoaded()); - loadErrorHandlingPolicy.onLoadCanceled(loadEventInfo); + loadErrorHandlingPolicy.onLoadTaskConcluded(loadable.loadTaskId); eventDispatcher.loadCanceled(loadEventInfo, C.DATA_TYPE_MANIFEST); } @@ -297,6 +297,9 @@ public LoadErrorAction onLoadError( C.DATA_TYPE_MANIFEST, error, isFatal); + if (isFatal) { + loadErrorHandlingPolicy.onLoadTaskConcluded(loadable.loadTaskId); + } return isFatal ? Loader.DONT_RETRY_FATAL : Loader.createRetryAction(/* resetErrorCount= */ false, retryDelayMs); @@ -536,7 +539,7 @@ public void onLoadCompleted( elapsedRealtimeMs, loadDurationMs, loadable.bytesLoaded()); - loadErrorHandlingPolicy.onLoadCompleted(loadEventInfo); + loadErrorHandlingPolicy.onLoadTaskConcluded(loadable.loadTaskId); if (result instanceof HlsMediaPlaylist) { processLoadedPlaylist((HlsMediaPlaylist) result, loadDurationMs); eventDispatcher.loadCompleted(loadEventInfo, C.DATA_TYPE_MANIFEST); @@ -560,7 +563,7 @@ public void onLoadCanceled( elapsedRealtimeMs, loadDurationMs, loadable.bytesLoaded()); - loadErrorHandlingPolicy.onLoadCanceled(loadEventInfo); + loadErrorHandlingPolicy.onLoadTaskConcluded(loadable.loadTaskId); eventDispatcher.loadCanceled(loadEventInfo, C.DATA_TYPE_MANIFEST); } @@ -596,6 +599,7 @@ public LoadErrorAction onLoadError( loadErrorAction = Loader.DONT_RETRY; } + boolean wasCanceled = !loadErrorAction.isRetry(); eventDispatcher.loadError( new LoadEventInfo( loadable.loadTaskId, @@ -607,8 +611,10 @@ public LoadErrorAction onLoadError( loadable.bytesLoaded()), C.DATA_TYPE_MANIFEST, error, - /* wasCanceled= */ !loadErrorAction.isRetry()); - + wasCanceled); + if (wasCanceled) { + loadErrorHandlingPolicy.onLoadTaskConcluded(loadable.loadTaskId); + } return loadErrorAction; } diff --git a/library/smoothstreaming/src/main/java/com/google/android/exoplayer2/source/smoothstreaming/SsMediaSource.java b/library/smoothstreaming/src/main/java/com/google/android/exoplayer2/source/smoothstreaming/SsMediaSource.java index 98104266da0..0a901005265 100644 --- a/library/smoothstreaming/src/main/java/com/google/android/exoplayer2/source/smoothstreaming/SsMediaSource.java +++ b/library/smoothstreaming/src/main/java/com/google/android/exoplayer2/source/smoothstreaming/SsMediaSource.java @@ -630,7 +630,7 @@ public void onLoadCompleted( elapsedRealtimeMs, loadDurationMs, loadable.bytesLoaded()); - loadErrorHandlingPolicy.onLoadCompleted(loadEventInfo); + loadErrorHandlingPolicy.onLoadTaskConcluded(loadable.loadTaskId); manifestEventDispatcher.loadCompleted(loadEventInfo, loadable.type); manifest = loadable.getResult(); manifestLoadStartTimestamp = elapsedRealtimeMs - loadDurationMs; @@ -653,7 +653,7 @@ public void onLoadCanceled( elapsedRealtimeMs, loadDurationMs, loadable.bytesLoaded()); - loadErrorHandlingPolicy.onLoadCanceled(loadEventInfo); + loadErrorHandlingPolicy.onLoadTaskConcluded(loadable.loadTaskId); manifestEventDispatcher.loadCanceled(loadEventInfo, loadable.type); } @@ -671,6 +671,7 @@ public LoadErrorAction onLoadError( retryDelayMs == C.TIME_UNSET ? Loader.DONT_RETRY_FATAL : Loader.createRetryAction(/* resetErrorCount= */ false, retryDelayMs); + boolean wasCanceled = !loadErrorAction.isRetry(); manifestEventDispatcher.loadError( new LoadEventInfo( loadable.loadTaskId, @@ -682,7 +683,10 @@ public LoadErrorAction onLoadError( loadable.bytesLoaded()), loadable.type, error, - !loadErrorAction.isRetry()); + wasCanceled); + if (wasCanceled) { + loadErrorHandlingPolicy.onLoadTaskConcluded(loadable.loadTaskId); + } return loadErrorAction; }