prometeu-runtime/docs/runtime/agendas/017-perf-host-desktop-frame-pacing-and-presentation.md
2026-03-24 13:40:53 +00:00

2.4 KiB

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

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.