Skip to content

perf(android): [SDK Overhead Reduction 4] Use default timezone directly#5587

Draft
adinauer wants to merge 2 commits into
perf/sdk-overhead-reductionfrom
perf/sdk-overhead-reduction-timezone-default
Draft

perf(android): [SDK Overhead Reduction 4] Use default timezone directly#5587
adinauer wants to merge 2 commits into
perf/sdk-overhead-reductionfrom
perf/sdk-overhead-reduction-timezone-default

Conversation

@adinauer

@adinauer adinauer commented Jun 22, 2026

Copy link
Copy Markdown
Member

PR Stack (SDK Overhead Reduction)


📜 Description

Replace the normal Android device timezone path with TimeZone.getDefault() instead of constructing a Calendar just to read its timezone.

One compatibility detail is preserved: Android 13+ Calendar.getInstance(locale) can honor a locale Unicode tz extension (for example en-US-u-tz-usnyc). For those rare locales, the code keeps the Calendar path so the SDK continues reporting the same timezone as before. On Android N through Android 12, and for normal locales without a tz extension, the locale did not affect the timezone value.

💡 Motivation and Context

Part of the SDK Overhead Reduction stack. In the common case, device context collection only needs the process default timezone. TimeZone.getDefault() is available on Android API 21 and Java 8, and avoids constructing a Calendar and reading locale configuration just to retrieve the same timezone.

The previous API 24+ branch used the first Configuration locale, but Android N through Android 12 did not use that locale to select the timezone. Android 13 added tz Unicode extension support to Calendar.getInstance(locale), so this PR preserves that behavior with a narrow fallback while keeping the fast direct-default path for all other cases.

💚 How did you test it?

  • ./gradlew :sentry-android-core:testDebugUnitTest --tests io.sentry.android.core.DeviceInfoUtilTest — all tests pass
    • includes regression coverage for an Android 13+ locale with a Unicode tz extension (en-US-u-tz-usnyc)
  • ./gradlew spotlessApply apiDump — no API surface changes

📝 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

More SDK overhead reduction PRs in this stack.

#skip-changelog

⚠️ Merge this PR using a merge commit (not squash). Only the collection branch is squash-merged into main.

Avoid constructing a Calendar only to read the default device timezone. The locale passed to Calendar does not affect the timezone value, so TimeZone.getDefault returns the same value with less work during device context collection.

Co-Authored-By: Claude <noreply@anthropic.com>
@sentry

sentry Bot commented Jun 22, 2026

Copy link
Copy Markdown

📲 Install Builds

Android

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

⚙️ sentry-android Build Distribution Settings

@github-actions

Copy link
Copy Markdown
Contributor

Performance metrics 🚀

  Plain With Sentry Diff
Startup time 351.04 ms 416.90 ms 65.85 ms
Size 0 B 0 B 0 B

Keep the Calendar-based timezone path for Android 13+ locales that carry a Unicode tz extension. This preserves the existing device timezone behavior while keeping the direct default timezone fast path for normal locales.

Co-Authored-By: Claude <noreply@anthropic.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant