From 1cc1bf02eff8b8dd198664a3c6d090716bbf694e Mon Sep 17 00:00:00 2001 From: Colin Kho Date: Wed, 31 Jul 2024 22:35:39 -0700 Subject: [PATCH 1/3] Added onLoadStarted callback to Loader's callback --- .../media3/exoplayer/upstream/Loader.java | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/libraries/exoplayer/src/main/java/androidx/media3/exoplayer/upstream/Loader.java b/libraries/exoplayer/src/main/java/androidx/media3/exoplayer/upstream/Loader.java index 8fc3ffecb3..18fda8598d 100644 --- a/libraries/exoplayer/src/main/java/androidx/media3/exoplayer/upstream/Loader.java +++ b/libraries/exoplayer/src/main/java/androidx/media3/exoplayer/upstream/Loader.java @@ -90,6 +90,18 @@ public final class Loader implements LoaderErrorThrower { /** A callback to be notified of {@link Loader} events. */ public interface Callback { + /** + * Called when a load has started for the first time or through a retry. + * + * @param loadable The loadable whose load has completed. + * @param elapsedRealtimeMs {@link SystemClock#elapsedRealtime} when the load ended. + * @param loadDurationMs The duration in milliseconds of the load since {@link #startLoading} + * was called. + * @param error The load error of the previous load attempt if this is a retry, otherwise null + * @param errorCount The number of errors this load has encountered thus far. + */ + default void onLoadStarted(T loadable, long elapsedRealtimeMs, long loadDurationMs, @Nullable IOException error, int errorCount) {} + /** * Called when a load has completed. * @@ -531,6 +543,9 @@ public final class Loader implements LoaderErrorThrower { } private void execute() { + long nowMs = SystemClock.elapsedRealtime(); + long durationMs = nowMs - startTimeMs; + Assertions.checkNotNull(this.callback).onLoadStarted(loadable, nowMs, durationMs, currentError, errorCount); currentError = null; downloadExecutor.execute(Assertions.checkNotNull(currentTask)); } From 33d9b78e21c2ac6f382695c9c834c013c05f38ad Mon Sep 17 00:00:00 2001 From: Colin Kho Date: Wed, 7 Aug 2024 16:49:57 -0700 Subject: [PATCH 2/3] Fix javadoc of onLoadStarted & remove error information as fields --- .../java/androidx/media3/exoplayer/upstream/Loader.java | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-) diff --git a/libraries/exoplayer/src/main/java/androidx/media3/exoplayer/upstream/Loader.java b/libraries/exoplayer/src/main/java/androidx/media3/exoplayer/upstream/Loader.java index 18fda8598d..9a0e8e0656 100644 --- a/libraries/exoplayer/src/main/java/androidx/media3/exoplayer/upstream/Loader.java +++ b/libraries/exoplayer/src/main/java/androidx/media3/exoplayer/upstream/Loader.java @@ -94,13 +94,11 @@ public final class Loader implements LoaderErrorThrower { * Called when a load has started for the first time or through a retry. * * @param loadable The loadable whose load has completed. - * @param elapsedRealtimeMs {@link SystemClock#elapsedRealtime} when the load ended. + * @param elapsedRealtimeMs {@link SystemClock#elapsedRealtime} when the load attempts to start. * @param loadDurationMs The duration in milliseconds of the load since {@link #startLoading} * was called. - * @param error The load error of the previous load attempt if this is a retry, otherwise null - * @param errorCount The number of errors this load has encountered thus far. */ - default void onLoadStarted(T loadable, long elapsedRealtimeMs, long loadDurationMs, @Nullable IOException error, int errorCount) {} + default void onLoadStarted(T loadable, long elapsedRealtimeMs, long loadDurationMs) {} /** * Called when a load has completed. @@ -545,7 +543,7 @@ public final class Loader implements LoaderErrorThrower { private void execute() { long nowMs = SystemClock.elapsedRealtime(); long durationMs = nowMs - startTimeMs; - Assertions.checkNotNull(this.callback).onLoadStarted(loadable, nowMs, durationMs, currentError, errorCount); + Assertions.checkNotNull(this.callback).onLoadStarted(loadable, nowMs, durationMs); currentError = null; downloadExecutor.execute(Assertions.checkNotNull(currentTask)); } From af5df6e7000a0577513c0e71c9170521208c19ed Mon Sep 17 00:00:00 2001 From: Ian Baker Date: Tue, 20 Aug 2024 11:26:59 +0100 Subject: [PATCH 3/3] Add retryCount parameter to make it clear onLoadStarted is called for retries too --- .../java/androidx/media3/exoplayer/upstream/Loader.java | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/libraries/exoplayer/src/main/java/androidx/media3/exoplayer/upstream/Loader.java b/libraries/exoplayer/src/main/java/androidx/media3/exoplayer/upstream/Loader.java index 9a0e8e0656..96610b2ad0 100644 --- a/libraries/exoplayer/src/main/java/androidx/media3/exoplayer/upstream/Loader.java +++ b/libraries/exoplayer/src/main/java/androidx/media3/exoplayer/upstream/Loader.java @@ -97,8 +97,11 @@ public final class Loader implements LoaderErrorThrower { * @param elapsedRealtimeMs {@link SystemClock#elapsedRealtime} when the load attempts to start. * @param loadDurationMs The duration in milliseconds of the load since {@link #startLoading} * was called. + * @param retryCount The number of failed attempts since {@link #startLoading} was called (this + * is zero for the first load attempt). */ - default void onLoadStarted(T loadable, long elapsedRealtimeMs, long loadDurationMs) {} + default void onLoadStarted( + T loadable, long elapsedRealtimeMs, long loadDurationMs, int retryCount) {} /** * Called when a load has completed. @@ -543,7 +546,7 @@ public final class Loader implements LoaderErrorThrower { private void execute() { long nowMs = SystemClock.elapsedRealtime(); long durationMs = nowMs - startTimeMs; - Assertions.checkNotNull(this.callback).onLoadStarted(loadable, nowMs, durationMs); + Assertions.checkNotNull(this.callback).onLoadStarted(loadable, nowMs, durationMs, errorCount); currentError = null; downloadExecutor.execute(Assertions.checkNotNull(currentTask)); }