54 lines
3.7 KiB
Markdown
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/`.
|