[performance] Профилировать HD-проходы и отслеживать память/аллокации в боевом сценарии #9
Reference in New Issue
Block a user
Delete Branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Проверка исходников на
90379f6. Полный Horizon/GPU на Mac не запускался; оценки сложности и ресурсов ниже не являются замерами FPS.Пользователь наблюдает сильное падение FPS на Mac при активном бое с новым HD. Есть CPU/native тесты симуляции, но они не измеряют GPU-стоимость HD. В renderer есть инфраструктура
pass_timingдля shader packs; HD-проходы следует добавить в ту же диагностику.Предлагаемые метрики: CPU simulation/model meshing/encoding; GPU shadow cascade 0/1, G-buffer, lighting, AirDef post, bloom, tone mapping, дополнительные камеры; physical render size, lights/blasts/particles/model vertices, draw calls, bind groups created, длительность кадра p50/p95/p99. GPU timestamp queries — только если поддержаны адаптером, с асинхронным readback и кольцом буферов; не блокировать кадр ожиданием GPU. CPU wall time не выдавать за GPU time.
Проверка памяти: повторить несколько одинаковых налётов и цикл HD on/off + resize; смотреть плато живых GPU-ресурсов и WASM/replay memory. В просмотренных структурах текстуры переиспользуются до resize, HD освобождается при выключении, камеры удаляют старые targets, lights/poses заменяются/очищаются. Явная бесконечная утечка не обнаружена, но это не runtime-доказательство её отсутствия.
Расчёт raw payload только HD targets: G-buffer 4+8+4+4 B/px, lit/fx по 8 B/px, 6 bloom уровней, две Depth32Float shadow maps 2048². Получается ~183.0 MiB при 2560×1600 и ~337.9 MiB при 3840×2160. Не включены основной world target, меши, камеры, драйвер и transient/in-flight ресурсы. Такой фиксированный прирост при включении HD сам по себе не утечка.
Критерий: воспроизводимый сценарий и экспорт диагностики; измерять до/после каждой оптимизации с одинаковым seed, камерой, погодой, разрешением и прогревом. Снять image diff/скриншоты для проверки сохранения визуала.
Код:
gfx.rs(HD passes),gfx/hd.rs::resize/light/finish. Связано с #8.Дополнительное ревью обнаруживает тихие лимиты: emit берёт первые 512 ParticleSpawn batches и pending вмещает 256 отложенных звуков. Считать/показывать dropped batches/events, прежде чем менять приоритеты. Это 512 пачек спавна, а не 512 отдельных частиц. Утверждение, что take(512) отрезает именно ранее добавленные эффекты двигателей дронов, неверно: take сохраняет начало; поздние эффекты (в том числе двигатели перехватчиков) могут пострадать. После подтверждения реального переполнения выбрать приоритеты для семантически важных эффектов, не заявляя автоматического снижения лимитов как оптимизацию без потери визуала. Память recordings ограничена числом/длительностью, но не явно байтами; включить retained/active track bytes и capacity в memory instrumentation.
🤖 Agent: сделано в https://gitea.maoniao.team/chexit/airdef/commit/ed2db85 (запушено в main, CI зелёный).