Skip to content

Commit 176d0af

Browse files
committed
moved autoTransactionDeadlineTimeoutMillis to SentryOptions
small cleanup updated changelog
1 parent 282e7b1 commit 176d0af

File tree

13 files changed

+132
-181
lines changed

13 files changed

+132
-181
lines changed

CHANGELOG.md

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,10 @@
22

33
## Unreleased
44

5+
### Features
6+
7+
- Add autoTransactionDeadlineTimeoutMillis option ([#4555](https://github.com/getsentry/sentry-java/pull/4555))
8+
59
### Fixes
610

711
- Allow multiple UncaughtExceptionHandlerIntegrations to be active at the same time ([#4462](https://github.com/getsentry/sentry-java/pull/4462))

IMPLEMENTATION_SUMMARY.md

Lines changed: 0 additions & 87 deletions
This file was deleted.

sentry-android-core/src/main/java/io/sentry/android/core/ActivityLifecycleIntegration.java

Lines changed: 3 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -192,13 +192,9 @@ private void startTracing(final @NotNull Activity activity) {
192192

193193
// Set deadline timeout based on configured option
194194
final long deadlineTimeoutMillis = options.getAutoTransactionDeadlineTimeoutMillis();
195-
if (deadlineTimeoutMillis <= 0) {
196-
// No deadline when zero or negative value is set
197-
transactionOptions.setDeadlineTimeout(null);
198-
} else {
199-
// Use configured timeout when positive value is set
200-
transactionOptions.setDeadlineTimeout(deadlineTimeoutMillis);
201-
}
195+
// No deadline when zero or negative value is set
196+
transactionOptions.setDeadlineTimeout(
197+
deadlineTimeoutMillis <= 0 ? null : deadlineTimeoutMillis);
202198

203199
if (options.isEnableActivityLifecycleTracingAutoFinish()) {
204200
transactionOptions.setIdleTimeout(options.getIdleTimeout());

sentry-android-core/src/main/java/io/sentry/android/core/SentryAndroidOptions.java

Lines changed: 0 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -173,16 +173,6 @@ public final class SentryAndroidOptions extends SentryOptions {
173173
*/
174174
private boolean enableAutoTraceIdGeneration = true;
175175

176-
/**
177-
* Controls the deadline timeout in milliseconds for automatic transactions. When set to a
178-
* positive value, that value is used as the deadline timeout. When set to a value less than or
179-
* equal to 0, no deadline is applied and transactions will only finish when explicitly finished
180-
* or when the activity lifecycle ends.
181-
*
182-
* <p>Default is 30000 (30 seconds).
183-
*/
184-
private long autoTransactionDeadlineTimeoutMillis = 30000;
185-
186176
public interface BeforeCaptureCallback {
187177

188178
/**
@@ -619,12 +609,4 @@ public boolean isEnableAutoTraceIdGeneration() {
619609
public void setEnableAutoTraceIdGeneration(final boolean enableAutoTraceIdGeneration) {
620610
this.enableAutoTraceIdGeneration = enableAutoTraceIdGeneration;
621611
}
622-
623-
public long getAutoTransactionDeadlineTimeoutMillis() {
624-
return autoTransactionDeadlineTimeoutMillis;
625-
}
626-
627-
public void setAutoTransactionDeadlineTimeoutMillis(long autoTransactionDeadlineTimeoutMillis) {
628-
this.autoTransactionDeadlineTimeoutMillis = autoTransactionDeadlineTimeoutMillis;
629-
}
630612
}

sentry-android-core/src/main/java/io/sentry/android/core/internal/gestures/SentryGestureListener.java

Lines changed: 3 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -252,13 +252,9 @@ private void startTracing(final @NotNull UiElement target, final @NotNull Gestur
252252

253253
// Set deadline timeout based on configured option
254254
final long deadlineTimeoutMillis = options.getAutoTransactionDeadlineTimeoutMillis();
255-
if (deadlineTimeoutMillis <= 0) {
256-
// No deadline when zero or negative value is set
257-
transactionOptions.setDeadlineTimeout(null);
258-
} else {
259-
// Use configured timeout when positive value is set
260-
transactionOptions.setDeadlineTimeout(deadlineTimeoutMillis);
261-
}
255+
// No deadline when zero or negative value is set
256+
transactionOptions.setDeadlineTimeout(
257+
deadlineTimeoutMillis <= 0 ? null : deadlineTimeoutMillis);
262258

263259
transactionOptions.setIdleTimeout(options.getIdleTimeout());
264260
transactionOptions.setTrimEnd(true);

sentry-android-core/src/test/java/io/sentry/android/core/ActivityLifecycleIntegrationTest.kt

Lines changed: 8 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -230,12 +230,9 @@ class ActivityLifecycleIntegrationTest {
230230
val sut = fixture.getSut()
231231
fixture.options.tracesSampleRate = 1.0
232232
fixture.options.autoTransactionDeadlineTimeoutMillis = 60000L // 60 seconds
233-
sut.register(fixture.scopes, fixture.options)
234-
235-
setAppStartTime()
236233

237-
val activity = mock<Activity>()
238-
sut.onActivityCreated(activity, fixture.bundle)
234+
sut.register(fixture.scopes, fixture.options)
235+
sut.onActivityCreated(mock(), fixture.bundle)
239236

240237
verify(fixture.scopes)
241238
.startTransaction(
@@ -251,12 +248,9 @@ class ActivityLifecycleIntegrationTest {
251248
val sut = fixture.getSut()
252249
fixture.options.tracesSampleRate = 1.0
253250
fixture.options.autoTransactionDeadlineTimeoutMillis = 0L // No deadline
254-
sut.register(fixture.scopes, fixture.options)
255-
256-
setAppStartTime()
257251

258-
val activity = mock<Activity>()
259-
sut.onActivityCreated(activity, fixture.bundle)
252+
sut.register(fixture.scopes, fixture.options)
253+
sut.onActivityCreated(mock(), fixture.bundle)
260254

261255
verify(fixture.scopes)
262256
.startTransaction(
@@ -272,12 +266,9 @@ class ActivityLifecycleIntegrationTest {
272266
val sut = fixture.getSut()
273267
fixture.options.tracesSampleRate = 1.0
274268
fixture.options.autoTransactionDeadlineTimeoutMillis = -1L // No deadline
275-
sut.register(fixture.scopes, fixture.options)
276-
277-
setAppStartTime()
278269

279-
val activity = mock<Activity>()
280-
sut.onActivityCreated(activity, fixture.bundle)
270+
sut.register(fixture.scopes, fixture.options)
271+
sut.onActivityCreated(mock(), fixture.bundle)
281272

282273
verify(fixture.scopes)
283274
.startTransaction(
@@ -293,12 +284,9 @@ class ActivityLifecycleIntegrationTest {
293284
val sut = fixture.getSut()
294285
fixture.options.tracesSampleRate = 1.0
295286
// Don't set autoTransactionDeadlineTimeoutMillis, use default (30000)
296-
sut.register(fixture.scopes, fixture.options)
297-
298-
setAppStartTime()
299287

300-
val activity = mock<Activity>()
301-
sut.onActivityCreated(activity, fixture.bundle)
288+
sut.register(fixture.scopes, fixture.options)
289+
sut.onActivityCreated(mock(), fixture.bundle)
302290

303291
verify(fixture.scopes)
304292
.startTransaction(

sentry-android-core/src/test/java/io/sentry/android/core/ManifestMetadataReaderTest.kt

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1106,6 +1106,18 @@ class ManifestMetadataReaderTest {
11061106
assertEquals(expectedTimeout.toLong(), fixture.options.autoTransactionDeadlineTimeoutMillis)
11071107
}
11081108

1109+
@Test
1110+
fun `applyMetadata reads autoTransactionDeadlineTimeoutMillis from metadata and keep default value if not found`() {
1111+
// Arrange
1112+
val context = fixture.getContext()
1113+
1114+
// Act
1115+
ManifestMetadataReader.applyMetadata(context, fixture.options, fixture.buildInfoProvider)
1116+
1117+
// Assert
1118+
assertEquals(30000L, fixture.options.autoTransactionDeadlineTimeoutMillis)
1119+
}
1120+
11091121
@Test
11101122
fun `applyMetadata without specifying idleTimeout, stays default`() {
11111123
// Arrange

sentry-android-core/src/test/java/io/sentry/android/core/SentryAndroidOptionsTest.kt

Lines changed: 0 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -181,33 +181,6 @@ class SentryAndroidOptionsTest {
181181
)
182182
}
183183

184-
@Test
185-
fun `autoTransactionDeadlineTimeoutMillis option defaults to 30000`() {
186-
val sentryOptions = SentryAndroidOptions()
187-
assertEquals(30000L, sentryOptions.autoTransactionDeadlineTimeoutMillis)
188-
}
189-
190-
@Test
191-
fun `autoTransactionDeadlineTimeoutMillis option can be changed`() {
192-
val sentryOptions = SentryAndroidOptions()
193-
sentryOptions.autoTransactionDeadlineTimeoutMillis = 60000L
194-
assertEquals(60000L, sentryOptions.autoTransactionDeadlineTimeoutMillis)
195-
}
196-
197-
@Test
198-
fun `autoTransactionDeadlineTimeoutMillis option can be set to zero value`() {
199-
val sentryOptions = SentryAndroidOptions()
200-
sentryOptions.autoTransactionDeadlineTimeoutMillis = 0L
201-
assertEquals(0L, sentryOptions.autoTransactionDeadlineTimeoutMillis)
202-
}
203-
204-
@Test
205-
fun `autoTransactionDeadlineTimeoutMillis option can be set to negative value`() {
206-
val sentryOptions = SentryAndroidOptions()
207-
sentryOptions.autoTransactionDeadlineTimeoutMillis = -1L
208-
assertEquals(-1L, sentryOptions.autoTransactionDeadlineTimeoutMillis)
209-
}
210-
211184
private class CustomDebugImagesLoader : IDebugImagesLoader {
212185
override fun loadDebugImages(): List<DebugImage>? = null
213186

sentry-android-navigation/src/main/java/io/sentry/android/navigation/SentryNavigationListener.kt

Lines changed: 3 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -133,21 +133,9 @@ constructor(
133133
it.idleTimeout = scopes.options.idleTimeout
134134

135135
// Set deadline timeout based on configured option
136-
val androidOptions =
137-
if (scopes.options is io.sentry.android.core.SentryAndroidOptions) {
138-
scopes.options as io.sentry.android.core.SentryAndroidOptions
139-
} else {
140-
null
141-
}
142-
val deadlineTimeoutMillis =
143-
androidOptions?.autoTransactionDeadlineTimeoutMillis
144-
?: TransactionOptions.DEFAULT_DEADLINE_TIMEOUT_AUTO_TRANSACTION
145-
146-
it.deadlineTimeout =
147-
when {
148-
deadlineTimeoutMillis <= 0 -> null // No deadline when zero or negative value is set
149-
else -> deadlineTimeoutMillis // Use configured timeout when positive value is set
150-
}
136+
val deadlineTimeoutMillis = scopes.options.autoTransactionDeadlineTimeoutMillis
137+
// No deadline when zero or negative value is set
138+
it.deadlineTimeout = if (deadlineTimeoutMillis <= 0) null else deadlineTimeoutMillis
151139

152140
it.isTrimEnd = true
153141
}

sentry-android-navigation/src/test/java/io/sentry/android/navigation/SentryNavigationListenerTest.kt

Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -399,6 +399,48 @@ class SentryNavigationListenerTest {
399399
)
400400
}
401401

402+
@Test
403+
fun `Navigation listener uses custom deadline timeout when set to positive value`() {
404+
val sut = fixture.getSut()
405+
fixture.options.autoTransactionDeadlineTimeoutMillis = 60000L
406+
407+
sut.onDestinationChanged(fixture.navController, fixture.destination, null)
408+
409+
verify(fixture.scopes)
410+
.startTransaction(
411+
any<TransactionContext>(),
412+
check<TransactionOptions> { options -> assertEquals(60000L, options.deadlineTimeout) },
413+
)
414+
}
415+
416+
@Test
417+
fun `Navigation listener uses no deadline timeout when set to zero`() {
418+
val sut = fixture.getSut()
419+
fixture.options.autoTransactionDeadlineTimeoutMillis = 0L
420+
421+
sut.onDestinationChanged(fixture.navController, fixture.destination, null)
422+
423+
verify(fixture.scopes)
424+
.startTransaction(
425+
any<TransactionContext>(),
426+
check<TransactionOptions> { options -> assertNull(options.deadlineTimeout) },
427+
)
428+
}
429+
430+
@Test
431+
fun `Navigation listener uses no deadline timeout when set to negative value`() {
432+
val sut = fixture.getSut()
433+
fixture.options.autoTransactionDeadlineTimeoutMillis = -1L
434+
435+
sut.onDestinationChanged(fixture.navController, fixture.destination, null)
436+
437+
verify(fixture.scopes)
438+
.startTransaction(
439+
any<TransactionContext>(),
440+
check<TransactionOptions> { options -> assertNull(options.deadlineTimeout) },
441+
)
442+
}
443+
402444
@Test
403445
fun `onDestinationChanged sets scope screen`() {
404446
val sut = fixture.getSut()

0 commit comments

Comments
 (0)