From e1eb8b6dd89fac48d62e80e95c0e959815720b35 Mon Sep 17 00:00:00 2001 From: bachinger Date: Wed, 16 Nov 2022 10:36:48 +0000 Subject: [PATCH] Add pending sequence before sending the remote session task #minor-release PiperOrigin-RevId: 488885069 --- .../media3/session/MediaBrowserImplBase.java | 3 ++- .../session/MediaControllerImplBase.java | 19 ++++++++++++++----- 2 files changed, 16 insertions(+), 6 deletions(-) diff --git a/libraries/session/src/main/java/androidx/media3/session/MediaBrowserImplBase.java b/libraries/session/src/main/java/androidx/media3/session/MediaBrowserImplBase.java index 441e71c7a7..347180cc6a 100644 --- a/libraries/session/src/main/java/androidx/media3/session/MediaBrowserImplBase.java +++ b/libraries/session/src/main/java/androidx/media3/session/MediaBrowserImplBase.java @@ -194,7 +194,8 @@ import org.checkerframework.checker.initialization.qual.UnderInitialization; task.run(iSession, result.getSequenceNumber()); } catch (RemoteException e) { Log.w(TAG, "Cannot connect to the service or the session is gone", e); - result.set(LibraryResult.ofError(RESULT_ERROR_SESSION_DISCONNECTED)); + sequencedFutureManager.setFutureResult( + result.getSequenceNumber(), LibraryResult.ofError(RESULT_ERROR_SESSION_DISCONNECTED)); } return result; } else { diff --git a/libraries/session/src/main/java/androidx/media3/session/MediaControllerImplBase.java b/libraries/session/src/main/java/androidx/media3/session/MediaControllerImplBase.java index 75849ae157..4f7940b30a 100644 --- a/libraries/session/src/main/java/androidx/media3/session/MediaControllerImplBase.java +++ b/libraries/session/src/main/java/androidx/media3/session/MediaControllerImplBase.java @@ -340,15 +340,17 @@ import org.checkerframework.checker.nullness.qual.NonNull; SequencedFutureManager.SequencedFuture result = sequencedFutureManager.createSequencedFuture( new SessionResult(SessionResult.RESULT_INFO_SKIPPED)); + int sequenceNumber = result.getSequenceNumber(); + if (addToPendingMaskingOperations) { + pendingMaskingSequencedFutureNumbers.add(sequenceNumber); + } try { - int sequenceNumber = result.getSequenceNumber(); task.run(iSession, sequenceNumber); - if (addToPendingMaskingOperations) { - pendingMaskingSequencedFutureNumbers.add(sequenceNumber); - } } catch (RemoteException e) { Log.w(TAG, "Cannot connect to the service or the session is gone", e); - result.set(new SessionResult(SessionResult.RESULT_ERROR_SESSION_DISCONNECTED)); + pendingMaskingSequencedFutureNumbers.remove(sequenceNumber); + sequencedFutureManager.setFutureResult( + sequenceNumber, new SessionResult(SessionResult.RESULT_ERROR_SESSION_DISCONNECTED)); } return result; } else { @@ -2173,6 +2175,13 @@ import org.checkerframework.checker.nullness.qual.NonNull; // Never happens because future.setException will not be called. throw new IllegalStateException(e); } catch (TimeoutException e) { + if (future instanceof SequencedFutureManager.SequencedFuture) { + int sequenceNumber = + ((SequencedFutureManager.SequencedFuture) future).getSequenceNumber(); + pendingMaskingSequencedFutureNumbers.remove(sequenceNumber); + sequencedFutureManager.setFutureResult( + sequenceNumber, new SessionResult(SessionResult.RESULT_ERROR_UNKNOWN)); + } Log.w(TAG, "set/clearVideoSurface takes too long on the session side.", e); // TODO(b/188888693): Let developers know the failure in their code. }