Skip to content

Commit 2ac6668

Browse files
committed
RUM-10363: Fix conflicts
1 parent 4f0f65a commit 2ac6668

File tree

130 files changed

+1752
-977
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

130 files changed

+1752
-977
lines changed

dd-sdk-android-core/api/apiSurface

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -132,6 +132,7 @@ fun <R: Any?> com.datadog.android.api.InternalLogger.measureMethodCallPerf(Class
132132
fun FeatureScope.getContextFuture(Set<String> = emptySet()): java.util.concurrent.Future<com.datadog.android.api.context.DatadogContext?>?
133133
interface com.datadog.android.api.feature.FeatureSdkCore : com.datadog.android.api.SdkCore
134134
val internalLogger: com.datadog.android.api.InternalLogger
135+
val timeProvider: com.datadog.android.internal.time.TimeProvider
135136
fun registerFeature(Feature)
136137
fun getFeature(String): FeatureScope?
137138
fun updateFeatureContext(String, Boolean = true, (MutableMap<String, Any?>) -> Unit)
@@ -403,7 +404,7 @@ interface com.datadog.android.core.sampling.Sampler<T: Any>
403404
interface com.datadog.android.core.thread.FlushableExecutorService : java.util.concurrent.ExecutorService
404405
fun drainTo(MutableCollection<Runnable>)
405406
interface Factory
406-
fun create(com.datadog.android.api.InternalLogger, String, com.datadog.android.core.configuration.BackPressureStrategy): FlushableExecutorService
407+
fun create(com.datadog.android.api.InternalLogger, String, com.datadog.android.core.configuration.BackPressureStrategy, com.datadog.android.internal.time.TimeProvider): FlushableExecutorService
407408
interface com.datadog.android.event.EventMapper<T: Any>
408409
fun map(T): T?
409410
class com.datadog.android.event.MapperSerializer<T: Any> : com.datadog.android.core.persistence.Serializer<T>

dd-sdk-android-core/api/dd-sdk-android-core.api

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -423,6 +423,7 @@ public abstract interface class com/datadog/android/api/feature/FeatureSdkCore :
423423
public abstract fun getFeature (Ljava/lang/String;)Lcom/datadog/android/api/feature/FeatureScope;
424424
public abstract fun getFeatureContext (Ljava/lang/String;Z)Ljava/util/Map;
425425
public abstract fun getInternalLogger ()Lcom/datadog/android/api/InternalLogger;
426+
public abstract fun getTimeProvider ()Lcom/datadog/android/internal/time/TimeProvider;
426427
public abstract fun registerFeature (Lcom/datadog/android/api/feature/Feature;)V
427428
public abstract fun removeContextUpdateReceiver (Lcom/datadog/android/api/feature/FeatureContextUpdateReceiver;)V
428429
public abstract fun removeEventReceiver (Ljava/lang/String;)V
@@ -1016,7 +1017,7 @@ public abstract interface class com/datadog/android/core/thread/FlushableExecuto
10161017
}
10171018

10181019
public abstract interface class com/datadog/android/core/thread/FlushableExecutorService$Factory {
1019-
public abstract fun create (Lcom/datadog/android/api/InternalLogger;Ljava/lang/String;Lcom/datadog/android/core/configuration/BackPressureStrategy;)Lcom/datadog/android/core/thread/FlushableExecutorService;
1020+
public abstract fun create (Lcom/datadog/android/api/InternalLogger;Ljava/lang/String;Lcom/datadog/android/core/configuration/BackPressureStrategy;Lcom/datadog/android/internal/time/TimeProvider;)Lcom/datadog/android/core/thread/FlushableExecutorService;
10201021
}
10211022

10221023
public abstract interface class com/datadog/android/event/EventMapper {

dd-sdk-android-core/src/main/kotlin/com/datadog/android/api/feature/FeatureSdkCore.kt

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@ package com.datadog.android.api.feature
88

99
import com.datadog.android.api.InternalLogger
1010
import com.datadog.android.api.SdkCore
11+
import com.datadog.android.internal.time.TimeProvider
1112
import okhttp3.Call
1213
import okhttp3.OkHttpClient
1314
import java.util.UUID
@@ -27,6 +28,11 @@ interface FeatureSdkCore : SdkCore {
2728
*/
2829
val internalLogger: InternalLogger
2930

31+
/**
32+
* The [TimeProvider] used by this core instance for current timestamps.
33+
*/
34+
val timeProvider: TimeProvider
35+
3036
/**
3137
* Registers a feature to this instance of the Datadog SDK.
3238
*

dd-sdk-android-core/src/main/kotlin/com/datadog/android/core/internal/CoreFeature.kt

Lines changed: 8 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -135,7 +135,7 @@ internal class CoreFeature(
135135
.writeTimeout(NETWORK_TIMEOUT_MS, TimeUnit.MILLISECONDS)
136136
.protocols(listOf(Protocol.HTTP_2, Protocol.HTTP_1_1))
137137
.connectionSpecs(listOf(connectionSpec))
138-
.dns(RotatingDnsResolver()) // NPE cannot happen here
138+
.dns(RotatingDnsResolver(timeProvider = timeProvider)) // NPE cannot happen here
139139
.build()
140140
}
141141

@@ -327,7 +327,7 @@ internal class CoreFeature(
327327
}
328328

329329
fun createExecutorService(executorContext: String): ExecutorService {
330-
return executorServiceFactory.create(internalLogger, executorContext, backpressureStrategy)
330+
return executorServiceFactory.create(internalLogger, executorContext, backpressureStrategy, timeProvider)
331331
}
332332

333333
fun createScheduledExecutorService(executorContext: String): ScheduledExecutorService {
@@ -652,7 +652,8 @@ internal class CoreFeature(
652652
persistenceExecutorService = executorServiceFactory.create(
653653
internalLogger = internalLogger,
654654
executorContext = "storage",
655-
backPressureStrategy = backpressureStrategy
655+
backPressureStrategy = backpressureStrategy,
656+
timeProvider = timeProvider
656657
)
657658
val contextQueue = BackPressuredBlockingQueue<Runnable>(
658659
internalLogger,
@@ -662,7 +663,8 @@ internal class CoreFeature(
662663
// just notify when reached
663664
onItemDropped = {},
664665
onThresholdReached = {},
665-
backpressureMitigation = null
666+
backpressureMitigation = null,
667+
timeProvider = timeProvider
666668
)
667669
@Suppress("UnsafeThirdPartyFunctionCall") // all parameters are safe
668670
contextExecutorService = ThreadPoolExecutor(
@@ -753,8 +755,8 @@ internal class CoreFeature(
753755
" process of your application."
754756

755757
internal val DEFAULT_FLUSHABLE_EXECUTOR_SERVICE_FACTORY =
756-
FlushableExecutorService.Factory { logger, executorContext, backPressureStrategy ->
757-
BackPressureExecutorService(logger, executorContext, backPressureStrategy)
758+
FlushableExecutorService.Factory { logger, executorContext, backPressureStrategy, timeProvider ->
759+
BackPressureExecutorService(logger, executorContext, backPressureStrategy, timeProvider)
758760
}
759761

760762
internal val DEFAULT_SCHEDULED_EXECUTOR_SERVICE_FACTORY =

dd-sdk-android-core/src/main/kotlin/com/datadog/android/core/internal/DatadogCore.kt

Lines changed: 16 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -34,14 +34,14 @@ import com.datadog.android.core.internal.logger.SdkInternalLogger
3434
import com.datadog.android.core.internal.net.FirstPartyHostHeaderTypeResolver
3535
import com.datadog.android.core.internal.system.BuildSdkVersionProvider
3636
import com.datadog.android.core.internal.time.DefaultAppStartTimeProvider
37-
import com.datadog.android.core.internal.time.composeTimeInfo
3837
import com.datadog.android.core.internal.utils.executeSafe
3938
import com.datadog.android.core.internal.utils.getSafe
4039
import com.datadog.android.core.internal.utils.scheduleSafe
4140
import com.datadog.android.core.internal.utils.submitSafe
4241
import com.datadog.android.core.thread.FlushableExecutorService
4342
import com.datadog.android.error.internal.CrashReportsFeature
4443
import com.datadog.android.internal.telemetry.InternalTelemetryEvent
44+
import com.datadog.android.internal.time.TimeProvider
4545
import com.datadog.android.privacy.TrackingConsent
4646
import com.google.gson.JsonObject
4747
import okhttp3.Call
@@ -101,7 +101,17 @@ internal class DatadogCore(
101101
/** @inheritDoc */
102102
override val time: TimeInfo
103103
get() {
104-
return coreFeature.timeProvider.composeTimeInfo()
104+
return with(coreFeature.timeProvider) {
105+
val deviceTimeMs = getDeviceTimestamp()
106+
val serverTimeMs = getServerTimestamp()
107+
TimeInfo(
108+
deviceTimeNs = TimeUnit.MILLISECONDS.toNanos(deviceTimeMs),
109+
serverTimeNs = TimeUnit.MILLISECONDS.toNanos(serverTimeMs),
110+
serverTimeOffsetNs = TimeUnit.MILLISECONDS
111+
.toNanos(serverTimeMs - deviceTimeMs),
112+
serverTimeOffsetMs = serverTimeMs - deviceTimeMs
113+
)
114+
}
105115
}
106116

107117
/** @inheritDoc */
@@ -115,6 +125,10 @@ internal class DatadogCore(
115125
/** @inheritDoc */
116126
override val internalLogger: InternalLogger = internalLoggerProvider(this)
117127

128+
/** @inheritDoc */
129+
override val timeProvider: TimeProvider
130+
get() = coreFeature.timeProvider
131+
118132
/** @inheritDoc */
119133
override var isDeveloperModeEnabled: Boolean = false
120134
internal set

dd-sdk-android-core/src/main/kotlin/com/datadog/android/core/internal/NoOpInternalSdkCore.kt

Lines changed: 10 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,8 @@ import com.datadog.android.core.InternalSdkCore
1919
import com.datadog.android.core.internal.logger.SdkInternalLogger
2020
import com.datadog.android.core.internal.net.DefaultFirstPartyHostHeaderTypeResolver
2121
import com.datadog.android.core.internal.net.FirstPartyHostHeaderTypeResolver
22+
import com.datadog.android.internal.time.DefaultTimeProvider
23+
import com.datadog.android.internal.time.TimeProvider
2224
import com.datadog.android.privacy.TrackingConsent
2325
import com.google.gson.JsonObject
2426
import okhttp3.Call
@@ -41,15 +43,16 @@ import java.util.concurrent.TimeUnit
4143
/**
4244
* A no-op implementation of [SdkCore].
4345
*/
44-
@Suppress("TooManyFunctions")
4546
internal object NoOpInternalSdkCore : InternalSdkCore {
4647

4748
override val name: String = "no-op"
4849

49-
override val time: TimeInfo = with(System.currentTimeMillis()) {
50-
TimeInfo.EMPTY.copy(
50+
override val time: TimeInfo = with(timeProvider.getDeviceTimestamp()) {
51+
TimeInfo(
5152
deviceTimeNs = TimeUnit.MILLISECONDS.toNanos(this),
52-
serverTimeNs = TimeUnit.MILLISECONDS.toNanos(this)
53+
serverTimeNs = TimeUnit.MILLISECONDS.toNanos(this),
54+
serverTimeOffsetNs = 0L,
55+
serverTimeOffsetMs = 0L
5356
)
5457
}
5558

@@ -59,6 +62,9 @@ internal object NoOpInternalSdkCore : InternalSdkCore {
5962
override val internalLogger: InternalLogger
6063
get() = SdkInternalLogger(this)
6164

65+
override val timeProvider: TimeProvider
66+
get() = DefaultTimeProvider()
67+
6268
// region InternalSdkCore
6369

6470
override val networkInfo: NetworkInfo

dd-sdk-android-core/src/main/kotlin/com/datadog/android/core/internal/SdkFeature.kt

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -366,7 +366,8 @@ internal class SdkFeature(
366366
executorService = coreFeature.persistenceExecutorService,
367367
filePersistenceConfig = filePersistenceConfig,
368368
internalLogger = internalLogger,
369-
metricsDispatcher = metricsDispatcher
369+
metricsDispatcher = metricsDispatcher,
370+
timeProvider = coreFeature.timeProvider
370371
)
371372
this.fileOrchestrator = fileOrchestrator
372373

@@ -398,7 +399,8 @@ internal class SdkFeature(
398399
sdkVersion = coreFeature.sdkVersion,
399400
androidInfoProvider = coreFeature.androidInfoProvider,
400401
executionTimer = GlobalBenchmark.createExecutionTimer(
401-
track = wrappedFeature.name
402+
track = wrappedFeature.name,
403+
timeProvider = coreFeature.timeProvider
402404
)
403405
)
404406
}

dd-sdk-android-core/src/main/kotlin/com/datadog/android/core/internal/data/upload/RotatingDnsResolver.kt

Lines changed: 9 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66

77
package com.datadog.android.core.internal.data.upload
88

9+
import com.datadog.android.internal.time.TimeProvider
910
import okhttp3.Dns
1011
import java.net.InetAddress
1112
import kotlin.time.Duration
@@ -14,17 +15,17 @@ import kotlin.time.Duration.Companion.nanoseconds
1415

1516
internal class RotatingDnsResolver(
1617
private val delegate: Dns = Dns.SYSTEM,
17-
private val ttl: Duration = TTL_30_MIN
18+
private val ttl: Duration = TTL_30_MIN,
19+
private val timeProvider: TimeProvider
1820
) : Dns {
1921

2022
data class ResolvedHost(
2123
val hostname: String,
22-
val addresses: MutableList<InetAddress>
24+
val addresses: MutableList<InetAddress>,
25+
private val resolutionTimestamp: Long
2326
) {
24-
private val resolutionTimestamp: Long = System.nanoTime()
25-
26-
fun getAge(): Duration {
27-
return (System.nanoTime() - resolutionTimestamp).nanoseconds
27+
fun getAge(currentTime: Long): Duration {
28+
return (currentTime - resolutionTimestamp).nanoseconds
2829
}
2930

3031
fun rotate() {
@@ -50,7 +51,7 @@ internal class RotatingDnsResolver(
5051
} else {
5152
@Suppress("UnsafeThirdPartyFunctionCall") // handled by caller
5253
val result = delegate.lookup(hostname)
53-
knownHosts[hostname] = ResolvedHost(hostname, result.toMutableList())
54+
knownHosts[hostname] = ResolvedHost(hostname, result.toMutableList(), timeProvider.getDeviceElapsedTimeNs())
5455
safeCopy(result)
5556
}
5657
}
@@ -66,7 +67,7 @@ internal class RotatingDnsResolver(
6667
}
6768

6869
private fun isValid(knownHost: ResolvedHost): Boolean {
69-
return knownHost.getAge() < ttl && knownHost.addresses.isNotEmpty()
70+
return knownHost.getAge(timeProvider.getDeviceElapsedTimeNs()) < ttl && knownHost.addresses.isNotEmpty()
7071
}
7172

7273
// endregion

dd-sdk-android-core/src/main/kotlin/com/datadog/android/core/internal/logger/SdkInternalLogger.kt

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@ import com.datadog.android.core.sampling.RateBasedSampler
2020
import com.datadog.android.internal.attributes.LocalAttribute
2121
import com.datadog.android.internal.attributes.enrichWithNonNullAttribute
2222
import com.datadog.android.internal.telemetry.InternalTelemetryEvent
23+
import com.datadog.android.internal.time.DefaultTimeProvider
2324

2425
internal class SdkInternalLogger(
2526
private val sdkCore: FeatureSdkCore?,
@@ -140,7 +141,8 @@ internal class SdkInternalLogger(
140141
internalLogger = this,
141142
operationName = operationName,
142143
callerClass = callerClass,
143-
creationSampleRate = samplingRate
144+
creationSampleRate = samplingRate,
145+
timeProvider = sdkCore?.timeProvider ?: DefaultTimeProvider()
144146
)
145147
}
146148
}

dd-sdk-android-core/src/main/kotlin/com/datadog/android/core/internal/metrics/BatchMetricsDispatcher.kt

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@ internal class BatchMetricsDispatcher(
2525
private val uploadConfiguration: DataUploadConfiguration?,
2626
private val filePersistenceConfig: FilePersistenceConfig,
2727
private val internalLogger: InternalLogger,
28-
private val dateTimeProvider: TimeProvider
28+
private val timeProvider: TimeProvider
2929

3030
) : MetricsDispatcher, ProcessLifecycleMonitor.Callback {
3131

@@ -90,7 +90,7 @@ internal class BatchMetricsDispatcher(
9090
numPendingBatches: Int
9191
): Map<String, Any?>? {
9292
val fileCreationTimestamp = file.nameAsTimestampSafe(internalLogger) ?: return null
93-
val fileAgeInMillis = dateTimeProvider.getDeviceTimestamp() - fileCreationTimestamp
93+
val fileAgeInMillis = timeProvider.getDeviceTimestamp() - fileCreationTimestamp
9494
if (fileAgeInMillis < 0) {
9595
// the device time was manually modified or the time zone changed
9696
// we are dropping this metric to not skew our charts

0 commit comments

Comments
 (0)