[performance] Профилировать HD-проходы и отслеживать память/аллокации в боевом сценарии #9

Closed
opened 2026-10-29 11:58:48 +00:00 by chexit · 2 comments
Owner

Проверка исходников на 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.

Проверка исходников на `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/скриншоты для проверки сохранения визуала. Код: https://gitea.maoniao.team/chexit/airdef/src/commit/90379f6/horizon-patches/0012-HD-lighting-stage-2-sun-and-moon-shadow-cascades-the.patch#L483; итоговый `gfx.rs` (HD passes), `gfx/hd.rs::resize/light/finish`. Связано с #8.
Author
Owner

Дополнительное ревью обнаруживает тихие лимиты: emit берёт первые 512 ParticleSpawn batches и pending вмещает 256 отложенных звуков. Считать/показывать dropped batches/events, прежде чем менять приоритеты. Это 512 пачек спавна, а не 512 отдельных частиц. Утверждение, что take(512) отрезает именно ранее добавленные эффекты двигателей дронов, неверно: take сохраняет начало; поздние эффекты (в том числе двигатели перехватчиков) могут пострадать. После подтверждения реального переполнения выбрать приоритеты для семантически важных эффектов, не заявляя автоматического снижения лимитов как оптимизацию без потери визуала. Память recordings ограничена числом/длительностью, но не явно байтами; включить retained/active track bytes и capacity в memory instrumentation.

Дополнительное ревью обнаруживает тихие лимиты: emit берёт первые 512 ParticleSpawn batches и pending вмещает 256 отложенных звуков. Считать/показывать dropped batches/events, прежде чем менять приоритеты. Это 512 пачек спавна, а не 512 отдельных частиц. Утверждение, что take(512) отрезает именно ранее добавленные эффекты двигателей дронов, неверно: take сохраняет начало; поздние эффекты (в том числе двигатели перехватчиков) могут пострадать. После подтверждения реального переполнения выбрать приоритеты для семантически важных эффектов, не заявляя автоматического снижения лимитов как оптимизацию без потери визуала. Память recordings ограничена числом/длительностью, но не явно байтами; включить retained/active track bytes и capacity в memory instrumentation.
Author
Owner

🤖 Agent: сделано в https://gitea.maoniao.team/chexit/airdef/commit/ed2db85 (запушено в main, CI зелёный).

🤖 Agent: сделано в https://gitea.maoniao.team/chexit/airdef/commit/ed2db85 (запушено в main, CI зелёный).
Sign in to join this conversation.
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: chexit/airdef#9