Advance (or start) the dissolve of entry toward displayIdx at
nowMs and return it, or null when the group should draw
displayIdx alone — in which case the dissolve is forgotten.
A dissolve STARTS when the displayed level differs from the one displayed
last frame. It starts from what is on screen: when the previous level was
itself still dissolving in (a retarget mid-dissolve), the new one begins at
1 − progress, which keeps the previous level at exactly the opacity it
had, so reversing a change only has to undo the part that happened. It
ENDS once progress reaches 1, or as soon as the outgoing level can no
longer be drawn against the incoming one (released, stale for the current
slice, or not blendable).
PrivateretargetForget path's dissolve without recording it as dropped; null.
Forget path's dissolve on a path that returns before the dissolve is
advanced, recording its outgoing level so the visibility pass recounts it.
drop every dissolve (a frame the registry cannot select for).
The outgoing level of path's in-flight dissolve, or -1.
The outgoing level of path's dropped dissolve, or -1 — consumed by
the visibility pass, which then calls settled.
The visibility pass for path ran: its dropped dissolve is accounted for.
Forget everything about path (unregistered).
Whether any dissolve is in flight.
The registry clock time (ms) until which the loop must keep ticking: NO_TICK when nothing is pending, UNTIL_RESOLVED while pending with no deadline. Read after the frame's evaluation.
Every group's in-flight dissolve, by group path, plus the outgoing level of a dissolve dropped before this frame's visibility pass (so that pass still recounts the level leaving the screen).