Skip to content

Commit 50827ee

Browse files
committed
RUM-3668 update sample and fix configuration
1 parent 7be245c commit 50827ee

8 files changed

Lines changed: 111 additions & 14 deletions

File tree

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

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -71,7 +71,6 @@ internal constructor(
7171

7272
private var coreConfig = DEFAULT_CORE_CONFIG
7373
private var crashReportsEnabled: Boolean = true
74-
private var backpressureStrategy: BackPressureStrategy = DEFAULT_BACKPRESSURE_STRATEGY
7574

7675
internal var hostsSanitizer = HostsSanitizer()
7776

@@ -256,7 +255,7 @@ internal constructor(
256255
* 1024 items)
257256
*/
258257
fun setBackpressureStrategy(backpressureStrategy: BackPressureStrategy): Builder {
259-
this.backpressureStrategy = backpressureStrategy
258+
coreConfig = coreConfig.copy(backpressureStrategy = backpressureStrategy)
260259
return this
261260
}
262261

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

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -79,9 +79,10 @@ internal class BackPressuredBlockingQueue<E : Any>(
7979
private fun onItemDropped(item: E) {
8080
backPressureStrategy.onItemDropped(item)
8181

82+
// Note, do not send this to telemetry as it might cause a stack overflow
8283
logger.log(
8384
level = InternalLogger.Level.ERROR,
84-
targets = listOf(InternalLogger.Target.MAINTAINER, InternalLogger.Target.TELEMETRY),
85+
target = InternalLogger.Target.MAINTAINER,
8586
messageBuilder = { "Dropped item in BackPressuredBlockingQueue queue: $item" },
8687
throwable = null,
8788
onlyOnce = false,

dd-sdk-android-core/src/test/kotlin/com/datadog/android/core/configuration/ConfigurationBuilderTest.kt

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@ import com.datadog.tools.unit.extensions.config.TestConfiguration
1919
import fr.xgouchet.elmyr.Forge
2020
import fr.xgouchet.elmyr.annotation.BoolForgery
2121
import fr.xgouchet.elmyr.annotation.Forgery
22+
import fr.xgouchet.elmyr.annotation.IntForgery
2223
import fr.xgouchet.elmyr.annotation.StringForgery
2324
import fr.xgouchet.elmyr.junit5.ForgeConfiguration
2425
import fr.xgouchet.elmyr.junit5.ForgeExtension
@@ -389,6 +390,32 @@ internal class ConfigurationBuilderTest {
389390
)
390391
}
391392

393+
@Test
394+
fun `𝕄 build config with BackPressure strategy 𝕎 setBackpressureStrategy() and build()`(
395+
@IntForgery capacity: Int,
396+
@Forgery mitigation: BackPressureMitigation
397+
) {
398+
// Given
399+
val fakeBackpressureStrategy = BackPressureStrategy(
400+
capacity,
401+
mock<() -> Unit>(),
402+
mock<(Any) -> Unit>(),
403+
mitigation
404+
)
405+
406+
// When
407+
val config = testedBuilder
408+
.setBackpressureStrategy(fakeBackpressureStrategy)
409+
.build()
410+
411+
// Then
412+
assertThat(config.coreConfig).isEqualTo(
413+
Configuration.DEFAULT_CORE_CONFIG.copy(
414+
backpressureStrategy = fakeBackpressureStrategy
415+
)
416+
)
417+
}
418+
392419
companion object {
393420
val logger = InternalLoggerTestConfiguration()
394421

sample/kotlin/src/main/kotlin/com/datadog/android/sample/SampleApplication.kt

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,13 +5,16 @@
55
*/
66
package com.datadog.android.sample
77

8+
import android.annotation.SuppressLint
89
import android.app.Application
910
import android.content.Context
1011
import android.os.Build
1112
import android.util.Log
1213
import androidx.lifecycle.ViewModelProvider
1314
import com.datadog.android.Datadog
1415
import com.datadog.android.DatadogSite
16+
import com.datadog.android.core.configuration.BackPressureMitigation
17+
import com.datadog.android.core.configuration.BackPressureStrategy
1518
import com.datadog.android.core.configuration.BatchSize
1619
import com.datadog.android.core.configuration.Configuration
1720
import com.datadog.android.core.configuration.UploadFrequency
@@ -236,6 +239,7 @@ class SampleApplication : Application() {
236239
.build()
237240
}
238241

242+
@SuppressLint("LogNotTimber")
239243
private fun createDatadogConfiguration(): Configuration {
240244
val configBuilder = Configuration.Builder(
241245
clientToken = BuildConfig.DD_CLIENT_TOKEN,
@@ -252,6 +256,15 @@ class SampleApplication : Application() {
252256
Timber.e("Error setting site to ${BuildConfig.DD_SITE_NAME}")
253257
}
254258

259+
configBuilder.setBackpressureStrategy(
260+
BackPressureStrategy(
261+
32,
262+
{ Log.w("BackPressure", "THRESHOLD REACHED!") },
263+
{ Log.e("BackPressure", "ITEM DROPPED $it!") },
264+
BackPressureMitigation.IGNORE_NEWEST
265+
)
266+
)
267+
255268
return configBuilder.build()
256269
}
257270

@@ -286,6 +299,7 @@ class SampleApplication : Application() {
286299

287300
companion object {
288301
private const val SAMPLE_IN_ALL_SESSIONS = 100f
302+
289303
init {
290304
System.loadLibrary("datadog-native-sample-lib")
291305
}

sample/kotlin/src/main/kotlin/com/datadog/android/sample/vitals/VitalsFragment.kt

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,7 @@ internal class VitalsFragment :
3939
rootView.findViewById<CheckBox>(R.id.vital_cpu).setOnCheckedChangeListener(this)
4040
rootView.findViewById<CheckBox>(R.id.vital_slow_frame_rate).setOnCheckedChangeListener(this)
4141
rootView.findViewById<CheckBox>(R.id.vital_memory).setOnCheckedChangeListener(this)
42+
rootView.findViewById<CheckBox>(R.id.vital_stress_test).setOnCheckedChangeListener(this)
4243
badView = rootView.findViewById(R.id.vital_slow_view)
4344
progressView = rootView.findViewById(R.id.progress)
4445
return rootView
@@ -79,13 +80,19 @@ internal class VitalsFragment :
7980
R.id.vital_cpu -> {
8081
viewModel.toggleHeavyComputation(isChecked)
8182
}
83+
8284
R.id.vital_slow_frame_rate -> {
8385
badView.setSlow(isChecked)
8486
viewModel.toggleForegroundTasks(isChecked)
8587
}
88+
8689
R.id.vital_memory -> {
8790
viewModel.toggleMemory(isChecked)
8891
}
92+
93+
R.id.vital_stress_test -> {
94+
viewModel.toggleStressTest(isChecked)
95+
}
8996
}
9097
}
9198

sample/kotlin/src/main/kotlin/com/datadog/android/sample/vitals/VitalsViewModel.kt

Lines changed: 31 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,10 +10,12 @@ import android.graphics.Bitmap
1010
import android.os.Handler
1111
import android.os.Looper
1212
import androidx.lifecycle.ViewModel
13+
import com.datadog.android.rum.GlobalRumMonitor
14+
import com.datadog.android.rum.RumActionType
1315
import timber.log.Timber
1416
import java.security.SecureRandom
1517

16-
@Suppress("MagicNumber")
18+
@Suppress("MagicNumber", "TooManyFunctions")
1719
internal class VitalsViewModel : ViewModel() {
1820

1921
private val rng = SecureRandom()
@@ -24,6 +26,7 @@ internal class VitalsViewModel : ViewModel() {
2426
private var isResumed = false
2527
private var isCpuUsageEnabled = false
2628
private var isMemoryUsageEnabled = false
29+
private var isStressTestEnabled = false
2730
private var isForegroundTasksEnabled = false
2831

2932
private val foregroundRunnable = object : Runnable {
@@ -79,6 +82,13 @@ internal class VitalsViewModel : ViewModel() {
7982
}
8083
}
8184

85+
fun toggleStressTest(enabled: Boolean) {
86+
isStressTestEnabled = enabled
87+
if (enabled) {
88+
stressTestRumEvents()
89+
}
90+
}
91+
8292
private fun startCpuThread() {
8393
Thread {
8494
while (isResumed && isCpuUsageEnabled) {
@@ -108,4 +118,24 @@ internal class VitalsViewModel : ViewModel() {
108118
Timber.i("Allocated ${bitmapList.size} bitmaps")
109119
}.start()
110120
}
121+
122+
private fun stressTestRumEvents() {
123+
val fflags = (0..128).associate {
124+
"ff.flag_$it" to rng.nextInt(4096)
125+
}
126+
Thread {
127+
while (isResumed && isStressTestEnabled) {
128+
// fflags.forEach { (k, v) ->
129+
// GlobalRumMonitor.get().addFeatureFlagEvaluation(k, v)
130+
// }
131+
GlobalRumMonitor.get().addFeatureFlagEvaluations(fflags)
132+
GlobalRumMonitor.get().addAction(
133+
RumActionType.CUSTOM,
134+
"custom action",
135+
emptyMap()
136+
)
137+
Thread.sleep(1)
138+
}
139+
}.start()
140+
}
111141
}

sample/kotlin/src/main/res/layout/fragment_vitals.xml

Lines changed: 17 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -68,13 +68,13 @@
6868
app:layout_constraintTop_toBottomOf="@id/progress"/>
6969

7070
<com.datadog.android.sample.vitals.BadView
71-
android:id="@+id/vital_slow_view"
72-
android:layout_width="match_parent"
73-
android:layout_height="wrap_content"
74-
app:layout_constraintStart_toStartOf="parent"
75-
app:layout_constraintEnd_toEndOf="parent"
76-
app:layout_constraintTop_toBottomOf="@id/vital_slow_frame_rate"
77-
/>
71+
android:id="@+id/vital_slow_view"
72+
android:layout_width="match_parent"
73+
android:layout_height="wrap_content"
74+
app:layout_constraintStart_toStartOf="parent"
75+
app:layout_constraintEnd_toEndOf="parent"
76+
app:layout_constraintTop_toBottomOf="@id/vital_slow_frame_rate"
77+
/>
7878

7979

8080
<androidx.appcompat.widget.AppCompatCheckBox
@@ -97,4 +97,14 @@
9797
app:layout_constraintEnd_toEndOf="parent"
9898
app:layout_constraintTop_toBottomOf="@id/vital_cpu"/>
9999

100+
<androidx.appcompat.widget.AppCompatCheckBox
101+
android:id="@+id/vital_stress_test"
102+
android:layout_width="wrap_content"
103+
android:layout_height="wrap_content"
104+
android:text="@string/button_stress_test_events"
105+
android:layout_margin="16dp"
106+
app:layout_constraintStart_toStartOf="parent"
107+
app:layout_constraintEnd_toEndOf="parent"
108+
app:layout_constraintTop_toBottomOf="@id/vital_memory"/>
109+
100110
</androidx.constraintlayout.widget.ConstraintLayout>

sample/kotlin/src/main/res/values/strings.xml

Lines changed: 12 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -48,7 +48,9 @@
4848
<string name="msg_network_request">Network Request (~1s)</string>
4949
<string name="msg_coroutine_operation">Coroutine operations (~5s)</string>
5050
<string name="msg_rum_use_cases">RUM use cases</string>
51-
<string name="msg_clear_all_data">Are you sure you want to clear all unsent data. You’ll lose any data still on disk. Note that this won’t delete data already sent to Datadog servers.</string>
51+
<string name="msg_clear_all_data">Are you sure you want to clear all unsent data. You’ll lose any data still on
52+
disk. Note that this won’t delete data already sent to Datadog servers.
53+
</string>
5254
<string name="msg_all_data_cleared">All unsent data has been cleared.</string>
5355

5456
<string name="button_send">Send</string>
@@ -65,6 +67,7 @@
6567
<string name="button_slow_frame_rate">Slow frame rate</string>
6668
<string name="button_high_cpu_usage">High CPU usage</string>
6769
<string name="button_high_memory_usage">High RAM usage</string>
70+
<string name="button_stress_test_events">Stress Test Events</string>
6871

6972
<string name="group_image_loader">Image Loader</string>
7073
<string name="group_data_source">Data Source</string>
@@ -112,7 +115,11 @@
112115
<string name="granted">GRANTED</string>
113116
<string name="not_granted">NOT GRANTED</string>
114117
<string name="text_view">Default Text View</string>
115-
<string name="ellipsize_text_view">Default Text View with some super long text for ellipsis. Default Text View with some super long text. Default Text View with some super long text. Default Text View with some super long text. Default Text View with some super long text. Default Text View with some super long text. Default Text View with some super long text.</string>
118+
<string name="ellipsize_text_view">Default Text View with some super long text for ellipsis. Default Text View with
119+
some super long text. Default Text View with some super long text. Default Text View with some super long text.
120+
Default Text View with some super long text. Default Text View with some super long text. Default Text View with
121+
some super long text.
122+
</string>
116123
<string name="material_text_view">Material Text View</string>
117124
<string name="app_compat_text_view">App Compat Text View</string>
118125
<string name="auto_complete_text_view">Default Auto Complete Text View</string>
@@ -142,7 +149,9 @@
142149
<string name="dropdowns_and_switchers_components">Dropdowns and Switchers Components</string>
143150
<string name="planet">Planet</string>
144151
<string name="sliders_and_steppers_components">Sliders and Steppers Components</string>
145-
<string name="random_text_value">Pellentesque pretium non urna ut laoreet. Vestibulum finibus porttitor sem, id dictum elit.</string>
152+
<string name="random_text_value">Pellentesque pretium non urna ut laoreet. Vestibulum finibus porttitor sem, id
153+
dictum elit.
154+
</string>
146155
<string name="different_fonts">Different Fonts</string>
147156
<string name="default_typeface_label">Default Typeface</string>
148157
<string name="sans_serif_typeface_label">Sans Serif Typeface</string>

0 commit comments

Comments
 (0)