From 45623a06783ea7e4b6c461dd1ca07e3d5a0bacac Mon Sep 17 00:00:00 2001 From: Sergio Barrio Date: Tue, 10 Feb 2026 10:44:56 +0100 Subject: [PATCH] Make getMaxDisplayRefreshRate to use default Refresh Rate if supportedModes is empty --- packages/core/android/build.gradle | 1 + .../reactnative/DdSdkImplementation.kt | 2 +- .../com/datadog/reactnative/DdSdkTest.kt | 28 +++++++++++++++++++ 3 files changed, 30 insertions(+), 1 deletion(-) diff --git a/packages/core/android/build.gradle b/packages/core/android/build.gradle index d3f8eb3fa..4ff0a1d64 100644 --- a/packages/core/android/build.gradle +++ b/packages/core/android/build.gradle @@ -224,6 +224,7 @@ dependencies { testImplementation "com.github.xgouchet.Elmyr:jvm:1.3.1" testImplementation "org.mockito.kotlin:mockito-kotlin:5.1.0" testImplementation "org.jetbrains.kotlin:kotlin-reflect:$kotlin_version" + testImplementation("org.mockito:mockito-inline:5.2.0") unmock 'org.robolectric:android-all:4.4_r1-robolectric-r2' detektPlugins "io.gitlab.arturbosch.detekt:detekt-formatting:1.23.8" diff --git a/packages/core/android/src/main/kotlin/com/datadog/reactnative/DdSdkImplementation.kt b/packages/core/android/src/main/kotlin/com/datadog/reactnative/DdSdkImplementation.kt index 39861ac4b..1b488f3f9 100644 --- a/packages/core/android/src/main/kotlin/com/datadog/reactnative/DdSdkImplementation.kt +++ b/packages/core/android/src/main/kotlin/com/datadog/reactnative/DdSdkImplementation.kt @@ -397,7 +397,7 @@ class DdSdkImplementation( val dm = context?.getSystemService(Context.DISPLAY_SERVICE) as? DisplayManager ?: return 60.0 val display: Display = dm.getDisplay(Display.DEFAULT_DISPLAY) ?: return DEFAULT_REFRESH_HZ - return display.supportedModes.maxOf { it.refreshRate.toDouble() } + return display.supportedModes.maxOfOrNull { it.refreshRate.toDouble() } ?: DEFAULT_REFRESH_HZ } // endregion diff --git a/packages/core/android/src/test/kotlin/com/datadog/reactnative/DdSdkTest.kt b/packages/core/android/src/test/kotlin/com/datadog/reactnative/DdSdkTest.kt index 664c2a758..a55081c83 100644 --- a/packages/core/android/src/test/kotlin/com/datadog/reactnative/DdSdkTest.kt +++ b/packages/core/android/src/test/kotlin/com/datadog/reactnative/DdSdkTest.kt @@ -6,10 +6,13 @@ package com.datadog.reactnative +import android.content.Context import android.content.pm.PackageInfo +import android.hardware.display.DisplayManager import android.os.Looper import android.util.Log import android.view.Choreographer +import android.view.Display import com.datadog.android.DatadogSite import com.datadog.android.core.configuration.BatchProcessingLevel import com.datadog.android.core.configuration.BatchSize @@ -71,6 +74,8 @@ import org.junit.jupiter.params.provider.Arguments import org.junit.jupiter.params.provider.MethodSource import org.mockito.Answers import org.mockito.Mock +import org.mockito.Mockito.mock +import org.mockito.Mockito.`when` import org.mockito.junit.jupiter.MockitoExtension import org.mockito.junit.jupiter.MockitoSettings import org.mockito.kotlin.any @@ -3452,6 +3457,29 @@ internal class DdSdkTest { assertThat(frameTimeSeconds).isEqualTo(0.016, Offset.offset(0.001)) } + @Test + fun `M getMaxDisplayRefreshRate returns default when supportedModes is empty`() { + // Given + val mockContext = mock(Context::class.java) + val mockDisplayManager = mock(DisplayManager::class.java) + val mockDisplay = mock(Display::class.java) + + `when`(mockContext.getSystemService(Context.DISPLAY_SERVICE)).thenReturn(mockDisplayManager) + `when`(mockDisplayManager.getDisplay(Display.DEFAULT_DISPLAY)).thenReturn(mockDisplay) + `when`(mockDisplay.supportedModes).thenReturn(arrayOf()) + + // When + val result = testedBridgeSdk.normalizeFrameTime( + frameTimeSeconds = 0.016, + context = mockContext, + fpsBudget = null, + deviceDisplayFps = null + ) + + // Then + assertThat(result).isEqualTo(0.016, Offset.offset(0.001)) + } + // endregion // region Internal