[performance] Карта реплея копирует все точки треков перед сильным прореживанием #25

Closed
opened 2026-10-29 12:24:24 +00:00 by chexit · 1 comment
Owner

Проверено на опубликованном 90379f6 при проверке дополнительного ревью. Незакоммиченные изменения из чужой рабочей копии недоступны.

replay::map каждый тик вызывает tr.path(o,1,self.t) и получает полный новый Vec. Затем рисует лишь ~2–14 сегментов трека по общему бюджету. Дополнительно заново вычисляет статичные границы готовой записи через path(o,20,rec.len).

Проверено оригинальным Track::path: трек из 6000 точек → full Vec 6000×24=144000 байт; прямой вызов path(...,500,...) → 13 точек/312 байт, с сохранением первой и последней. Это пример сокращения временных данных, не GPU/FPS benchmark.

Предложение: определять stride по числу доступных точек до t и бюджету сегментов ДО материализации Vec; использовать iterator/уже существующий path(every). Кэшировать bounds при завершении записи и масштаб/координаты при неизменном размере HUD. При паузе не пересобирать неизменную карту без необходимости.

Критерий: сохранены форма и endpoints видимого пути, head/event markers, перемотка назад/вперёд; memory allocations/CPU time измерены на длинной записи. STEP=2 уже задаёт частоту записи: просто «использовать STEP» само по себе не решает лишнее копирование.

Код:

for p in tr.path(o, 20, rec.len as f64) {
,
let pts = tr.path(o, 1, self.t);
.

Проверено на опубликованном `90379f6` при проверке дополнительного ревью. Незакоммиченные изменения из чужой рабочей копии недоступны. replay::map каждый тик вызывает `tr.path(o,1,self.t)` и получает полный новый Vec<DVec3>. Затем рисует лишь ~2–14 сегментов трека по общему бюджету. Дополнительно заново вычисляет статичные границы готовой записи через path(o,20,rec.len). Проверено оригинальным Track::path: трек из 6000 точек → full Vec 6000×24=144000 байт; прямой вызов path(...,500,...) → 13 точек/312 байт, с сохранением первой и последней. Это пример сокращения временных данных, не GPU/FPS benchmark. Предложение: определять stride по числу доступных точек до t и бюджету сегментов ДО материализации Vec; использовать iterator/уже существующий path(every). Кэшировать bounds при завершении записи и масштаб/координаты при неизменном размере HUD. При паузе не пересобирать неизменную карту без необходимости. Критерий: сохранены форма и endpoints видимого пути, head/event markers, перемотка назад/вперёд; memory allocations/CPU time измерены на длинной записи. STEP=2 уже задаёт частоту записи: просто «использовать STEP» само по себе не решает лишнее копирование. Код: https://gitea.maoniao.team/chexit/airdef/src/commit/90379f6/airdef-mod/src/replay.rs#L597, https://gitea.maoniao.team/chexit/airdef/src/commit/90379f6/airdef-mod/src/replay.rs#L650.
chexit added the area:uineeds:profilingpriority:P2type:performance labels 2026-10-29 13:10:50 +00:00
Author
Owner

🤖 Agent: исправлено в https://gitea.maoniao.team/chexit/airdef/commit/67a2a52 (запушено в main).

🤖 Agent: исправлено в https://gitea.maoniao.team/chexit/airdef/commit/67a2a52 (запушено в main).
Sign in to join this conversation.
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: chexit/airdef#25