Skip to content

perf(core): Read the clock once per performance collection round - #5934

Merged
runningcode merged 2 commits into
mainfrom
no/perf-collection-timeout-clock-reads
Aug 12, 2026
Merged

perf(core): Read the clock once per performance collection round#5934
runningcode merged 2 commits into
mainfrom
no/perf-collection-timeout-clock-reads

Conversation

@runningcode

@runningcode runningcode commented Aug 11, 2026

Copy link
Copy Markdown
Contributor

📜 Description

While a transaction is running, DefaultCompositePerformanceCollector collects performance data every 100ms for up to 30 seconds.

CompositeData.addDataAndCheckTimeout read the clock to check the 30s collection timeout once per in-flight transaction, allocating a SentryNanotimeDate (plus System.currentTimeMillis() + System.nanoTime()) each time — even though the enclosing timer task had just read the same clock for the sample it was distributing.

That reading is now passed in, so a collection round reads the clock once rather than once per transaction.

💡 Motivation and Context

Perf improvement!

💚 How did you test it?

Unit tests

📝 Checklist

  • I added GH Issue ID & Linear ID
  • I added tests to verify the changes.
  • No new PII added or SDK only sends newly added PII if sendDefaultPII is enabled.
  • I updated the docs if needed.
  • I updated the wizard if needed.
  • Review from the native team if needed.
  • No breaking change or entry added to the changelog.
  • No breaking change for hybrid SDKs or communicated to hybrid SDKs.

🔮 Next steps

While a transaction is running, performance data is collected every
100ms. CompositeData.addDataAndCheckTimeout read the clock to check for
the 30 second collection timeout once per in-flight transaction,
allocating a SentryNanotimeDate each time, even though the enclosing
timer task had just read it for the sample it was distributing.

Pass that reading in, so a collection round reads the clock once instead
of once per transaction.
@sentry

sentry Bot commented Aug 11, 2026

Copy link
Copy Markdown

📲 Install Builds

Android

🔗 App Name App ID Version Configuration
SDK Size io.sentry.tests.size 8.52.0 (1) release

⚙️ sentry-android Build Distribution Settings

@runningcode
runningcode marked this pull request as ready for review August 11, 2026 13:50
@runningcode runningcode added the sanity-check PR needs a lightweight review for obvious issues label Aug 11, 2026
@github-actions

Copy link
Copy Markdown
Contributor

Performance metrics 🚀

  Plain With Sentry Diff
Startup time 319.10 ms 366.38 ms 47.28 ms
Size 0 B 0 B 0 B

Baseline results on branch: main

Startup times

Revision Plain With Sentry Diff
6b019b7 343.31 ms 417.23 ms 73.91 ms
d15471f 286.65 ms 314.68 ms 28.03 ms
d217708 409.83 ms 474.72 ms 64.89 ms
d500866 326.13 ms 378.70 ms 52.58 ms
fcec2f2 314.96 ms 373.66 ms 58.70 ms
d501a7e 314.55 ms 343.34 ms 28.79 ms
7414e9b 322.49 ms 378.88 ms 56.39 ms
fcec2f2 357.47 ms 447.32 ms 89.85 ms
a416a65 316.52 ms 359.67 ms 43.15 ms
983e0f0 350.64 ms 386.44 ms 35.79 ms

App size

Revision Plain With Sentry Diff
6b019b7 0 B 0 B 0 B
d15471f 1.58 MiB 2.13 MiB 559.54 KiB
d217708 1.58 MiB 2.10 MiB 532.97 KiB
d500866 0 B 0 B 0 B
fcec2f2 1.58 MiB 2.12 MiB 551.50 KiB
d501a7e 0 B 0 B 0 B
7414e9b 0 B 0 B 0 B
fcec2f2 1.58 MiB 2.12 MiB 551.50 KiB
a416a65 1.58 MiB 2.12 MiB 555.26 KiB
983e0f0 0 B 0 B 0 B

@runningcode
runningcode merged commit 846c4dc into main Aug 12, 2026
74 checks passed
@runningcode
runningcode deleted the no/perf-collection-timeout-clock-reads branch August 12, 2026 08:24
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

sanity-check PR needs a lightweight review for obvious issues

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants