315. Contador de FPS en main
Añade un contador de FPS periódico y sencillo a main.py.
Lección 315 de 356 · tests/chapter_10_performance/test_315_main_fps_counter.py
Archivo a actualizar
main.pyPor qué existe este paso
Antes de optimizar el renderizado con pygame o la velocidad del emulador, el ejecutor manual debería mostrar una señal sencilla de FPS de extremo a extremo en el terminal.
El contador de FPS debería medir la ruta completa del fotograma manual
Console.step_until_next_frame()
Console.render_framebuffer()
draw_framebuffer(...)
pygame.display.flip()Ejemplo de implementación sugerida
import time
FPS_REPORT_INTERVAL_SECONDS = 1.0
...
running = True
last_fps_report_time = time.perf_counter()
frames_since_last_report = 0
while running:
...
executed = console.step_until_next_frame()
framebuffer = console.render_framebuffer()
draw_framebuffer(window, framebuffer, SCALE)
pygame.display.flip()
frames_since_last_report += 1
now = time.perf_counter()
elapsed = now - last_fps_report_time
if elapsed >= FPS_REPORT_INTERVAL_SECONDS:
fps = frames_since_last_report / elapsed
print(f"fps={fps:.1f}")
frames_since_last_report = 0
last_fps_report_time = nowImportante
Esto es intencionadamente sencillo. No separa el tiempo de emulación del tiempo de renderizado. Solo ofrece una señal visible en el terminal antes del trabajo de optimización.
¿Por qué tests de forma del código fuente? main.py abre pygame y ejecuta un bucle manual. Los tests automatizados no deben llamar a main(), abrir una ventana ni requerir una ROM comercial.
Fuera de alcance
- optimizar el dibujado con pygame
- ritmo de fotogramas / límite de velocidad
- perfilar subsistemas individuales
- lanzar PyPy
- llamar a main() desde pytest
Ejecutar esta lección
uv run pytest tests/chapter_10_performance/test_315_main_fps_counter.py -v