Использование профилировщиков C++

Чтобы оптимизировать производительность Godot, нужно знать, что именно оптимизировать в первую очередь. Для этого полезны профилировщики.

Примечание

В редакторе имеется встроенный профилировщик GDScript, но использование профилировщика C++ может оказаться полезным в случаях, когда профилировщик GDScript недостаточно точен или в нем отсутствует информация из-за ошибок в профилировщике.

Настройка Godot

Для получения полезной информации о профилировании абсолютно необходимо использовать сборку Godot, включающую отладочные символы. Официальные исполняемые файлы не содержат отладочных символов, поскольку они значительно увеличат размер загружаемого файла.

Чтобы получить данные профилирования, которые наилучшим образом соответствуют производственной среде (но с отладочными символами), следует скомпилировать двоичные файлы с параметрами production=yes debug_symbols=yes SCons.

Можно запустить профилировщик на менее оптимизированных сборках (например, target=template_debug без LTO), но результаты, естественно, будут менее репрезентативны для реальных условий.

Предупреждение

Не удаляйте отладочную символику из двоичных файлов с помощью команды strip после их компиляции. В противном случае вы больше не получите полезной информации о профилировании при запуске профилировщика.

Сравнительный анализ времени запуска/выключения

Если вы хотите оптимизировать производительность запуска и завершения Godot, вы можете указать профилировщику использовать параметр командной строки --quit для исполняемого файла Godot. Это завершит работу Godot сразу после его запуска. Параметр --quit работает с --editor, --project-manager или --path <путь к каталогу проекта> (который запускает проект напрямую).

См. также

Дополнительные аргументы командной строки, поддерживаемые Godot, см. в Руководство по командной строке.

Инструкции, специфичные для профилировщика

VerySleepy

  • Сначала запустите редактор Godot или свой проект. При запуске Менеджера Проектов обязательно сначала отредактируйте или запустите проект. В противном случае профилировщик не будет отслеживать дочерний процесс, поскольку Менеджер Проектов будет создавать дочерний процесс для каждого редактируемого или запускаемого проекта.

  • Откройте VerySleepy и выберите исполняемый файл Godot в списке процессов слева:

../../../_images/cpp_profiler_verysleepy_select_process.png
  • Нажмите кнопку Profile All (Профилировать все) справа, чтобы начать профилирование.

  • Выполните действия, которые вы хотите профилировать, в редакторе или проекте. После завершения нажмите кнопку Stop (Остановить) (не Abort (Прервать)).

  • Дождитесь появления окна с результатами.

  • Когда появится окно с результатами, отфильтруйте результаты, чтобы удалить внешние модули (например, графический драйвер). Вы можете отфильтровать по модулю, найдя строку, в которой Module совпадает с именем исполняемого файла Godot, щёлкнув по ней правой кнопкой мыши и выбрав Filter Module to <имя исполняемого файла Godot> в раскрывающемся списке.

  • Теперь окно с результатами должно выглядеть примерно так:

../../../_images/cpp_profiler_verysleepy_results_filtered.png

HotSpot

  • Откройте HotSpot. Нажмите Record Data (Запись данных):

../../../_images/cpp_profiler_hotspot_welcome.png
  • В следующем окне укажите путь к исполняемому файлу Godot, включающему отладочные символы.

  • Укажите аргументы командной строки для запуска определенного проекта, с редактором или без него.

  • Путь к рабочему каталогу может быть любым, если в аргументе командной строки --path указан абсолютный путь. В противном случае необходимо указать, что относительный путь к проекту является допустимым.

  • Убедитесь, что опция Elevate Privileges (Повышение привилегий) установлена, если у вас есть права администратора. Хотя это не является обязательным для профилирования Godot, это обеспечит регистрацию всех событий. В противном случае некоторые события могут быть пропущены. Ваши настройки должны выглядеть примерно так:

../../../_images/cpp_profiler_hotspot_record.png
  • Нажмите Start Recording (Начать запись) и выполните действия, которые вы хотите профилировать в редакторе/проекте.

  • Завершите работу редактора/проекта обычным способом или воспользуйтесь кнопкой Stop Profiling (Остановить профилирование) в HotSpot, чтобы остановить профилирование раньше времени. Ранняя остановка профилирования может привести к получению более чистых профилей, если вас не интересует процедура завершения работы движка.

  • Нажмите View Results (Просмотреть результаты) и дождитесь создания визуализации профилирования:

../../../_images/cpp_profiler_hotspot_view_results.png
  • Используйте вкладки в верхней части экрана для навигации между различными представлениями. Эти представления отображают одни и те же данные, но по-разному. Вкладка Flame Graph — хороший способ быстро увидеть, какие функции занимают больше всего времени. Поэтому эти функции наиболее важны для оптимизации, поскольку их оптимизация максимально повышает производительность.

  • В нижней части всех вкладок, кроме Summary (Сводки), вы также увидите список потоков ЦП, запущенных движком, а также загрузку ЦП каждым потоком. Это позволяет увидеть потоки, которые могут быть узким местом в определённый момент времени.

../../../_images/cpp_profiler_hotspot_flame_graph.png

Примечание

Если вы не хотите, чтобы процедура запуска была включена в профиль, вы также можете прикрепить HotSpot к запущенному процессу, нажав Record Data (Записать данные), а затем установив в раскрывающемся списке Launch Application (Запустить приложение) значение Attach To Process(es) (Прикрепить к процессу(ам)).

Этот рабочий процесс, основанный на вложениях, похож на тот, который используется в VerySleepy.

Инструменты Xcode

  • Откройте Xcode. Выберите Open Developer Tool (Открыть инструмент разработчика) - Instruments в меню приложения Xcode:

  • Дважды щелкните Time Profiler в окне Instruments:

../../../_images/cpp_profiler_xcode_menu.png
  • В окне Time Profiler нажмите на меню Target (Цель), выберите Choose target... (Выберите цель) и укажите путь к двоичному файлу Godot, аргументы командной строки и переменные окружения в следующем окне.

../../../_images/cpp_profiler_time_profiler.png
  • Вы также можете прикрепить Time Profiler к запущенному процессу, выбрав его в меню Target.

  • Нажмите кнопку Start an immediate mode recording (Начать запись в немедленном режиме), чтобы начать профилирование.

../../../_images/cpp_profiler_time_profiler_record.png
  • Выполните действия, которые вы хотите профилировать в редакторе или проекте. Когда закончите, нажмите кнопку Стоп.

  • Подождите, пока появятся результаты.

  • В нижней части окна вы увидите дерево вызовов для всех запущенных потоков ЦП, а также обзор Heaviest Stack Trace.

  • Выберите Скрыть системные библиотеки (Hide system libraries) в меню Дерево вызовов (Call Tree) (в нижней части окна), чтобы удалить внешние модули.

  • Вы можете использовать временную шкалу в верхней части окна для отображения подробностей за определенный период времени.

../../../_images/cpp_profiler_time_profiler_result.png