Skip to content

Commit dda6669

Browse files
committed
Add AndroidClock which overrides nanoTime with SystemClock.elapsedRealtimeNanos()
1 parent 465f309 commit dda6669

File tree

5 files changed

+38
-4
lines changed

5 files changed

+38
-4
lines changed

android-agent/src/main/kotlin/io/opentelemetry/android/agent/session/SessionIdTimeoutHandler.kt

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66
package io.opentelemetry.android.agent.session
77

88
import io.opentelemetry.android.Incubating
9+
import io.opentelemetry.android.common.internal.tools.time.AndroidClock
910
import io.opentelemetry.android.internal.services.applifecycle.ApplicationStateListener
1011
import io.opentelemetry.sdk.common.Clock
1112
import kotlin.time.Duration
@@ -37,7 +38,7 @@ internal class SessionIdTimeoutHandler(
3738
// for testing
3839
@OptIn(Incubating::class)
3940
internal constructor(sessionConfig: SessionConfig) : this(
40-
Clock.getDefault(),
41+
AndroidClock.INSTANCE,
4142
sessionConfig.backgroundInactivityTimeout,
4243
)
4344

android-agent/src/main/kotlin/io/opentelemetry/android/agent/session/SessionManager.kt

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66
package io.opentelemetry.android.agent.session
77

88
import io.opentelemetry.android.Incubating
9+
import io.opentelemetry.android.common.internal.tools.time.AndroidClock
910
import io.opentelemetry.android.session.Session
1011
import io.opentelemetry.android.session.SessionObserver
1112
import io.opentelemetry.android.session.SessionProvider
@@ -16,7 +17,7 @@ import kotlin.random.Random
1617
import kotlin.time.Duration
1718

1819
internal class SessionManager(
19-
private val clock: Clock = Clock.getDefault(),
20+
private val clock: Clock = AndroidClock.INSTANCE,
2021
private val sessionStorage: SessionStorage = InMemorySessionStorage(),
2122
private val timeoutHandler: SessionIdTimeoutHandler,
2223
private val idGenerator: SessionIdGenerator = DefaultSessionIdGenerator(Random.Default),

common/api/common.api

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -87,6 +87,18 @@ public final class io/opentelemetry/android/common/internal/features/networkattr
8787
public static fun values ()[Lio/opentelemetry/android/common/internal/features/networkattributes/data/NetworkState;
8888
}
8989

90+
public final class io/opentelemetry/android/common/internal/tools/time/AndroidClock : io/opentelemetry/sdk/common/Clock {
91+
public static final field Companion Lio/opentelemetry/android/common/internal/tools/time/AndroidClock$Companion;
92+
public fun <init> ()V
93+
public static final fun getINSTANCE ()Lio/opentelemetry/android/common/internal/tools/time/AndroidClock;
94+
public fun nanoTime ()J
95+
public fun now ()J
96+
}
97+
98+
public final class io/opentelemetry/android/common/internal/tools/time/AndroidClock$Companion {
99+
public final fun getINSTANCE ()Lio/opentelemetry/android/common/internal/tools/time/AndroidClock;
100+
}
101+
90102
public abstract interface class io/opentelemetry/android/common/internal/tools/time/SystemTime {
91103
public static final field Companion Lio/opentelemetry/android/common/internal/tools/time/SystemTime$Companion;
92104
public abstract fun getCurrentTimeMillis ()J
Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
/*
2+
* Copyright The OpenTelemetry Authors
3+
* SPDX-License-Identifier: Apache-2.0
4+
*/
5+
6+
package io.opentelemetry.android.common.internal.tools.time
7+
8+
import android.os.SystemClock
9+
import io.opentelemetry.sdk.common.Clock
10+
import javax.annotation.concurrent.ThreadSafe
11+
12+
@ThreadSafe
13+
class AndroidClock : Clock by Clock.getDefault() {
14+
override fun nanoTime(): Long = SystemClock.elapsedRealtimeNanos()
15+
16+
companion object {
17+
@JvmStatic
18+
val INSTANCE = AndroidClock()
19+
}
20+
}

instrumentation/activity/src/main/java/io/opentelemetry/android/instrumentation/activity/startup/AppStartupTimer.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -13,10 +13,10 @@
1313
import androidx.annotation.NonNull;
1414
import androidx.annotation.Nullable;
1515
import io.opentelemetry.android.common.RumConstants;
16+
import io.opentelemetry.android.common.internal.tools.time.AndroidClock;
1617
import io.opentelemetry.android.internal.services.visiblescreen.activities.DefaultingActivityLifecycleCallbacks;
1718
import io.opentelemetry.api.trace.Span;
1819
import io.opentelemetry.api.trace.Tracer;
19-
import io.opentelemetry.sdk.common.Clock;
2020
import java.util.concurrent.TimeUnit;
2121

2222
public class AppStartupTimer {
@@ -26,7 +26,7 @@ public class AppStartupTimer {
2626
private static final long MAX_TIME_TO_UI_INIT = TimeUnit.MINUTES.toNanos(1);
2727

2828
// exposed so it can be used for the rest of the startup sequence timing.
29-
private final AnchoredClock startupClock = AnchoredClock.create(Clock.getDefault());
29+
private final AnchoredClock startupClock = AnchoredClock.create(AndroidClock.getINSTANCE());
3030
private final long firstPossibleTimestamp = startupClock.now();
3131
@Nullable private volatile Span overallAppStartSpan = null;
3232
@Nullable private volatile Runnable completionCallback = null;

0 commit comments

Comments
 (0)