From eb6e25b6fcbb1cfc09e21186edba92a03c930141 Mon Sep 17 00:00:00 2001 From: olly Date: Wed, 9 Feb 2022 12:55:59 +0000 Subject: [PATCH] Handle Choreographer.getInstance throwing RuntimeException #minor-release PiperOrigin-RevId: 427439588 --- .../video/VideoFrameReleaseHelper.java | 25 +++++++++++++------ 1 file changed, 17 insertions(+), 8 deletions(-) diff --git a/libraries/exoplayer/src/main/java/androidx/media3/exoplayer/video/VideoFrameReleaseHelper.java b/libraries/exoplayer/src/main/java/androidx/media3/exoplayer/video/VideoFrameReleaseHelper.java index 2735852372..00aac0e00e 100644 --- a/libraries/exoplayer/src/main/java/androidx/media3/exoplayer/video/VideoFrameReleaseHelper.java +++ b/libraries/exoplayer/src/main/java/androidx/media3/exoplayer/video/VideoFrameReleaseHelper.java @@ -622,21 +622,30 @@ public final class VideoFrameReleaseHelper { } private void createChoreographerInstanceInternal() { - choreographer = Choreographer.getInstance(); + try { + choreographer = Choreographer.getInstance(); + } catch (RuntimeException e) { + // See [Internal: b/213926330]. + Log.w(TAG, "Vsync sampling disabled due to platform error", e); + } } private void addObserverInternal() { - observerCount++; - if (observerCount == 1) { - checkNotNull(choreographer).postFrameCallback(this); + if (choreographer != null) { + observerCount++; + if (observerCount == 1) { + choreographer.postFrameCallback(this); + } } } private void removeObserverInternal() { - observerCount--; - if (observerCount == 0) { - checkNotNull(choreographer).removeFrameCallback(this); - sampledVsyncTimeNs = C.TIME_UNSET; + if (choreographer != null) { + observerCount--; + if (observerCount == 0) { + choreographer.removeFrameCallback(this); + sampledVsyncTimeNs = C.TIME_UNSET; + } } } }