Skip to content

fix: reduce stuttering during chunk streaming - #52

Merged
PedroAugusto08 merged 2 commits into
mainfrom
codex/issue-51-performance-stuttering
Sep 10, 2026
Merged

PedroAugusto08 merged 2 commits into
mainfrom
codex/issue-51-performance-stuttering

Conversation

@PedroAugusto08

Copy link
Copy Markdown
Collaborator

📌 Descrição das Alterações

Corrige os principais stutters observados durante movimentação e streaming de chunks, identificados na Issue #51.

A investigação por profiling encontrou duas causas principais:

  1. O Grid Overlay reconstruía toda a geometria após revisões intermediárias do mundo, causando spikes de até ~100 ms durante streaming.
  2. A geração de cavernas executava longas sequências de operações Python na worker thread, mantendo o GIL por tempo suficiente para bloquear a thread gráfica. Quando isso coincidia com uploads OpenGL, os frames chegavam a ~40–65 ms.

A correção foi realizada em duas etapas:

  • vetorização da geração de geometria do Grid Overlay e coalescência de revisões consecutivas;
  • redução da contenção do GIL durante o carving de cavernas executado em background, preservando a geração síncrona e determinística.

O grid agora também aguarda a conclusão da sequência de streaming antes de sincronizar a geometria final, evitando rebuilds intermediários desnecessários.

📊 Resultados

No percurso determinístico com Grid ON:

  • p99: 48,64 ms → 16,56 ms
  • máximo: 64,45 ms → 19,36 ms
  • frames >25 ms: 27 → 0
  • frames >50 ms: 9 → 0

No teste de estresse de streaming:

  • p95: 36,48 ms → 17,08 ms
  • p99: 60,45 ms → 23,14 ms
  • máximo: 88,83 ms → 25,04 ms
  • frames >50 ms: 11 → 0

O custo isolado de geração da geometria do grid caiu de aproximadamente 27,61 ms para 2,27 ms, e os rebuilds passaram a ocorrer apenas após a estabilização da sequência de streaming.

A validação manual em WSLg confirmou movimentação pelo mapa sem stutterings aparentes durante as transições de chunks.

A geração procedural, seeds, geometria das cavernas, streaming, raycasting, câmera, personagem e comportamento visual do grid foram preservados.

🔗 Issue Vinculada

Closes #51

🛠️ Tipo de Alteração

  • ✨ Nova funcionalidade (feat)
  • 🐛 Correção de bug (fix)
  • 🎨 Melhoria gráfica / Shaders (shader)
  • ⚡ Otimização de performance / Culling (perf)
  • 📝 Documentação (docs)
  • 🧪 Testes (test)

✅ Checklist de Qualidade e Validação

  • O código foi testado localmente executando python src/main.py
  • Os testes unitários passaram com sucesso (pytest)
  • Não há erros de compilação de shaders GLSL
  • Segue a arquitetura e padrões do projeto

Testes

  • 419 passed
  • 3 skipped
  • 1 warning
  • git diff --check: OK

Os três testes ignorados dependem de contexto OpenGL/display indisponível dentro do processo do pytest. A aplicação OpenGL foi executada e validada separadamente via WSLg.

Limitações restantes

  • O Grid Overlay ainda possui custo contínuo mensurável, especialmente em resoluções maiores.
  • Uploads OpenGL continuam síncronos na main thread e limitados a uma integração por frame.
  • Geração e meshing continuam executados em background e podem apresentar alguma contenção residual.
  • Otimizações adicionais de FPS em alta resolução/fullscreen ficam fora do escopo desta correção.

@PedroAugusto08
PedroAugusto08 merged commit 653c475 into main Sep 10, 2026
1 check passed
@PedroAugusto08
PedroAugusto08 deleted the codex/issue-51-performance-stuttering branch September 10, 2026 16:15
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

[Performance] Investigar stuttering e queda de FPS durante movimentação e streaming

1 participant