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"]