Skip to content

Commit aeffdcc

Browse files
Merge pull request #2959 from DataDog/aleksandr-gringauz/RUM-12046/fix-synthetics-rum-association-in-benchmark-app
RUM-12046: Pass synthetic ids to RUM earlier in benchmark app
2 parents d493283 + 63b103b commit aeffdcc

File tree

6 files changed

+31
-10
lines changed

6 files changed

+31
-10
lines changed

features/dd-sdk-android-rum/api/apiSurface

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -167,6 +167,7 @@ class com.datadog.android.rum._RumInternalProxy
167167
fun setInternalViewAttribute(String, Any?)
168168
fun setSyntheticsAttribute(String?, String?)
169169
fun enableJankStatsTracking(android.app.Activity)
170+
fun setSyntheticsAttributeFromIntent(android.content.Intent)
170171
companion object
171172
fun setTelemetryConfigurationEventMapper(com.datadog.android.rum.RumConfiguration.Builder, com.datadog.android.event.EventMapper<com.datadog.android.telemetry.model.TelemetryConfigurationEvent>): com.datadog.android.rum.RumConfiguration.Builder
172173
fun setAdditionalConfiguration(com.datadog.android.rum.RumConfiguration.Builder, Map<String, Any>): com.datadog.android.rum.RumConfiguration.Builder

features/dd-sdk-android-rum/api/dd-sdk-android-rum.api

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -251,6 +251,7 @@ public final class com/datadog/android/rum/_RumInternalProxy {
251251
public final fun enableJankStatsTracking (Landroid/app/Activity;)V
252252
public final fun setInternalViewAttribute (Ljava/lang/String;Ljava/lang/Object;)V
253253
public final fun setSyntheticsAttribute (Ljava/lang/String;Ljava/lang/String;)V
254+
public final fun setSyntheticsAttributeFromIntent (Landroid/content/Intent;)V
254255
public final fun updateExternalRefreshRate (D)V
255256
public final fun updatePerformanceMetric (Lcom/datadog/android/rum/RumPerformanceMetric;D)V
256257
}

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -76,7 +76,7 @@ class _RumInternalProxy internal constructor(private val rumMonitor: AdvancedRum
7676
rumMonitor.enableJankStatsTracking(activity)
7777
}
7878

79-
internal fun setSyntheticsAttributeFromIntent(intent: Intent) {
79+
fun setSyntheticsAttributeFromIntent(intent: Intent) {
8080
@Suppress("TooGenericExceptionCaught")
8181
val extras = try { intent.extras } catch (_: Exception) { null }
8282
val testId = extras?.getString("_dd.synthetics.test_id")

sample/benchmark/src/main/java/com/datadog/benchmark/sample/DatadogFeaturesInitializer.kt

Lines changed: 14 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -6,12 +6,14 @@
66

77
package com.datadog.benchmark.sample
88

9+
import android.content.Intent
910
import com.datadog.android.api.SdkCore
1011
import com.datadog.android.compose.enableComposeActionTracking
1112
import com.datadog.android.log.Logs
1213
import com.datadog.android.log.LogsConfiguration
1314
import com.datadog.android.rum.Rum
1415
import com.datadog.android.rum.RumConfiguration
16+
import com.datadog.android.rum.RumMonitor
1517
import com.datadog.android.rum.tracking.NavigationViewTrackingStrategy
1618
import com.datadog.android.rum.tracking.ViewTrackingStrategy
1719
import com.datadog.android.sessionreplay.SessionReplay
@@ -39,11 +41,12 @@ import javax.inject.Singleton
3941
@Singleton
4042
@Suppress("TooManyFunctions")
4143
internal class DatadogFeaturesInitializer @Inject constructor(
42-
private val sdkCore: Lazy<SdkCore>
44+
private val sdkCore: Lazy<SdkCore>,
45+
private val rumMonitor: Lazy<RumMonitor>
4346
) {
4447
private var isInitialized = false
4548

46-
fun initialize(config: BenchmarkConfig) {
49+
fun initialize(config: BenchmarkConfig, intent: Intent) {
4750
if (config.run == SyntheticsRun.Baseline) {
4851
return
4952
}
@@ -54,7 +57,7 @@ internal class DatadogFeaturesInitializer @Inject constructor(
5457
isInitialized = true
5558

5659
if (needToEnableRum(config)) {
57-
enableRum(config)
60+
enableRum(config = config, intent = intent)
5861
}
5962

6063
if (needToEnableLogs(config)) {
@@ -149,9 +152,16 @@ internal class DatadogFeaturesInitializer @Inject constructor(
149152
}
150153
}
151154

152-
private fun enableRum(config: BenchmarkConfig) {
155+
private fun enableRum(config: BenchmarkConfig, intent: Intent) {
153156
val rumConfig = createRumConfiguration(config)
154157
Rum.enable(rumConfig, sdkCore = sdkCore.get())
158+
159+
/**
160+
* We set synthetic test attributes now instead of waiting for them to be automatically
161+
* extracted by the sdk because the Activity for the test scenario will not have
162+
* the necessary attributes in the intent.
163+
*/
164+
rumMonitor.get()._getInternal()?.setSyntheticsAttributeFromIntent(intent)
155165
}
156166

157167
private fun isSessionReplayScenario(config: BenchmarkConfig) = when (config.scenario) {

sample/benchmark/src/main/java/com/datadog/benchmark/sample/activities/LaunchActivity.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -49,7 +49,7 @@ internal class LaunchActivity : AppCompatActivity() {
4949
* have [SyntheticsRun.Instrumented] or [SyntheticsRun.Baseline] only in [LaunchActivity.onCreate].
5050
* It is derived from intent extras.
5151
*/
52-
benchmarkFeaturesInitializer.initialize(config)
52+
benchmarkFeaturesInitializer.initialize(config = config, intent = intent)
5353

5454
initializeCoil()
5555

sample/benchmark/src/test/java/com/datadog/benchmark/sample/config/DatadogFeaturesInitializerTest.kt

Lines changed: 13 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,8 @@ package com.datadog.benchmark.sample.config
99
import com.datadog.android.api.SdkCore
1010
import com.datadog.android.log.Logs
1111
import com.datadog.android.rum.Rum
12+
import com.datadog.android.rum.RumMonitor
13+
import com.datadog.android.rum._RumInternalProxy
1214
import com.datadog.android.sessionreplay.SessionReplay
1315
import com.datadog.benchmark.sample.DatadogFeaturesInitializer
1416
import fr.xgouchet.elmyr.junit5.ForgeExtension
@@ -18,11 +20,10 @@ import org.junit.jupiter.api.extension.Extensions
1820
import org.mockito.Mock
1921
import org.mockito.MockedStatic
2022
import org.mockito.Mockito
23+
import org.mockito.Mockito.mock
2124
import org.mockito.junit.jupiter.MockitoExtension
2225
import org.mockito.junit.jupiter.MockitoSettings
2326
import org.mockito.kotlin.any
24-
import org.mockito.kotlin.verify
25-
import org.mockito.kotlin.verifyNoInteractions
2627
import org.mockito.quality.Strictness
2728

2829
@Extensions(
@@ -102,9 +103,17 @@ class DatadogFeaturesInitializerTest {
102103
Mockito.mockStatic(Rum::class.java).use { rumStatic ->
103104
Mockito.mockStatic(Logs::class.java).use { logsStatic ->
104105
// When
106+
val mockMonitor = mock<RumMonitor>()
107+
class StubRumMonitor : RumMonitor by mockMonitor {
108+
override fun _getInternal(): _RumInternalProxy? {
109+
return null
110+
}
111+
}
112+
105113
DatadogFeaturesInitializer(
106-
sdkCore = { mockSdkCore }
107-
).initialize(config)
114+
sdkCore = { mockSdkCore },
115+
rumMonitor = { StubRumMonitor() }
116+
).initialize(config, mock())
108117

109118
// Then
110119
thenBlock(MockedStatics(sessionReplayStatic, rumStatic, logsStatic))

0 commit comments

Comments
 (0)