Skip to content

Commit da5d836

Browse files
committed
Merge branch 'develop' into jward/RUM-8546-first-build-complete
2 parents c6bf970 + 30755a2 commit da5d836

File tree

21 files changed

+514
-190
lines changed

21 files changed

+514
-190
lines changed

dd-sdk-android-core/api/apiSurface

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,8 @@ object com.datadog.android.Datadog
77
fun setVerbosity(Int)
88
fun getVerbosity(): Int
99
fun setTrackingConsent(com.datadog.android.privacy.TrackingConsent, com.datadog.android.api.SdkCore = getInstance())
10-
fun setUserInfo(String? = null, String? = null, String? = null, Map<String, Any?> = emptyMap(), com.datadog.android.api.SdkCore = getInstance())
10+
fun setUserInfo(String, String? = null, String? = null, Map<String, Any?> = emptyMap(), com.datadog.android.api.SdkCore = getInstance())
11+
DEPRECATED fun setUserInfo(String? = null, String? = null, String? = null, Map<String, Any?> = emptyMap(), com.datadog.android.api.SdkCore = getInstance())
1112
fun addUserProperties(Map<String, Any?>, com.datadog.android.api.SdkCore = getInstance())
1213
fun clearAllData(com.datadog.android.api.SdkCore = getInstance())
1314
fun _internalProxy(String? = null): _InternalProxy

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

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -30,13 +30,19 @@ public final class com/datadog/android/Datadog {
3030
public static final fun setTrackingConsent (Lcom/datadog/android/privacy/TrackingConsent;)V
3131
public static final fun setTrackingConsent (Lcom/datadog/android/privacy/TrackingConsent;Lcom/datadog/android/api/SdkCore;)V
3232
public static synthetic fun setTrackingConsent$default (Lcom/datadog/android/privacy/TrackingConsent;Lcom/datadog/android/api/SdkCore;ILjava/lang/Object;)V
33-
public static final fun setUserInfo ()V
3433
public static final fun setUserInfo (Ljava/lang/String;)V
3534
public static final fun setUserInfo (Ljava/lang/String;Ljava/lang/String;)V
3635
public static final fun setUserInfo (Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)V
3736
public static final fun setUserInfo (Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/util/Map;)V
3837
public static final fun setUserInfo (Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/util/Map;Lcom/datadog/android/api/SdkCore;)V
3938
public static synthetic fun setUserInfo$default (Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/util/Map;Lcom/datadog/android/api/SdkCore;ILjava/lang/Object;)V
39+
public static final fun setUserInfoDeprecated ()V
40+
public static final fun setUserInfoDeprecated (Ljava/lang/String;)V
41+
public static final fun setUserInfoDeprecated (Ljava/lang/String;Ljava/lang/String;)V
42+
public static final fun setUserInfoDeprecated (Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)V
43+
public static final fun setUserInfoDeprecated (Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/util/Map;)V
44+
public static final fun setUserInfoDeprecated (Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/util/Map;Lcom/datadog/android/api/SdkCore;)V
45+
public static synthetic fun setUserInfoDeprecated$default (Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/util/Map;Lcom/datadog/android/api/SdkCore;ILjava/lang/Object;)V
4046
public static final fun setVerbosity (I)V
4147
public static final fun stopInstance ()V
4248
public static final fun stopInstance (Ljava/lang/String;)V

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

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -236,6 +236,29 @@ object Datadog {
236236
sdkCore.setTrackingConsent(consent)
237237
}
238238

239+
/**
240+
* Sets the user information.
241+
*
242+
* @param id a unique user identifier (relevant to your business domain)
243+
* @param name (nullable) the user name or alias
244+
* @param email (nullable) the user email
245+
* @param extraInfo additional information. An extra information can be
246+
* nested up to 8 levels deep. Keys using more than 8 levels will be sanitized by SDK.
247+
* @param sdkCore SDK instance to set user info in. If not provided, default SDK instance
248+
* will be used.
249+
*/
250+
@JvmStatic
251+
@JvmOverloads
252+
fun setUserInfo(
253+
id: String,
254+
name: String? = null,
255+
email: String? = null,
256+
extraInfo: Map<String, Any?> = emptyMap(),
257+
sdkCore: SdkCore = getInstance()
258+
) {
259+
sdkCore.setUserInfo(id, name, email, extraInfo)
260+
}
261+
239262
/**
240263
* Sets the user information.
241264
*
@@ -249,6 +272,8 @@ object Datadog {
249272
*/
250273
@JvmStatic
251274
@JvmOverloads
275+
@Deprecated("UserInfo id property is now mandatory.")
276+
@JvmName("setUserInfoDeprecated")
252277
fun setUserInfo(
253278
id: String? = null,
254279
name: String? = null,

dd-sdk-android-core/src/main/kotlin/com/datadog/android/core/configuration/BatchProcessingLevel.kt

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -23,9 +23,9 @@ enum class BatchProcessingLevel(val maxBatchesPerUploadJob: Int) {
2323
LOW(maxBatchesPerUploadJob = 1),
2424

2525
/**
26-
* 10 batches will be sent in a single upload cycle.
26+
* 20 batches will be sent in a single upload cycle.
2727
*/
28-
MEDIUM(maxBatchesPerUploadJob = 10),
28+
MEDIUM(maxBatchesPerUploadJob = 20),
2929

3030
/**
3131
* 100 batches will be sent in a single upload cycle.

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

Lines changed: 1 addition & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,6 @@ import com.datadog.android.core.internal.data.upload.DataOkHttpUploader.Companio
1212
import java.io.IOException
1313
import java.util.concurrent.ConcurrentHashMap
1414
import java.util.concurrent.TimeUnit
15-
import kotlin.math.max
1615
import kotlin.math.min
1716
import kotlin.math.roundToLong
1817

@@ -32,7 +31,7 @@ internal class DefaultUploadSchedulerStrategy(
3231
): Long {
3332
val previousDelay = currentDelays.getOrPut(featureName) { uploadConfiguration.defaultDelayMs }
3433
val updatedDelay = if (uploadAttempts > 0 && throwable == null && lastStatusCode == HTTP_ACCEPTED) {
35-
decreaseInterval(previousDelay)
34+
uploadConfiguration.minDelayMs
3635
} else {
3736
increaseInterval(previousDelay, throwable)
3837
}
@@ -44,12 +43,6 @@ internal class DefaultUploadSchedulerStrategy(
4443

4544
// region Internal
4645

47-
private fun decreaseInterval(previousDelay: Long): Long {
48-
@Suppress("UnsafeThirdPartyFunctionCall") // not a NaN
49-
val newDelayMs = (previousDelay * DECREASE_PERCENT).roundToLong()
50-
return max(uploadConfiguration.minDelayMs, newDelayMs)
51-
}
52-
5346
private fun increaseInterval(previousDelay: Long, throwable: Throwable?): Long {
5447
@Suppress("UnsafeThirdPartyFunctionCall") // not a NaN
5548
val newDelayMs = (previousDelay * INCREASE_PERCENT).roundToLong()
@@ -67,7 +60,6 @@ internal class DefaultUploadSchedulerStrategy(
6760
// endregion
6861

6962
companion object {
70-
internal const val DECREASE_PERCENT = 0.90
7163
internal const val INCREASE_PERCENT = 1.10
7264
internal val NETWORK_ERROR_DELAY_MS = TimeUnit.MINUTES.toMillis(1) // 1 minute delay
7365
}

dd-sdk-android-core/src/test/kotlin/com/datadog/android/core/internal/data/upload/DefaultUploadSchedulerStrategyTest.kt

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -26,15 +26,15 @@ import java.io.IOException
2626
@ForgeConfiguration(Configurator::class)
2727
internal class DefaultUploadSchedulerStrategyTest {
2828

29-
lateinit var testedStrategy: UploadSchedulerStrategy
29+
private lateinit var testedStrategy: UploadSchedulerStrategy
3030

3131
@Forgery
3232
lateinit var fakeConfiguration: DataUploadConfiguration
3333

3434
@StringForgery
3535
lateinit var fakeFeatureName: String
3636

37-
var initialDelay = 0L
37+
private var initialDelay = 0L
3838

3939
@BeforeEach
4040
fun `set up`() {
@@ -43,7 +43,7 @@ internal class DefaultUploadSchedulerStrategyTest {
4343
}
4444

4545
@Test
46-
fun `M decrease delay W getMsDelayUntilNextUpload() {successful attempt}`(
46+
fun `M decrease delay to minimum W getMsDelayUntilNextUpload() {successful attempt}`(
4747
@IntForgery(1, 128) repeats: Int,
4848
@IntForgery(1, 64) attempts: Int
4949
) {
@@ -54,8 +54,7 @@ internal class DefaultUploadSchedulerStrategyTest {
5454
repeat(repeats) { delay = testedStrategy.getMsDelayUntilNextUpload(fakeFeatureName, attempts, 202, null) }
5555

5656
// Then
57-
assertThat(delay).isLessThan(initialDelay)
58-
assertThat(delay).isGreaterThanOrEqualTo(fakeConfiguration.minDelayMs)
57+
assertThat(delay).isEqualTo(fakeConfiguration.minDelayMs)
5958
}
6059

6160
@Test

detekt_custom.yml

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -424,6 +424,7 @@ datadog:
424424
- "android.view.View.getChildAt(kotlin.Int)"
425425
- "android.view.View.getTag(kotlin.Int)"
426426
- "android.view.View.hashCode()"
427+
- "android.view.View.post(java.lang.Runnable?)"
427428
- "android.view.View.setTag(kotlin.Int, kotlin.Any?)"
428429
- "android.view.ViewGroup.findViewById(kotlin.Int)"
429430
- "android.view.ViewGroup.getChildAt(kotlin.Int)"
@@ -1097,6 +1098,7 @@ datadog:
10971098
- "kotlin.collections.emptySet()"
10981099
- "kotlin.collections.listOf(android.view.Window)"
10991100
- "kotlin.collections.listOf(com.datadog.android.api.InternalLogger.Target)"
1101+
- "kotlin.collections.listOf(com.datadog.android.rum.internal.vitals.FPSVitalListener)"
11001102
- "kotlin.collections.listOf(com.datadog.android.rum.model.ActionEvent.Interface)"
11011103
- "kotlin.collections.listOf(com.datadog.android.rum.model.ErrorEvent.Interface)"
11021104
- "kotlin.collections.listOf(com.datadog.android.rum.model.LongTaskEvent.Interface)"

features/dd-sdk-android-rum/src/main/kotlin/com/datadog/android/rum/internal/RumFeature.kt

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -60,6 +60,7 @@ import com.datadog.android.rum.internal.tracking.NoOpUserActionTrackingStrategy
6060
import com.datadog.android.rum.internal.tracking.UserActionTrackingStrategy
6161
import com.datadog.android.rum.internal.vitals.AggregatingVitalMonitor
6262
import com.datadog.android.rum.internal.vitals.CPUVitalReader
63+
import com.datadog.android.rum.internal.vitals.FPSVitalListener
6364
import com.datadog.android.rum.internal.vitals.JankStatsActivityLifecycleListener
6465
import com.datadog.android.rum.internal.vitals.MemoryVitalReader
6566
import com.datadog.android.rum.internal.vitals.NoOpVitalMonitor
@@ -416,7 +417,9 @@ internal class RumFeature(
416417
)
417418

418419
jankStatsActivityLifecycleListener = JankStatsActivityLifecycleListener(
419-
frameRateVitalMonitor,
420+
listOf(
421+
FPSVitalListener(frameRateVitalMonitor)
422+
),
420423
sdkCore.internalLogger
421424
)
422425
(appContext as? Application)?.registerActivityLifecycleCallbacks(
Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
/*
2+
* Unless explicitly stated otherwise all files in this repository are licensed under the Apache License Version 2.0.
3+
* This product includes software developed at Datadog (https://www.datadoghq.com/).
4+
* Copyright 2016-Present Datadog, Inc.
5+
*/
6+
package com.datadog.android.rum.internal.domain
7+
8+
import android.os.Build
9+
import androidx.annotation.RequiresApi
10+
11+
internal data class FrameMetricsData(
12+
@RequiresApi(Build.VERSION_CODES.N) var unknownDelayDuration: Long = 0L,
13+
@RequiresApi(Build.VERSION_CODES.N) var inputHandlingDuration: Long = 0L,
14+
@RequiresApi(Build.VERSION_CODES.N) var animationDuration: Long = 0L,
15+
@RequiresApi(Build.VERSION_CODES.N) var layoutMeasureDuration: Long = 0L,
16+
@RequiresApi(Build.VERSION_CODES.N) var drawDuration: Long = 0L,
17+
@RequiresApi(Build.VERSION_CODES.N) var syncDuration: Long = 0L,
18+
@RequiresApi(Build.VERSION_CODES.N) var commandIssueDuration: Long = 0L,
19+
@RequiresApi(Build.VERSION_CODES.N) var swapBuffersDuration: Long = 0L,
20+
@RequiresApi(Build.VERSION_CODES.N) var totalDuration: Long = 0L,
21+
@RequiresApi(Build.VERSION_CODES.N) var firstDrawFrame: Boolean = false,
22+
@RequiresApi(Build.VERSION_CODES.O) var intendedVsyncTimestamp: Long = 0L,
23+
@RequiresApi(Build.VERSION_CODES.O) var vsyncTimestamp: Long = 0L,
24+
@RequiresApi(Build.VERSION_CODES.S) var gpuDuration: Long = 0L,
25+
@RequiresApi(Build.VERSION_CODES.S) var deadline: Long = 0L,
26+
var displayRefreshRate: Double = SIXTY_FPS
27+
) {
28+
companion object {
29+
private const val SIXTY_FPS: Double = 60.0
30+
}
31+
}

features/dd-sdk-android-rum/src/main/kotlin/com/datadog/android/rum/internal/domain/scope/RumViewScope.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -278,7 +278,7 @@ internal open class RumViewScope(
278278
internalLogger.log(
279279
InternalLogger.Level.DEBUG,
280280
InternalLogger.Target.USER,
281-
{ ADDING_VIEW_LOADING_TIME_DEBUG_MESSAGE_FORMAT.format(Locale.US, viewLoadingTime, viewName) }
281+
{ ADDING_VIEW_LOADING_TIME_DEBUG_MESSAGE_FORMAT.format(Locale.US, newLoadingTime, viewName) }
282282
)
283283
internalLogger.logApiUsage {
284284
InternalTelemetryEvent.ApiUsage.AddViewLoadingTime(

0 commit comments

Comments
 (0)