diff --git a/RELEASENOTES.md b/RELEASENOTES.md index 5ed913bae6..7f864cfed3 100644 --- a/RELEASENOTES.md +++ b/RELEASENOTES.md @@ -102,6 +102,8 @@ * Make `TestExoPlayerBuilder` and `FakeClock` compatible with Espresso UI tests and Compose UI tests. This fixes a bug where playback advances non-deterministically during Espresso or Compose view interactions. + * Add a `nanoTime()` method to `Clock` to provide override support of + `System.nanoTime()` * Remove deprecated symbols: * Remove `TransformationRequest.Builder.setEnableRequestSdrToneMapping(boolean)` diff --git a/libraries/common/src/main/java/androidx/media3/common/util/Clock.java b/libraries/common/src/main/java/androidx/media3/common/util/Clock.java index 27a87d0918..668eff9047 100644 --- a/libraries/common/src/main/java/androidx/media3/common/util/Clock.java +++ b/libraries/common/src/main/java/androidx/media3/common/util/Clock.java @@ -46,6 +46,9 @@ public interface Clock { */ long uptimeMillis(); + /** See {@link java.lang.System#nanoTime()} */ + long nanoTime(); + /** * Creates a {@link HandlerWrapper} using a specified looper and a specified callback for handling * messages. diff --git a/libraries/common/src/main/java/androidx/media3/common/util/SystemClock.java b/libraries/common/src/main/java/androidx/media3/common/util/SystemClock.java index 6d1eb6bd85..07b009923d 100644 --- a/libraries/common/src/main/java/androidx/media3/common/util/SystemClock.java +++ b/libraries/common/src/main/java/androidx/media3/common/util/SystemClock.java @@ -44,6 +44,11 @@ public class SystemClock implements Clock { return android.os.SystemClock.uptimeMillis(); } + @Override + public long nanoTime() { + return System.nanoTime(); + } + @Override public HandlerWrapper createHandler(Looper looper, @Nullable Callback callback) { return new SystemHandlerWrapper(new Handler(looper, callback)); diff --git a/libraries/test_utils/src/main/java/androidx/media3/test/utils/FakeClock.java b/libraries/test_utils/src/main/java/androidx/media3/test/utils/FakeClock.java index c962d87bcf..9781ce42b7 100644 --- a/libraries/test_utils/src/main/java/androidx/media3/test/utils/FakeClock.java +++ b/libraries/test_utils/src/main/java/androidx/media3/test/utils/FakeClock.java @@ -159,6 +159,12 @@ public class FakeClock implements Clock { return timeSinceBootMs; } + @Override + public synchronized long nanoTime() { + // Milliseconds to nanoseconds + return timeSinceBootMs * 1000000L; + } + @Override public long uptimeMillis() { return elapsedRealtime();