Repository navigation
Commit 82919fd
fix(android): Anchor the frame-metrics time projection (JAVA-579)
SpanFrameMetricsCollector places a span on the frame timeline, which is
stamped by Choreographer on System.nanoTime(). Spans carrying a
SentryNanotimeDate are already on that timeline, but a wall-stamped one
— an app start span built from TimeSpan — has to be projected onto it,
and toNanoTime read the offset between the two clocks at the moment the
span finished.
That offset is not a constant. A wall-clock step moves one clock, and
time spent suspended moves the other, since System.nanoTime() stops in
suspend and the wall clock does not. So the projection charged the span
for every step and every suspend since it started, and an app start span
could be placed far away from the frames it actually overlapped, taking
its frames_slow/frozen/delay data with it.
Take one wall reading and one tick at construction and project through
that fixed anchor instead.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>1 parent 1b8668a commit 82919fd
2 files changed
Lines changed: 80 additions & 7 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 | |
|---|---|---|---|
| |||
1 | 1 | | |
2 | 2 | | |
3 | | - | |
4 | 3 | | |
5 | 4 | | |
6 | 5 | | |
| |||
12 | 11 | | |
13 | 12 | | |
14 | 13 | | |
| 14 | + | |
| 15 | + | |
| 16 | + | |
| 17 | + | |
15 | 18 | | |
16 | 19 | | |
17 | 20 | | |
| |||
68 | 71 | | |
69 | 72 | | |
70 | 73 | | |
| 74 | + | |
| 75 | + | |
| 76 | + | |
| 77 | + | |
| 78 | + | |
71 | 79 | | |
72 | 80 | | |
73 | 81 | | |
| 82 | + | |
| 83 | + | |
| 84 | + | |
| 85 | + | |
| 86 | + | |
| 87 | + | |
| 88 | + | |
| 89 | + | |
| 90 | + | |
| 91 | + | |
| 92 | + | |
| 93 | + | |
| 94 | + | |
| 95 | + | |
| 96 | + | |
74 | 97 | | |
75 | 98 | | |
76 | 99 | | |
| 100 | + | |
| 101 | + | |
| 102 | + | |
77 | 103 | | |
78 | 104 | | |
79 | 105 | | |
| |||
312 | 338 | | |
313 | 339 | | |
314 | 340 | | |
315 | | - | |
| 341 | + | |
316 | 342 | | |
317 | 343 | | |
318 | 344 | | |
319 | 345 | | |
320 | 346 | | |
321 | 347 | | |
322 | | - | |
323 | | - | |
324 | | - | |
325 | | - | |
326 | | - | |
| 348 | + | |
| 349 | + | |
| 350 | + | |
| 351 | + | |
| 352 | + | |
| 353 | + | |
| 354 | + | |
| 355 | + | |
| 356 | + | |
327 | 357 | | |
328 | 358 | | |
329 | 359 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
4 | 4 | | |
5 | 5 | | |
6 | 6 | | |
| 7 | + | |
7 | 8 | | |
8 | 9 | | |
| 10 | + | |
9 | 11 | | |
10 | 12 | | |
| 13 | + | |
| 14 | + | |
| 15 | + | |
11 | 16 | | |
12 | 17 | | |
13 | 18 | | |
| |||
84 | 89 | | |
85 | 90 | | |
86 | 91 | | |
| 92 | + | |
| 93 | + | |
| 94 | + | |
| 95 | + | |
| 96 | + | |
| 97 | + | |
| 98 | + | |
| 99 | + | |
| 100 | + | |
| 101 | + | |
| 102 | + | |
| 103 | + | |
| 104 | + | |
| 105 | + | |
| 106 | + | |
| 107 | + | |
| 108 | + | |
| 109 | + | |
| 110 | + | |
| 111 | + | |
| 112 | + | |
| 113 | + | |
| 114 | + | |
| 115 | + | |
| 116 | + | |
| 117 | + | |
| 118 | + | |
| 119 | + | |
| 120 | + | |
| 121 | + | |
| 122 | + | |
| 123 | + | |
| 124 | + | |
| 125 | + | |
| 126 | + | |
| 127 | + | |
| 128 | + | |
| 129 | + | |
87 | 130 | | |
88 | 131 | | |
89 | 132 | | |
| |||
0 commit comments