The frame manager manages the priority frame in the main thread.
Once the FrameManager has started there is always an open frame in the main thread. If a model object is committed in any frame then the frame manager schedules the current frame to commit with the Choreographer and a new frame is open. Any model objects read during composition are recorded in an invalidations map. If they are mutated during a frame the recompose scope that was active during the read is invalidated.
fun ensureStarted(): Unit
fun <T> framed(block: () -> T): T
fun <T> isolated(block: () -> T): T
fun nextFrame(): Unit
fun <T> unframed(block: () -> T): T