Fixed
Status Update
Comments
tc...@google.com <tc...@google.com> #2
A couple of questions:
1. Have you saw crash in real device or only in simulators?
2. Do you use dynamic feature for language ID?
1. Have you saw crash in real device or only in simulators?
2. Do you use dynamic feature for language ID?
ap...@google.com <ap...@google.com> #3
Tested on Android 12 Emulator with custom executor, but cannot repro this issue.
Description
If
ManualFrameClock.advanceClock(nanos: Long)
is called from the main dispatcher, and its awaiters are also dispatched on the main dispatcher, two subsequent calls toadvanceClock
without a suspending call in between will result in the second frame time being missed by the awaiting coroutines.When awaiters get their frame time, their withFrameNanos lambda runs and they will be resumed, but the resume happens dispatched. If the caller is already occupying the main thread, the dispatch is enqueued and can only happen when the caller suspends.
If we yield right after sending the new frame time, the awaiters can be dispatched and potentially suspend on another call to withFrameNanos before the caller of advanceClock moves on.