Skip to content

Commit 795feec

Browse files
authored
Merge pull request #3000 from DataDog/aforsythe/RUM-12763/disable-jank-stats
fix: Add internal disableJankStats config option
2 parents d96dcda + 63c16f0 commit 795feec

File tree

7 files changed

+73
-9
lines changed

7 files changed

+73
-9
lines changed

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

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -174,6 +174,7 @@ class com.datadog.android.rum._RumInternalProxy
174174
fun setAdditionalConfiguration(com.datadog.android.rum.RumConfiguration.Builder, Map<String, Any>): com.datadog.android.rum.RumConfiguration.Builder
175175
fun setComposeActionTrackingStrategy(com.datadog.android.rum.RumConfiguration.Builder, com.datadog.android.rum.tracking.ActionTrackingStrategy): com.datadog.android.rum.RumConfiguration.Builder
176176
fun setRumSessionTypeOverride(com.datadog.android.rum.RumConfiguration.Builder, RumSessionType): com.datadog.android.rum.RumConfiguration.Builder
177+
fun setDisableJankStats(com.datadog.android.rum.RumConfiguration.Builder, Boolean): com.datadog.android.rum.RumConfiguration.Builder
177178
data class com.datadog.android.rum.configuration.SlowFramesConfiguration
178179
constructor(Int = DEFAULT_SLOW_FRAME_RECORDS_MAX_AMOUNT, Long = DEFAULT_FROZEN_FRAME_THRESHOLD_NS, Long = DEFAULT_CONTINUOUS_SLOW_FRAME_THRESHOLD_NS, Long = DEFAULT_FREEZE_DURATION_NS, Long = DEFAULT_VIEW_LIFETIME_THRESHOLD_NS)
179180
companion object

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
@@ -260,6 +260,7 @@ public final class com/datadog/android/rum/_RumInternalProxy {
260260
public final class com/datadog/android/rum/_RumInternalProxy$Companion {
261261
public final fun setAdditionalConfiguration (Lcom/datadog/android/rum/RumConfiguration$Builder;Ljava/util/Map;)Lcom/datadog/android/rum/RumConfiguration$Builder;
262262
public final fun setComposeActionTrackingStrategy (Lcom/datadog/android/rum/RumConfiguration$Builder;Lcom/datadog/android/rum/tracking/ActionTrackingStrategy;)Lcom/datadog/android/rum/RumConfiguration$Builder;
263+
public final fun setDisableJankStats (Lcom/datadog/android/rum/RumConfiguration$Builder;Z)Lcom/datadog/android/rum/RumConfiguration$Builder;
263264
public final fun setRumSessionTypeOverride (Lcom/datadog/android/rum/RumConfiguration$Builder;Lcom/datadog/android/rum/RumSessionType;)Lcom/datadog/android/rum/RumConfiguration$Builder;
264265
public final fun setTelemetryConfigurationEventMapper (Lcom/datadog/android/rum/RumConfiguration$Builder;Lcom/datadog/android/event/EventMapper;)Lcom/datadog/android/rum/RumConfiguration$Builder;
265266
}

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

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -423,5 +423,14 @@ data class RumConfiguration internal constructor(
423423
rumConfig = rumConfig.copy(rumSessionTypeOverride = rumSessionTypeOverride)
424424
return this
425425
}
426+
427+
/**
428+
* Disables JankStats tracking. This flag may be enabled by cross-platform SDKs where
429+
* native frame metrics are not meaningful.
430+
*/
431+
internal fun setDisableJankStats(disable: Boolean): Builder {
432+
rumConfig = rumConfig.copy(disableJankStats = disable)
433+
return this
434+
}
426435
}
427436
}

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

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -115,5 +115,12 @@ class _RumInternalProxy internal constructor(private val rumMonitor: AdvancedRum
115115
): Builder {
116116
return builder.setRumSessionTypeOverride(rumSessionTypeOverride)
117117
}
118+
119+
fun setDisableJankStats(
120+
builder: Builder,
121+
disable: Boolean
122+
): Builder {
123+
return builder.setDisableJankStats(disable)
124+
}
118125
}
119126
}

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

Lines changed: 12 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -239,13 +239,15 @@ internal class RumFeature(
239239
initializeVitalExecutorService(frequency)
240240
initializeCpuVitalMonitor(frequency)
241241
initializeMemoryVitalMonitor(frequency)
242-
initializeFrameStatesAggregator(
243-
application = appContext as? Application,
244-
listeners = listOfNotNull(
245-
initializeSlowFrameListener(slowFrameListenerConfiguration),
246-
initializeFPSVitalMonitor(frequency)
242+
if (!configuration.disableJankStats) {
243+
initializeFrameStatesAggregator(
244+
application = appContext as? Application,
245+
listeners = listOfNotNull(
246+
initializeSlowFrameListener(slowFrameListenerConfiguration),
247+
initializeFPSVitalMonitor(frequency)
248+
)
247249
)
248-
)
250+
}
249251
}
250252

251253
if (configuration.trackNonFatalAnrs) {
@@ -742,7 +744,8 @@ internal class RumFeature(
742744
val additionalConfig: Map<String, Any>,
743745
val trackAnonymousUser: Boolean,
744746
val rumSessionTypeOverride: RumSessionType?,
745-
val collectAccessibility: Boolean
747+
val collectAccessibility: Boolean,
748+
val disableJankStats: Boolean
746749
)
747750

748751
internal companion object {
@@ -794,7 +797,8 @@ internal class RumFeature(
794797
trackAnonymousUser = true,
795798
slowFramesConfiguration = null,
796799
rumSessionTypeOverride = null,
797-
collectAccessibility = false
800+
collectAccessibility = false,
801+
disableJankStats = false
798802
)
799803

800804
internal const val EVENT_MESSAGE_PROPERTY = "message"

features/dd-sdk-android-rum/src/test/kotlin/com/datadog/android/rum/internal/RumFeatureTest.kt

Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -326,6 +326,47 @@ internal class RumFeatureTest {
326326
assertThat(testedFeature.frameStatesAggregator).isNull()
327327
}
328328

329+
@Test
330+
fun `M frameStatesAggregator != null W initialize { frequency = AVERAGE }`() {
331+
// Given
332+
fakeConfiguration = fakeConfiguration.copy(
333+
vitalsMonitorUpdateFrequency = VitalsUpdateFrequency.AVERAGE
334+
)
335+
testedFeature = RumFeature(
336+
mockSdkCore,
337+
fakeApplicationId.toString(),
338+
fakeConfiguration,
339+
lateCrashReporterFactory = { mockLateCrashReporter }
340+
)
341+
342+
// When
343+
testedFeature.onInitialize(appContext.mockInstance)
344+
345+
// Then
346+
assertThat(testedFeature.frameStatesAggregator).isNotNull()
347+
}
348+
349+
@Test
350+
fun `M frameStatesAggregator == null W initialize { frequency = AVERAGE, disableJankStats = true }`() {
351+
// Given
352+
fakeConfiguration = fakeConfiguration.copy(
353+
vitalsMonitorUpdateFrequency = VitalsUpdateFrequency.AVERAGE,
354+
disableJankStats = true
355+
)
356+
testedFeature = RumFeature(
357+
mockSdkCore,
358+
fakeApplicationId.toString(),
359+
fakeConfiguration,
360+
lateCrashReporterFactory = { mockLateCrashReporter }
361+
)
362+
363+
// When
364+
testedFeature.onInitialize(appContext.mockInstance)
365+
366+
// Then
367+
assertThat(testedFeature.frameStatesAggregator).isNull()
368+
}
369+
329370
@Test
330371
fun `M set sample rate to 100 W initialize() {developer mode enabled}`() {
331372
// Given

features/dd-sdk-android-rum/src/test/kotlin/com/datadog/android/rum/utils/forge/ConfigurationRumForgeryFactory.kt

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -70,7 +70,8 @@ internal class ConfigurationRumForgeryFactory :
7070
composeActionTrackingStrategy = mock(),
7171
slowFramesConfiguration = forge.getForgery(),
7272
rumSessionTypeOverride = forge.aNullable { aValueFrom(RumSessionType::class.java) },
73-
collectAccessibility = forge.aBool()
73+
collectAccessibility = forge.aBool(),
74+
disableJankStats = false
7475
)
7576
}
7677
}

0 commit comments

Comments
 (0)