Merge LoadErrorHandlingPolicy cleanup methods

Issue: #7309
PiperOrigin-RevId: 309387483
This commit is contained in:
aquilescanta 2020-05-01 12:05:21 +01:00 committed by Oliver Woodman
parent 956514ad9b
commit 0774ee1da9
8 changed files with 56 additions and 36 deletions

View File

@ -563,7 +563,7 @@ import org.checkerframework.checker.nullness.qual.MonotonicNonNull;
elapsedRealtimeMs,
loadDurationMs,
dataSource.getBytesRead());
loadErrorHandlingPolicy.onLoadCompleted(loadEventInfo);
loadErrorHandlingPolicy.onLoadTaskConcluded(loadable.loadTaskId);
eventDispatcher.loadCompleted(
loadEventInfo,
C.DATA_TYPE_MEDIA,
@ -591,7 +591,7 @@ import org.checkerframework.checker.nullness.qual.MonotonicNonNull;
elapsedRealtimeMs,
loadDurationMs,
dataSource.getBytesRead());
loadErrorHandlingPolicy.onLoadCanceled(loadEventInfo);
loadErrorHandlingPolicy.onLoadTaskConcluded(loadable.loadTaskId);
eventDispatcher.loadCanceled(
loadEventInfo,
C.DATA_TYPE_MEDIA,
@ -635,6 +635,7 @@ import org.checkerframework.checker.nullness.qual.MonotonicNonNull;
}
StatsDataSource dataSource = loadable.dataSource;
boolean wasCanceled = !loadErrorAction.isRetry();
eventDispatcher.loadError(
new LoadEventInfo(
loadable.loadTaskId,
@ -652,7 +653,10 @@ import org.checkerframework.checker.nullness.qual.MonotonicNonNull;
/* mediaStartTimeUs= */ loadable.seekTimeUs,
durationUs,
error,
!loadErrorAction.isRetry());
wasCanceled);
if (wasCanceled) {
loadErrorHandlingPolicy.onLoadTaskConcluded(loadable.loadTaskId);
}
return loadErrorAction;
}

View File

@ -227,7 +227,7 @@ import org.checkerframework.checker.nullness.qual.MonotonicNonNull;
elapsedRealtimeMs,
loadDurationMs,
sampleSize);
loadErrorHandlingPolicy.onLoadCompleted(loadEventInfo);
loadErrorHandlingPolicy.onLoadTaskConcluded(loadable.loadTaskId);
eventDispatcher.loadCompleted(
loadEventInfo,
C.DATA_TYPE_MEDIA,
@ -252,7 +252,7 @@ import org.checkerframework.checker.nullness.qual.MonotonicNonNull;
elapsedRealtimeMs,
loadDurationMs,
dataSource.getBytesRead());
loadErrorHandlingPolicy.onLoadCanceled(loadEventInfo);
loadErrorHandlingPolicy.onLoadTaskConcluded(loadable.loadTaskId);
eventDispatcher.loadCanceled(
loadEventInfo,
C.DATA_TYPE_MEDIA,
@ -290,6 +290,7 @@ import org.checkerframework.checker.nullness.qual.MonotonicNonNull;
: Loader.DONT_RETRY_FATAL;
}
StatsDataSource dataSource = loadable.dataSource;
boolean wasCanceled = !action.isRetry();
eventDispatcher.loadError(
new LoadEventInfo(
loadable.loadTaskId,
@ -307,7 +308,10 @@ import org.checkerframework.checker.nullness.qual.MonotonicNonNull;
/* mediaStartTimeUs= */ 0,
durationUs,
error,
/* wasCanceled= */ !action.isRetry());
wasCanceled);
if (wasCanceled) {
loadErrorHandlingPolicy.onLoadTaskConcluded(loadable.loadTaskId);
}
return action;
}

View File

@ -414,7 +414,7 @@ public class ChunkSampleStream<T extends ChunkSource> implements SampleStream, S
elapsedRealtimeMs,
loadDurationMs,
loadable.bytesLoaded());
loadErrorHandlingPolicy.onLoadCompleted(loadEventInfo);
loadErrorHandlingPolicy.onLoadTaskConcluded(loadable.loadTaskId);
eventDispatcher.loadCompleted(
loadEventInfo,
loadable.type,
@ -439,7 +439,7 @@ public class ChunkSampleStream<T extends ChunkSource> implements SampleStream, S
elapsedRealtimeMs,
loadDurationMs,
loadable.bytesLoaded());
loadErrorHandlingPolicy.onLoadCanceled(loadEventInfo);
loadErrorHandlingPolicy.onLoadTaskConcluded(loadable.loadTaskId);
eventDispatcher.loadCanceled(
loadEventInfo,
loadable.type,
@ -522,6 +522,7 @@ public class ChunkSampleStream<T extends ChunkSource> implements SampleStream, S
error,
canceled);
if (canceled) {
loadErrorHandlingPolicy.onLoadTaskConcluded(loadable.loadTaskId);
callback.onContinueLoadingRequested(this);
}
return loadErrorAction;

View File

@ -137,20 +137,12 @@ public interface LoadErrorHandlingPolicy {
}
/**
* Called when the load associated with the given {@link LoadEventInfo} completes.
* Called once {@code loadTaskId} will not be associated with any more load errors.
*
* <p>Implementations of this interface should avoid resource leaks by releasing resources
* associated to the given {@link LoadEventInfo#loadTaskId}.
* <p>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.
*
* <p>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

View File

@ -763,7 +763,7 @@ public final class DashMediaSource extends BaseMediaSource {
elapsedRealtimeMs,
loadDurationMs,
loadable.bytesLoaded());
loadErrorHandlingPolicy.onLoadCompleted(loadEventInfo);
loadErrorHandlingPolicy.onLoadTaskConcluded(loadable.loadTaskId);
manifestEventDispatcher.loadCompleted(loadEventInfo, loadable.type);
DashManifest newManifest = loadable.getResult();
@ -859,6 +859,7 @@ public final class DashMediaSource extends BaseMediaSource {
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 @@ public final class DashMediaSource extends BaseMediaSource {
loadable.bytesLoaded()),
loadable.type,
error,
!loadErrorAction.isRetry());
wasCanceled);
if (wasCanceled) {
loadErrorHandlingPolicy.onLoadTaskConcluded(loadable.loadTaskId);
}
return loadErrorAction;
}
@ -885,7 +889,7 @@ public final class DashMediaSource extends BaseMediaSource {
elapsedRealtimeMs,
loadDurationMs,
loadable.bytesLoaded());
loadErrorHandlingPolicy.onLoadCompleted(loadEventInfo);
loadErrorHandlingPolicy.onLoadTaskConcluded(loadable.loadTaskId);
manifestEventDispatcher.loadCompleted(loadEventInfo, loadable.type);
onUtcTimestampResolved(loadable.getResult() - elapsedRealtimeMs);
}
@ -907,6 +911,7 @@ public final class DashMediaSource extends BaseMediaSource {
loadable.type,
error,
/* wasCanceled= */ true);
loadErrorHandlingPolicy.onLoadTaskConcluded(loadable.loadTaskId);
onUtcTimestampResolutionError(error);
return Loader.DONT_RETRY;
}
@ -922,7 +927,7 @@ public final class DashMediaSource extends BaseMediaSource {
elapsedRealtimeMs,
loadDurationMs,
loadable.bytesLoaded());
loadErrorHandlingPolicy.onLoadCanceled(loadEventInfo);
loadErrorHandlingPolicy.onLoadTaskConcluded(loadable.loadTaskId);
manifestEventDispatcher.loadCanceled(loadEventInfo, loadable.type);
}

View File

@ -711,7 +711,7 @@ import org.checkerframework.checker.nullness.qual.RequiresNonNull;
elapsedRealtimeMs,
loadDurationMs,
loadable.bytesLoaded());
loadErrorHandlingPolicy.onLoadCompleted(loadEventInfo);
loadErrorHandlingPolicy.onLoadTaskConcluded(loadable.loadTaskId);
eventDispatcher.loadCompleted(
loadEventInfo,
loadable.type,
@ -740,7 +740,7 @@ import org.checkerframework.checker.nullness.qual.RequiresNonNull;
elapsedRealtimeMs,
loadDurationMs,
loadable.bytesLoaded());
loadErrorHandlingPolicy.onLoadCanceled(loadEventInfo);
loadErrorHandlingPolicy.onLoadTaskConcluded(loadable.loadTaskId);
eventDispatcher.loadCanceled(
loadEventInfo,
loadable.type,
@ -796,6 +796,7 @@ import org.checkerframework.checker.nullness.qual.RequiresNonNull;
: Loader.DONT_RETRY_FATAL;
}
boolean wasCanceled = !loadErrorAction.isRetry();
eventDispatcher.loadError(
new LoadEventInfo(
loadable.loadTaskId,
@ -813,7 +814,10 @@ import org.checkerframework.checker.nullness.qual.RequiresNonNull;
loadable.startTimeUs,
loadable.endTimeUs,
error,
/* wasCanceled= */ !loadErrorAction.isRetry());
wasCanceled);
if (wasCanceled) {
loadErrorHandlingPolicy.onLoadTaskConcluded(loadable.loadTaskId);
}
if (blacklistSucceeded) {
if (!prepared) {

View File

@ -251,7 +251,7 @@ public final class DefaultHlsPlaylistTracker
elapsedRealtimeMs,
loadDurationMs,
loadable.bytesLoaded());
loadErrorHandlingPolicy.onLoadCompleted(loadEventInfo);
loadErrorHandlingPolicy.onLoadTaskConcluded(loadable.loadTaskId);
eventDispatcher.loadCompleted(loadEventInfo, C.DATA_TYPE_MANIFEST);
}
@ -270,7 +270,7 @@ public final class DefaultHlsPlaylistTracker
elapsedRealtimeMs,
loadDurationMs,
loadable.bytesLoaded());
loadErrorHandlingPolicy.onLoadCanceled(loadEventInfo);
loadErrorHandlingPolicy.onLoadTaskConcluded(loadable.loadTaskId);
eventDispatcher.loadCanceled(loadEventInfo, C.DATA_TYPE_MANIFEST);
}
@ -297,6 +297,9 @@ public final class DefaultHlsPlaylistTracker
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 final class DefaultHlsPlaylistTracker
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 final class DefaultHlsPlaylistTracker
elapsedRealtimeMs,
loadDurationMs,
loadable.bytesLoaded());
loadErrorHandlingPolicy.onLoadCanceled(loadEventInfo);
loadErrorHandlingPolicy.onLoadTaskConcluded(loadable.loadTaskId);
eventDispatcher.loadCanceled(loadEventInfo, C.DATA_TYPE_MANIFEST);
}
@ -596,6 +599,7 @@ public final class DefaultHlsPlaylistTracker
loadErrorAction = Loader.DONT_RETRY;
}
boolean wasCanceled = !loadErrorAction.isRetry();
eventDispatcher.loadError(
new LoadEventInfo(
loadable.loadTaskId,
@ -607,8 +611,10 @@ public final class DefaultHlsPlaylistTracker
loadable.bytesLoaded()),
C.DATA_TYPE_MANIFEST,
error,
/* wasCanceled= */ !loadErrorAction.isRetry());
wasCanceled);
if (wasCanceled) {
loadErrorHandlingPolicy.onLoadTaskConcluded(loadable.loadTaskId);
}
return loadErrorAction;
}

View File

@ -630,7 +630,7 @@ public final class SsMediaSource extends BaseMediaSource
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 final class SsMediaSource extends BaseMediaSource
elapsedRealtimeMs,
loadDurationMs,
loadable.bytesLoaded());
loadErrorHandlingPolicy.onLoadCanceled(loadEventInfo);
loadErrorHandlingPolicy.onLoadTaskConcluded(loadable.loadTaskId);
manifestEventDispatcher.loadCanceled(loadEventInfo, loadable.type);
}
@ -671,6 +671,7 @@ public final class SsMediaSource extends BaseMediaSource
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 final class SsMediaSource extends BaseMediaSource
loadable.bytesLoaded()),
loadable.type,
error,
!loadErrorAction.isRetry());
wasCanceled);
if (wasCanceled) {
loadErrorHandlingPolicy.onLoadTaskConcluded(loadable.loadTaskId);
}
return loadErrorAction;
}