You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Follow-up to #6102, which deprecates AndroidCurrentDateProvider but migrates nothing. Five internal call sites still use it, each carrying a @SuppressWarnings("deprecation") that points here.
Why they should move
AndroidCurrentDateProvider.getCurrentTimeMillis() is SystemClock.uptimeMillis(), which stops advancing while the device is in deep sleep. Any interval measured with it under-reports real elapsed time, so a window looks un-expired long after it actually expired. MonotonicTicker is CLOCK_BOOTTIME via SystemClock.elapsedRealtimeNanos() and keeps counting through deep sleep.
Call sites
Debouncer — internal/util/Debouncer.java reads the provider for its window check. Four constructions pass the uptime provider:
ViewHierarchyEventProcessor (2 s window)
ScreenshotEventProcessor (2 s window)
SystemEventsBreadcrumbsIntegration (60 s window)
AppComponentsBreadcrumbsIntegration (60 s window)
The two 60 s breadcrumb debouncers are the ones that can swallow a real breadcrumb: a trim-memory or connectivity event right after a long Doze can land inside a window that expired hours ago in wall time. The 2 s screenshot and view-hierarchy windows are much harder to hit. Note this is a behavior change, not a rename — the debounce interval starts counting deep sleep.
AndroidEnvelopeCache — currentDateProvider.getCurrentTimeMillis() - sdkInitTimeSpan.getStartUptimeMs(), the startup-crash detection threshold. Same deep-sleep skew: a crash long after init, with sleep in between, can fall under startupCrashDurationThresholdMillis and be written as a startup crash.
AndroidEnvelopeCache cannot move in isolation
TimeSpan is documented and implemented on SystemClock.uptimeMillis() (performance/TimeSpan.java:14, :45, :51). Moving only the left operand to a MonotonicTicker tick would subtract two different clock bases — worse than what is there today. Either move TimeSpan's base along with it, or split this call site into its own issue.
Deleting AndroidCurrentDateProvider. The class is @ApiStatus.Internal and absent from sentry-android-core.api, so removal is not a binary-compat break, but per the project plan removal lands on v9.
Done when
No production code references AndroidCurrentDateProvider, or the only remaining reference is AndroidEnvelopeCache with the TimeSpan coupling tracked separately.
Follow-up to #6102, which deprecates
AndroidCurrentDateProviderbut migrates nothing. Five internal call sites still use it, each carrying a@SuppressWarnings("deprecation")that points here.Why they should move
AndroidCurrentDateProvider.getCurrentTimeMillis()isSystemClock.uptimeMillis(), which stops advancing while the device is in deep sleep. Any interval measured with it under-reports real elapsed time, so a window looks un-expired long after it actually expired.MonotonicTickerisCLOCK_BOOTTIMEviaSystemClock.elapsedRealtimeNanos()and keeps counting through deep sleep.Call sites
Debouncer—internal/util/Debouncer.javareads the provider for its window check. Four constructions pass the uptime provider:ViewHierarchyEventProcessor(2 s window)ScreenshotEventProcessor(2 s window)SystemEventsBreadcrumbsIntegration(60 s window)AppComponentsBreadcrumbsIntegration(60 s window)The two 60 s breadcrumb debouncers are the ones that can swallow a real breadcrumb: a trim-memory or connectivity event right after a long Doze can land inside a window that expired hours ago in wall time. The 2 s screenshot and view-hierarchy windows are much harder to hit. Note this is a behavior change, not a rename — the debounce interval starts counting deep sleep.
AndroidEnvelopeCache—currentDateProvider.getCurrentTimeMillis() - sdkInitTimeSpan.getStartUptimeMs(), the startup-crash detection threshold. Same deep-sleep skew: a crash long after init, with sleep in between, can fall understartupCrashDurationThresholdMillisand be written as a startup crash.AndroidEnvelopeCachecannot move in isolationTimeSpanis documented and implemented onSystemClock.uptimeMillis()(performance/TimeSpan.java:14,:45,:51). Moving only the left operand to aMonotonicTickertick would subtract two different clock bases — worse than what is there today. Either moveTimeSpan's base along with it, or split this call site into its own issue.Out of scope
sentry-android-replay'sICurrentDateProviderconsumers — Session Replay drives interval/window math from the wall clock #5578 / PR fix(replay): Measure recording deadlines on a monotonic clock (JAVA-575) #6090.AndroidCurrentDateProvider. The class is@ApiStatus.Internaland absent fromsentry-android-core.api, so removal is not a binary-compat break, but per the project plan removal lands on v9.Done when
AndroidCurrentDateProvider, or the only remaining reference isAndroidEnvelopeCachewith theTimeSpancoupling tracked separately.@SuppressWarnings("deprecation")added by Deprecate AndroidCurrentDateProvider in favor of MonotonicTicker #6102, and its comment, is gone.