Recover from buffer stuffing for canned animations
Buffer stuffing occurs when SurfaceFlinger misses a frame, but the
client continues to produce buffers at the same rate, causing a
greater risk for jank to occur. Recovery is achieved for canned
animations by adjusting the animation timeline on the client side so
that SurfaceFlinger is no longer behind.
Choreographer adds a negative offset to each frame when buffer
stuffing is detected to effectively adjust the animation timeline
after an intentional frame delay.
Bug: b/294922229
Test: presubmit, manually check perfetto traces
Flag: android.view.flags.buffer_stuffing_recovery
Change-Id: Ic48208252c899a97cd72177fedaa2c2788028338
6 files changed