flowchart TD P["Present(N)"] --> E["encode + commit
present command buffer"] E --> D["drawable: present after
(N - 0.5) / refresh"] D --> S["display
(only when visible)"] E --> G["GPU signals gpu_done = frame"] G --> L["pacer listener:
at = max(now, last + N / refresh)"] L --> T["timer fires at 'at':
done = frame"] T --> W["latency object released"] T --> A["allocator free:
next Present may encode"]