Files
aego/docs/stage-13.5-performance-debt.md
T
sanspie a6822156cd
ci-platforms / windows amd64 smoke (push) Skipped
ci / release (push) Successful in 8m58s
ci-platforms / darwin amd64 smoke (push) Skipped
ci-platforms / darwin arm64 smoke (push) Skipped
ci / checks (push) Successful in 4m46s
ci / build (amd64, linux, ubuntu-24.04) (push) Successful in 13m28s
Finish Stage 12 editor fixes and refreshed platformer
2026-11-05 17:36:42 +03:00

5.1 KiB
Raw Permalink Blame History

Stage 13.5 — открытый performance debt

Исторические отчёты Stage 12a, включая неуспешные прогоны и измерения, сохранены в истории проекта.

Web demo на Chromium / SwiftShader

Штатный make web-smoke включает tools/websmoke/demo.mjs с принудительным SwiftShader и проверкой ограничения 30 FPS. На локальном Linux-окружении 3 ноября 2026 года повторная проверка неизменённого release export дала 11,3 FPS при допустимых 26–32 FPS — FAIL. В том же прогоне прошли сравнение изображения, сохранение профиля, touch, fullscreen и ограничение DPR; они не отменяют отказ FPS. Аппаратные измерения на других GPU и хостах не заменяют этот software-rendering gate.

На Windows с RTX 5070 тот же строгий smoke с принудительным SwiftShader показал 20,7 FPS, затем 22,0 FPS при допустимых 26–32 — оба прогона остаются FAIL. Отдельная аппаратная диагностическая проверка ограничителя дала 30,0 FPS; повторные аппаратная проба и пять пар PostFX прошли, но не заменяют SwiftShader-проверку. Первоначальные тайм-ауты этих аппаратных проб сохранены.

По согласованной политике make ci этот низкий FPS только на подтверждённом SwiftShader записывается как WARN, а не как пройденная проверка. Прямой make web-smoke остаётся строгим. Верхняя граница FPS, ошибки изображения, другие renderer и остальные проверки по-прежнему останавливают CI.

Также make ci сообщает WARN, если Firefox не успевает подготовить проверку visibility: в таком случае hide/resume не проверен. Тайм-ауты и ошибки уже начатого измерения, как и ошибки Chromium, остаются блокирующими; прямой make stage12-release-check остаётся строгим.

Задача для Stage 13.5 Performance Pass: найти и устранить причину, затем повторить штатный smoke на сопоставимом окружении и записать фактические результаты. Не снижать порог, не отключать проверку и не ухудшать визуальное качество, разрешение, PixelSnap, источники освещения или разрешение теней для её прохождения. Отдельное функциональное принятие Stage 12 с оговорённым исключением не превращает этот FAIL в PASS. Лимит keyframe capture остаётся 1 мс.

Смена web benchmark baseline после Stage 12

В полном локальном CI от 3 ноября старый пользовательский Chromium/SwiftShader baseline от 27 октября дал FAIL: медиана draw calls изменилась с 3,307 до 18,985 на кадр, WebGL calls — с 52,487 до 250,555. Сцена теперь содержит освещение, частицы и PostFX; смена baseline не доказывает, что стоимость этих возможностей оптимальна. Старый baseline в .cache сохранён, отказ не переписывается задним числом. Исследование и оптимизация нагрузки без ухудшения качества остаются задачей Stage 13.5.

Счётчик байтов кадра отдельно исправлен: runtime/metrics публикует часть небольших аллокаций при сбросе allocator cache и мог приписывать их другому кадру. Новый probe берёт актуальные значения runtime.ReadMemStats; он останавливает Go runtime во время измерения и не включён в обычной игре. Значения памяти и тайминги старого и нового методов напрямую не сопоставимы. Для CI используется новый версионированный baseline, но точные сравнения счётчиков, нулевой лимит неразрешённых аллокаций и допуск +24 байта сохранены.