Skip to content

perf(core): Store performance measurements as primitives - #5935

Merged
runningcode merged 2 commits into
mainfrom
no/perf-collection-data-boxing
Aug 12, 2026
Merged

perf(core): Store performance measurements as primitives#5935
runningcode merged 2 commits into
mainfrom
no/perf-collection-data-boxing

Conversation

@runningcode

@runningcode runningcode commented Aug 11, 2026

Copy link
Copy Markdown
Contributor

📜 Description

While a transaction or profile chunk is running, DefaultCompositePerformanceCollector collects performance data every 100ms for up to 30 seconds (~300 samples per transaction). Every sample allocated a box per measurement — 2 per sample on Android, ~600 per 30s transaction.

The fields are now primitives with an explicit presence flag, and consumers call hasUsedHeapMemory() etc. instead of null-checking.

💡 Motivation and Context

Reduce boxing and improve performance.

💚 How did you test it?

Unit tests pass

📝 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 or profile chunk is running, performance data is
collected every 100ms for up to 30 seconds. PerformanceCollectionData
stored its measurements as boxed Double/Long, using null to mean "no
collector reported this". Heap sizes are far outside the Long cache, so
each sample allocated a box per measurement.

The fields are now primitives with an explicit presence flag, and
consumers ask hasUsedHeapMemory() instead of null-checking. A sentinel
value was considered instead, but AndroidCpuCollector can legitimately
produce NaN when it observes a zero-length interval, so no in-band value
is safe.

No behavior change: which measurements are reported, and their values,
are unchanged. PerformanceCollectionData is @ApiStatus.Internal, so the
signature changes in sentry.api are not part of the public surface.
@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

@github-actions

Copy link
Copy Markdown
Contributor

Performance metrics 🚀

  Plain With Sentry Diff
Startup time 322.38 ms 383.86 ms 61.48 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 marked this pull request as ready for review August 11, 2026 14:15
@runningcode runningcode added the sanity-check PR needs a lightweight review for obvious issues label Aug 11, 2026

@romtsn romtsn left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

clever!

@runningcode
runningcode merged commit 77d4c48 into main Aug 12, 2026
74 of 76 checks passed
@runningcode
runningcode deleted the no/perf-collection-data-boxing branch August 12, 2026 08:27
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