315. Счётчик FPS в main
Добавляем простой периодический счётчик FPS в main.py.
Урок 315 из 356 · tests/chapter_10_performance/test_315_main_fps_counter.py
Файл для обновления
main.pyЗачем нужен этот шаг
Прежде чем оптимизировать рендеринг pygame или скорость эмулятора, ручной запускатор должен показывать в терминале простой сквозной сигнал FPS.
Счётчик FPS должен измерять полный ручной путь кадра
Console.step_until_next_frame()
Console.render_framebuffer()
draw_framebuffer(...)
pygame.display.flip()Предлагаемый пример реализации
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Важно
Это намеренно просто. Здесь не разделяется время эмуляции и время рендеринга. Это лишь даёт заметный сигнал в терминале перед работой по оптимизации.
Почему тесты формы исходного кода? main.py открывает pygame и запускает ручной цикл. Автоматические тесты не должны вызывать main(), открывать окно или требовать коммерческий ROM.
Вне рамок
- оптимизация отрисовки pygame
- выравнивание кадров / ограничение скорости
- профилирование отдельных подсистем
- запуск PyPy
- вызов main() из pytest
Запустить этот урок
uv run pytest tests/chapter_10_performance/test_315_main_fps_counter.py -v