From cb7b3862c42a6ed1a69dfe4c9251d3ee3e4cdcb6 Mon Sep 17 00:00:00 2001 From: michaelkatz Date: Mon, 3 Jul 2023 16:29:13 +0000 Subject: [PATCH] Add nanoTime method to Clock to support overriding System.nanoTime() PiperOrigin-RevId: 545237925 (cherry picked from commit de4575da28ee98a46e284cc8c7f11d34da1df29e) --- RELEASENOTES.md | 3 +++ .../src/main/java/androidx/media3/common/util/Clock.java | 3 +++ .../main/java/androidx/media3/common/util/SystemClock.java | 5 +++++ .../src/main/java/androidx/media3/test/utils/FakeClock.java | 6 ++++++ 4 files changed, 17 insertions(+) diff --git a/RELEASENOTES.md b/RELEASENOTES.md index 4173c8bba1..a240b58294 100644 --- a/RELEASENOTES.md +++ b/RELEASENOTES.md @@ -10,6 +10,9 @@ Previously indent and tab offset were included when limiting the cue length to 32 characters (which was technically correct by the spec) ([#11019](https://github.com/google/ExoPlayer/issues/11019)). +* Test Utilities: + * Add a `nanoTime()` method to `Clock` to provide override support of + `System.nanoTime()` ## 1.1 ### 1.1.0 (2023-07-05) 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 db37f66405..2e02a67062 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 @@ -147,6 +147,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();