Профайлить полезно всегда и со старта ☝️
В пространстве предположений невозможно оценить последствия изменений, поэтому любые действия будут наугад.
Просто собирать таймштампы - это уже огромная разница по сравнению со слепой разработкой. Станет возможным замечать аномалии сразу при появлении, а не когда они накопились и стали вылезать за бюджет кадра.
Существует два фундаментально разных вида профайлеров: сэмплирующие и инструментальные.
Первые собирают сэмплы с заданной частотой (~1000 раз в секунду или больше) с любого желаемого процесса. Интегрируются сбоку и собирают полный стэк вызовов со всех потоков, что позволяет целостно посмотреть на поведение системы.
Мне понравилось пользоваться samply. Посмотреть результат его захвата можно через firefox profiler. Ещё есть cargo-flamegraph: он хорош тем, что захват пишется в обычный svg. Но мне важны данные во времени, а не только график выгорания.
Но для клиентской части игр сэмплирующий профайлер не совсем подходит: 1000 сэмплов в секунду - это всего лишь 8 сэмплов на кадр при 120 fps. Такой точности недостаточно, чтобы оценить работу некоторых функций. Для детальной диагностики нужен второй тип.
Инструментальный профайлер интегрируется напрямую в код и позволяет оценить промежутки с точностью до наносекунд. Его я написал сам, ведь в примитивном виде это буквально 50 строк (+ немного интерфейса). Но даже такого простого инструмента достаточно, чтобы видеть, как себя чувствует игра и на что тратится время.
rust
programming
gamedev