Hookshot & Erika
Hookshot Hookshot
Привет, Эрика. Тут новый лог патча вышел сегодня – вроде лаги на сервере поправили, но с новым ИИ ботом все еще подвисает. Может, вместе посмотрим, в чем дело? Может, это баг, а может, просто проблема с производительностью. Ты бы заметила какие-нибудь недочеты в оптимизации?
Erika Erika
Конечно, давай разберемся с логами. Сначала проверим, не выделяет ли ИИ слишком много объектов в кадре, потом посмотрим, нет ли двойной отрисовки или зависшей корутины. Если пики задержки связаны с одним потоком, который ещё и логику ИИ обрабатывает – это классический пропуск в планировщике. Я отмечу всё, что похоже на скрытый узкий участок — не любят сюрпризы с производительностью.
Hookshot Hookshot
Понял, давай начнём с быстрого анализа потребления памяти. Если увидим скачок выделения памяти во время обновления ИИ, это наш подозреваемый. А двойная отрисовка проявится как два одинаковых вызова отрисовки в трассировке GPU. Если попадёшь на один поток, который занимается и поиском пути, и физикой – это типичный перегруз планировщика. Кидай мне цифры, и мы быстрее исправим эту ошибку, чем падение FPS.
Erika Erika
Конечно, скинь профилировщик, дай мне цифры. Если увидим скачок производительности во время цикла ИИ, значит, полный кошмар с генерацией мусора. Двойная отрисовка? Это тревожный сигнал, а не фича. И один поток, который пытается жонглировать поиском пути, физикой и ИИ? Это верный способ зависания. Давай посмотрим данные, и избавимся от лишнего быстрее, чем кадр зависнет.
Hookshot Hookshot
Смотри, по памяти: использование памяти выросло до 18 мегабайт, пик на 60-й миллисекунде цикла ИИ, из них 3 мегабайта – новые объекты каждый кадр. Вызовов отрисовки – 112 на кадр, из них 94 уникальных, 18 – дубликаты (двойная отрисовка). Профилирование потоков показывает, что самый загруженный поток (поток 42) занят на 78%, он обрабатывает поиск пути (30%), физику (25%) и ИИ (23%) в одном цикле. Нужно убрать узкие места: избавляемся от ненужных временных списков в ИИ, дублирования отправки мешей в отрисовке и разделяем потоки физики и ИИ. Это должно вернуть нас к стабильным 60 кадрам в секунду.
Erika Erika
Отлично разобрано. Достань временный список, используй пул, и эти 3 мегабайта просто исчезнут. Удали повторяющиеся отправки мешей и сократи эти 18 draw call'ов – каждый из них – потерянный кадр. Разгрузи физику и ИИ на отдельный поток, снизь эти 78 процентов до разумных 45. С этими изменениями мы добьёмся стабильных 60 FPS, иначе будем винить пинг сервера. Приступаем?
Hookshot Hookshot
Отлично, сейчас возьму профайлер и начну выгружать данные. Как увидим, как временный список начнет расти, перейдем на пул, отключим отправку дублирующейся сетки и разделим физику и ИИ на отдельный поток. Тогда снова будет стабильные 60 кадров в секунду, иначе будем винить пинг сервера. Давай закончим с этим.
Erika Erika
Звучит неплохо. Как только получишь эти данные, закроем временный список и двойную загрузку, и разложим всё по полочкам. Если сервер всё равно тормозить будет – это уже другая история, не ИИ. Давай доведём это до конца.
Hookshot Hookshot
Отлично, я запущу профайлер и вытащу необработанные данные. Как увижу скачок температурного списка, заменим его на пул, уберём лишнюю отправку меша и перекинем физику/ИИ на новый поток. Если сервер всё равно тормозит, это проблема сети, а не кода. Давайте зафиксируем это.