prometeu-runtime/discussion/workflow/decisions/DEC-0007-perf-host-debug-overlay-isolation.md

3.7 KiB

id ticket title status created updated agenda tags
DEC-0007 perf-host-debug-overlay-isolation Decision - [PERF] Host Debug Overlay Isolation accepted 2026-04-10 2026-04-10 AGD-0012
performance
host
gfx

Decision - [PERF] Host Debug Overlay Isolation

Status

Accepted

Contexto

O overlay de debug do PROMETEU, utilizado para exibir telemetria, logs e métricas em tempo real, está atualmente acoplado ao pipeline de renderização emulado (gfx) e ao processamento do runtime. Isso resulta em:

  1. Distorção de Performance: O custo de formatar strings e realizar chamadas de desenho para o HUD técnico é contabilizado como ciclos do jogo, invalidando medições de certificação.
  2. Acoplamento Indevido: O pipeline gfx emulado processa elementos visuais (HUD) que não existem no hardware original.
  3. Complexidade no Host: O Host precisa lidar com a injeção dessas informações no buffer de emulação.

Decisao

Fica decidido que o overlay de debug será movido integralmente para a camada Host Desktop (prometeu-host-desktop-winit), operando de forma 100% isolada do runtime e do pipeline de gfx emulado.

  1. Isolamento de Pipeline: O overlay técnico deve ser tratado como uma "película" (layer) transparente aplicada pelo Host sobre o resultado final da renderização (pós-upscaling).
  2. Isolamento de Processamento: Nenhuma instrução de desenho ou formatação de strings relacionada ao overlay deve ocorrer dentro do runtime ou durante os ciclos emulados.
  3. Acesso via API: O Host acessará os dados necessários para o overlay através de uma API de telemetria passiva (baseada em atômicos, conforme definido na DEC-0005).
  4. Acionamento via F1: O controle de visibilidade (toggle) do overlay é de responsabilidade exclusiva do Host, acionado pela tecla F1.

Rationale

  • Pureza de Medição: Ao remover o processamento do overlay do runtime, garantimos que 100% dos ciclos medidos pertencem à lógica do cartucho e periféricos emulados.
  • Desempenho no Hardware Alvo: Como o overlay é exclusivo de Desktop, dispositivos handheld/consoles de baixo custo não devem pagar o preço de implementação ou ramificações lógicas para lidar com HUD técnico.
  • Qualidade Visual: Utilizar o Host para renderizar o HUD permite o uso de fontes TrueType nítidas e Alpha Blending real, melhorando drasticamente a legibilidade para o desenvolvedor sem afetar a fidelidade da emulação.

Invariantes / Contrato

  • Zero Overhead no Runtime: A presença ou ausência do overlay não deve alterar o contador de ciclos consumidos por frame no runtime.
  • Agnosticismo de GFX: O framebuffer emulado deve conter apenas os pixels gerados pelo cartucho, sem HUD técnico "queimado" na imagem.
  • Composição Assíncrona/Passiva: O Host não deve bloquear o runtime para coletar dados para o overlay; a leitura deve ser feita a partir de buffers de telemetria já expostos.

Impactos

  • Host (Desktop Winit): Exige a implementação de uma camada de renderização nativa (ex: egui ou composição direta via pixels/winit) que suporte transparência.
  • Runtime API: Deve expor campos de telemetria (FPS, Memory Usage, Cycles) via API para consumo pelo Host.
  • Especificações: Atualização dos capítulos de Portabilidade e Debug para refletir o isolamento.

Referencias

  • AGD-0012: [PERF] Host Debug Overlay Isolation (Agenda de Origem).
  • DEC-0005: [PERF] Push-based Telemetry Model (Modelo de acesso aos dados).

Propagacao Necessaria

  1. Remover hotspots de desenho de texto no runner.rs do host.
  2. Implementar o novo sistema de HUD no host usando bibliotecas nativas.
  3. Atualizar a documentação técnica em docs/specs/runtime/.