--- id: AGD-0009 ticket: perf-host-desktop-frame-pacing-and-presentation title: Agenda - [PERF] Host Desktop Frame Pacing and Presentation status: open created: 2026-03-27 resolved: decision: tags: [] --- # Agenda - [PERF] Host Desktop Frame Pacing and Presentation ## Problema O host desktop ainda roda em modo agressivo de polling e apresentacao continua. Hoje o loop usa `ControlFlow::Poll`, pede redraw incondicionalmente e converte o framebuffer inteiro de RGB565 para RGBA8 a cada `RedrawRequested`, mesmo quando nao ha novo frame logico. ## Dor - CPU fica ocupada sem ganho visual. - port de referencia no desktop mascara problemas de pacing em hardware barato. - a conta de energia/temperatura piora mesmo quando a VM esta ociosa. ## Hotspots Atuais - [runner.rs](/Users/niltonconstantino/personal/workspace.personal/intrepid/prometeu/runtime/crates/host/prometeu-host-desktop-winit/src/runner.rs#L252) - [runner.rs](/Users/niltonconstantino/personal/workspace.personal/intrepid/prometeu/runtime/crates/host/prometeu-host-desktop-winit/src/runner.rs#L270) - [runner.rs](/Users/niltonconstantino/personal/workspace.personal/intrepid/prometeu/runtime/crates/host/prometeu-host-desktop-winit/src/runner.rs#L390) ## Alvo da Discussao Fechar uma politica de pacing/apresentacao host-driven que nao desperdice CPU quando nao existe frame novo. ## O Que Precisa Ser Definido 1. Gatilho de redraw. Decidir se redraw acontece: - apenas com logical frame pronto; - por deadline de vsync; - por dirty flag do front buffer; - por evento externo relevante. 2. Politica do event loop. Decidir entre: - `Wait`; - `WaitUntil`; - `Poll` apenas em modo debug/profiling. 3. Conversao de framebuffer. Definir se a conversao RGB565 -> RGBA8: - continua full-frame; - passa a ser dirty-region; - sai da CPU e vai para shader/path especifico do host. 4. Modo ocioso. Delimitar comportamento quando VM esta pausada, em breakpoint ou sem cart. ## Open Questions de Arquitetura 1. O host desktop deve ser referencia conservadora de energia ou apenas shell de desenvolvimento? 2. O runtime precisa expor um sinal explicito de "novo frame disponivel" para o host? 3. Existe necessidade real de redraw continuo quando o overlay esta desligado? ## Dependencias - `../specs/01-time-model-and-cycles.md` - `../specs/10-debug-inspection-and-profiling.md` - `../specs/11-portability-and-cross-platform-execution.md` ## Criterio de Saida Desta Agenda Pode virar PR quando houver decisao escrita sobre: - politica de control flow do host; - criterio canonico de redraw; - estrategia de conversao/apresentacao de framebuffer; - comportamento de idle/pause/debug.