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

54 lines
3.7 KiB
Markdown

---
id: DEC-0007
ticket: perf-host-debug-overlay-isolation
title: Decision - [PERF] Host Debug Overlay Isolation
status: accepted
created: 2026-04-10
updated: 2026-04-10
agenda: AGD-0012
tags: [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/`.