Repository navigation
Commit 2430316
fix(android): Decide session rotation on a monotonic clock (JAVA-573)
Whether foregrounding rotates the session was a comparison between two
System.currentTimeMillis() readings taken up to 30 seconds apart. The gap
between two wall-clock reads is not the time that passed — the device syncs
its clock and the interval comes out too long, too short, or negative — so a
step forward started a session that should have been resumed, and a step back
resumed one that should have ended. Android steps the wall clock most often in
the first seconds after boot, which is exactly where a cold start's background
window lives.
The background window is a duration, so it now lives on a Deadline over
options.getMonotonicTicker(), which on Android is CLOCK_BOOTTIME and so keeps
counting through deep sleep. One deadline serves both halves of the window: the
end-session task is scheduled for its remaining(), and a foreground arriving
first asks whether it hasPassed(). Measuring one window in two places is what
allowed two readings to disagree.
The staleness of a session already on the scope stays on the wall clock and is
now named for it. That path is only reached before the app has been backgrounded
in this process, and the only record of when that session started is
Session.getStarted() — a serialized epoch instant, which no tick can be
compared against. A TODO [MAJOR] marks the real fix: a session that records the
tick it started on.
Passing the clocks in from AppLifecycleIntegration, which already holds the
options being registered, removes the second constructor rather than adding a
third parameter to it.
Two tests were pinning the old behavior: `if last started session is before
interval` stubbed the clock with (2, 1) and passed only because the wall clock
ran backwards. They become a real background-foreground cycle on a
TestMonotonicTicker, with one regression test per step direction.
This leaves the other half of JAVA-573 open: a session that slept through its
window is still stamped when the SDK noticed rather than when the window fell
due, so its duration is inflated by the suspend. That value is serialized, and
#6091 is the template for fixing it.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>1 parent 768ca8e commit 2430316
3 files changed
Lines changed: 129 additions & 53 deletions
File tree
- sentry-android-core/src
- main/java/io/sentry/android/core
- test/java/io/sentry/android/core
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
56 | 56 | | |
57 | 57 | | |
58 | 58 | | |
59 | | - | |
| 59 | + | |
| 60 | + | |
| 61 | + | |
60 | 62 | | |
61 | 63 | | |
62 | 64 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
5 | 5 | | |
6 | 6 | | |
7 | 7 | | |
8 | | - | |
9 | | - | |
| 8 | + | |
| 9 | + | |
| 10 | + | |
10 | 11 | | |
| 12 | + | |
11 | 13 | | |
12 | | - | |
| 14 | + | |
| 15 | + | |
13 | 16 | | |
14 | 17 | | |
15 | 18 | | |
16 | 19 | | |
17 | 20 | | |
18 | 21 | | |
19 | | - | |
20 | | - | |
21 | 22 | | |
22 | 23 | | |
| 24 | + | |
| 25 | + | |
| 26 | + | |
| 27 | + | |
| 28 | + | |
| 29 | + | |
| 30 | + | |
| 31 | + | |
| 32 | + | |
23 | 33 | | |
24 | 34 | | |
25 | 35 | | |
26 | 36 | | |
27 | 37 | | |
28 | 38 | | |
29 | | - | |
30 | | - | |
31 | | - | |
32 | | - | |
33 | | - | |
34 | | - | |
35 | | - | |
36 | | - | |
37 | | - | |
38 | | - | |
39 | | - | |
40 | | - | |
41 | | - | |
42 | | - | |
| 39 | + | |
| 40 | + | |
43 | 41 | | |
44 | 42 | | |
45 | 43 | | |
46 | 44 | | |
47 | 45 | | |
48 | 46 | | |
49 | | - | |
| 47 | + | |
| 48 | + | |
50 | 49 | | |
51 | 50 | | |
52 | 51 | | |
53 | 52 | | |
54 | | - | |
| 53 | + | |
| 54 | + | |
55 | 55 | | |
56 | 56 | | |
57 | 57 | | |
| |||
61 | 61 | | |
62 | 62 | | |
63 | 63 | | |
64 | | - | |
65 | | - | |
66 | | - | |
| 64 | + | |
67 | 65 | | |
68 | | - | |
69 | | - | |
70 | | - | |
71 | | - | |
72 | | - | |
73 | | - | |
74 | | - | |
75 | | - | |
76 | | - | |
77 | | - | |
78 | | - | |
79 | 66 | | |
80 | | - | |
81 | | - | |
| 67 | + | |
82 | 68 | | |
83 | 69 | | |
84 | 70 | | |
85 | 71 | | |
86 | 72 | | |
87 | 73 | | |
88 | | - | |
| 74 | + | |
| 75 | + | |
| 76 | + | |
| 77 | + | |
| 78 | + | |
| 79 | + | |
| 80 | + | |
| 81 | + | |
| 82 | + | |
| 83 | + | |
| 84 | + | |
| 85 | + | |
| 86 | + | |
| 87 | + | |
| 88 | + | |
| 89 | + | |
| 90 | + | |
| 91 | + | |
| 92 | + | |
| 93 | + | |
| 94 | + | |
| 95 | + | |
| 96 | + | |
| 97 | + | |
| 98 | + | |
| 99 | + | |
| 100 | + | |
| 101 | + | |
89 | 102 | | |
90 | 103 | | |
91 | 104 | | |
92 | 105 | | |
93 | 106 | | |
94 | 107 | | |
95 | | - | |
96 | | - | |
97 | | - | |
98 | 108 | | |
99 | 109 | | |
100 | 110 | | |
| |||
104 | 114 | | |
105 | 115 | | |
106 | 116 | | |
| 117 | + | |
| 118 | + | |
| 119 | + | |
107 | 120 | | |
108 | 121 | | |
109 | 122 | | |
| |||
114 | 127 | | |
115 | 128 | | |
116 | 129 | | |
| 130 | + | |
| 131 | + | |
117 | 132 | | |
118 | 133 | | |
119 | 134 | | |
120 | 135 | | |
121 | | - | |
| 136 | + | |
122 | 137 | | |
123 | 138 | | |
124 | 139 | | |
| |||
131 | 146 | | |
132 | 147 | | |
133 | 148 | | |
| 149 | + | |
| 150 | + | |
| 151 | + | |
| 152 | + | |
| 153 | + | |
| 154 | + | |
| 155 | + | |
| 156 | + | |
| 157 | + | |
| 158 | + | |
134 | 159 | | |
135 | 160 | | |
136 | 161 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
12 | 12 | | |
13 | 13 | | |
14 | 14 | | |
15 | | - | |
| 15 | + | |
| 16 | + | |
| 17 | + | |
| 18 | + | |
| 19 | + | |
| 20 | + | |
16 | 21 | | |
17 | 22 | | |
18 | 23 | | |
| |||
32 | 37 | | |
33 | 38 | | |
34 | 39 | | |
35 | | - | |
| 40 | + | |
| 41 | + | |
| 42 | + | |
| 43 | + | |
36 | 44 | | |
37 | 45 | | |
38 | 46 | | |
| |||
60 | 68 | | |
61 | 69 | | |
62 | 70 | | |
63 | | - | |
| 71 | + | |
| 72 | + | |
64 | 73 | | |
65 | 74 | | |
66 | 75 | | |
| |||
81 | 90 | | |
82 | 91 | | |
83 | 92 | | |
84 | | - | |
85 | | - | |
86 | | - | |
| 93 | + | |
| 94 | + | |
| 95 | + | |
87 | 96 | | |
| 97 | + | |
| 98 | + | |
| 99 | + | |
88 | 100 | | |
| 101 | + | |
89 | 102 | | |
90 | 103 | | |
91 | 104 | | |
92 | 105 | | |
93 | 106 | | |
94 | | - | |
95 | | - | |
96 | | - | |
| 107 | + | |
| 108 | + | |
| 109 | + | |
97 | 110 | | |
| 111 | + | |
| 112 | + | |
| 113 | + | |
98 | 114 | | |
| 115 | + | |
99 | 116 | | |
100 | 117 | | |
101 | 118 | | |
102 | 119 | | |
103 | 120 | | |
| 121 | + | |
| 122 | + | |
| 123 | + | |
| 124 | + | |
| 125 | + | |
| 126 | + | |
| 127 | + | |
| 128 | + | |
| 129 | + | |
| 130 | + | |
| 131 | + | |
| 132 | + | |
| 133 | + | |
| 134 | + | |
| 135 | + | |
| 136 | + | |
| 137 | + | |
| 138 | + | |
| 139 | + | |
| 140 | + | |
| 141 | + | |
| 142 | + | |
| 143 | + | |
| 144 | + | |
| 145 | + | |
| 146 | + | |
| 147 | + | |
| 148 | + | |
| 149 | + | |
| 150 | + | |
| 151 | + | |
| 152 | + | |
| 153 | + | |
104 | 154 | | |
105 | 155 | | |
106 | 156 | | |
| |||
249 | 299 | | |
250 | 300 | | |
251 | 301 | | |
252 | | - | |
253 | 302 | | |
254 | 303 | | |
255 | 304 | | |
| |||
0 commit comments