Features
- Allow child spans to use explicit start timestamps through
ISpan(#5929) - Make
ISpan.startChildoverloads withSpanOptionspublic (#5927)
Improvements
- Remove
ApiStatus.Experimentalannotation fromSentrySQLiteDriver(#5938)
Fixes
- Clear contexts when calling
Scope.clear()(#5902) - Preserve custom
Throwableidentities when R8 optimizes Android apps (#5881) - Report the correct cpu usage for the first performance sample of a transaction, which was measured against the time since device boot (#5926)
- Prevent an ANR when the Session Replay video encoder gets stuck (#5842)
- Some hardware encoders never signal end-of-stream, which made the replay worker spin forever while holding the encoder lock. The app's lifecycle callbacks then blocked on that lock and the app froze until the system killed it. The encoder now gives up instead of spinning, and closing the replay cache no longer waits indefinitely for a wedged encoder.
Performance
- Read the clock once per performance collection round instead of once per in-flight transaction (#5934)
- Reduce allocations while collecting cpu usage during transactions by reading the process cpu time via
Process.getElapsedCpuTime()instead of parsing/proc/self/stat(33.6kB to 16 bytes per sample on a Pixel 3) (#5926) - Store performance measurements as primitives, removing a boxed allocation per measurement per performance sample (#5935)