perf: Schedule session end on shared executor (JAVA-653)#5819
Draft
runningcode wants to merge 2 commits into
Draft
perf: Schedule session end on shared executor (JAVA-653)#5819runningcode wants to merge 2 commits into
runningcode wants to merge 2 commits into
Conversation
LifecycleWatcher created a java.util.Timer whose thread was spawned on the first background transition and lived for the rest of the process. Schedule the session-end task on the shared timer executor instead, whose single worker thread is reused and self-terminates when idle. If scheduling fails (executor already shut down), the session is ended right away instead of leaking. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
8 tasks
📲 Install BuildsAndroid
|
Contributor
Performance metrics 🚀
|
| Revision | Plain | With Sentry | Diff |
|---|---|---|---|
| eb95ded | 317.51 ms | 369.08 ms | 51.57 ms |
| 2124a46 | 319.19 ms | 415.04 ms | 95.85 ms |
| c3ee041 | 310.64 ms | 361.90 ms | 51.26 ms |
| dcc6bbf | 382.58 ms | 462.13 ms | 79.54 ms |
| 7a19fee | 315.46 ms | 368.62 ms | 53.16 ms |
| 9054d65 | 330.94 ms | 403.24 ms | 72.30 ms |
| d500866 | 326.13 ms | 378.70 ms | 52.58 ms |
| ad8da22 | 365.86 ms | 427.00 ms | 61.14 ms |
| ed33deb | 337.52 ms | 484.06 ms | 146.54 ms |
| d15471f | 310.26 ms | 377.04 ms | 66.78 ms |
App size
| Revision | Plain | With Sentry | Diff |
|---|---|---|---|
| eb95ded | 0 B | 0 B | 0 B |
| 2124a46 | 1.58 MiB | 2.12 MiB | 551.51 KiB |
| c3ee041 | 0 B | 0 B | 0 B |
| dcc6bbf | 1.58 MiB | 2.12 MiB | 553.10 KiB |
| 7a19fee | 0 B | 0 B | 0 B |
| 9054d65 | 1.58 MiB | 2.29 MiB | 723.38 KiB |
| d500866 | 0 B | 0 B | 0 B |
| ad8da22 | 1.58 MiB | 2.29 MiB | 719.83 KiB |
| ed33deb | 1.58 MiB | 2.13 MiB | 559.52 KiB |
| d15471f | 1.58 MiB | 2.13 MiB | 559.54 KiB |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
📜 Description
LifecycleWatchercreated ajava.util.Timer(a dedicated thread) on the first app-background transition, and that thread lived for the rest of the process. The session-end task now runs on the shared timer executor (SentryOptions#getTimerExecutorService), already used for transaction timeouts, whose single worker thread is reused and self-terminates when idle.The task is scheduled/cancelled as the app moves between background and foreground via
Future#cancel(false)(the same patternSentryTraceruses for idle/deadline timeouts). If scheduling fails (executor already shut down), the session is ended immediately instead of being left open.💡 Motivation and Context
Part of reducing the number of threads created by the SDK: JAVA-653.
On Android this timer thread was created on the first background transition and never went away. Reusing the shared timer executor removes it.
💚 How did you test it?
Existing
LifecycleWatcherTest(updated to assert on the scheduledFutureinstead of the removedTimer/TimerTaskinternals) andSessionTrackingIntegrationTest. Both fixtures now wire a real executor into options so scheduled tasks run.📝 Checklist
sendDefaultPIIis enabled.🔮 Next steps
Related PRs in this effort: RateLimiter (#5814), performance collector (#5816), HostnameCache (#5817), batch processors (#5818).
🤖 Generated with Claude Code