
This replaces the DISPATCHED state with new sub-states that are possible with triple buffering: DISPATCHED_ONE: Double buffering DISPATCHED_ONE_AND_SCHEDULED: Scheduled switch to triple buffering DISPATCHED_ONE_AND_SCHEDULED_NOW: Scheduled switch to triple buffering DISPATCHED_ONE_AND_SCHEDULED_LATER: Scheduled switch to triple buffering DISPATCHED_TWO: Triple buffering Triple buffering is currently disabled until the test cases get updated to handle it in the next commit. Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/1441>
895 B
895 B
Clutter Frame scheduling
ClutterFrameClock
state diagram.
stateDiagram
INIT --> SCHEDULED* : first frame scheduled
IDLE --> SCHEDULED* : next frame scheduled
SCHEDULED* --> IDLE : frame clock inhibited or mode changed
SCHEDULED* --> SCHEDULED* : schedule upgraded to SCHEDULED_NOW
SCHEDULED* --> DISPATCHED_ONE : begin an update
DISPATCHED_ONE --> IDLE : frame was either presented or aborted with nothing to draw
DISPATCHED_ONE --> DISPATCHED_ONE_AND_SCHEDULED* : entering triple buffering
DISPATCHED_ONE_AND_SCHEDULED* --> SCHEDULED* : frame was either presented or aborted with nothing to draw
DISPATCHED_ONE_AND_SCHEDULED* --> DISPATCHED_ONE : frame clock inhibited or mode changed
DISPATCHED_ONE_AND_SCHEDULED* --> DISPATCHED_TWO : start a second concurrent frame
DISPATCHED_TWO --> DISPATCHED_ONE : leaving triple buffering