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.py

Por 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 = now

Importante

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