5.1 KiB
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 байта сохранены.