Read this manual in English

Профилирование

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

Визуальный профилировщик среды выполнения

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

function on_reload(self)
    -- Toggle the visual profiler on hot reload.
    profiler.enable_ui(true)
end

Визуальный профилировщик

Визуальный профилировщик предоставляет ряд различных функций, которые можно использовать для изменения способа отображения данных:


profiler.set_ui_mode()
profiler.set_ui_view_mode()
profiler.view_recorded_frame()

Обратитесь к справочнику по API профилировщика для получения дополнительной информации о функциях профилировщика.

Веб-профилировщик

При запуске отладочной сборки игры интерактивный веб-профилировщик может быть доступен через браузер. Это позволяет вам замерить вашу игру на серии кадров, а затем детально анализировать каждый кадр.

Чтобы получить доступ к профилировщику:

  1. Запустите игру на целевом устройстве.
  2. Выберите меню Debug ▸ Open Web Profiler. В качестве альтернативы, например, когда вы используете несколько платформ одновременно, вы можете открыть веб-браузер и указать в нем http://<device IP>:8002, где <device IP> - это IP-адрес устройства. Вы можете найти IP-адреса ваших целевых устройств в меню Project ▸ Target. Если вы запускаете игру на настольном компьютере, http://localhost:8002 ведет на профилировщик.

Режим веб-профилировщика Вверху, рядом с кнопкой Capture, есть переключатели для переключения между CPU/Frame profiler и Resource Profiler.

CPU/Frame profiler

CPU profiler разделен на 4 раздела, каждый из которых дает разные представления о текущих данных выборки. Чтобы обновить образцы данных, нажмите кнопку Capture вверху.

Веб-профилировщик

Обзор фреймов
Обзор фреймов отображает 20 выбранных в настоящий момент кадров один за другим. Высота каждой полосы показывает время, проведенное в кадре. Число с левой стороны показывает максимальное время, проведенное в кадре в текущих данных выборки.

Обзор фреймов

Под обзором фреймов находится подробное представление данных фрейма.

Щелкните полосу фрейма в обзоре, чтобы отобразить данные для этого конкретного фрейма в окне просмотра данных.

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

Данные кадра

Установка флажка, связанного с точкой выборки или счетчиком, добавляет эти данные на график ниже.

График кадров
Представление графика кадров отображает график по всем выбранным кадрам с данными, которые вы выбрали в таблице данных кадра над графиком. График показывает номер кадра по оси X и время (в миллисекундах) или количество по оси Y. Каждая выбранная точка данных отображается в цвете, указанном в таблице данных фрейма.

График кадров

Временная диаграмма кадра
Временная диаграмма кадра визуально разбивает кадр, что упрощает анализ того, где движок проводит свое время в течение выбранного кадра.

Временная диаграмма кадра

Профилировщик ресурсов

Профилировщик ресурсов поделен на 2 раздела, один из которых показывает иерархическое представление коллекций, игровых объектов и компонентов, инстанцированных в текущий момент в вашей игре, а другой показывает все загруженные в данный момент ресурсы.

Профилировщик ресурсов

Collection view
В Collection view отображается иерархический список всех игровых объектов и компонентов, созданных в данный момент в игре, и из какой коллекции они происходят. Это очень полезный инструмент, когда вам нужно вникнуть и понять, что вы использовали в своей игре в любой момент времени и откуда берутся объекты.
Resources view
В Resources view отображаются все ресурсы, загруженные в память в настоящий момент, их размер и количество ссылок на каждый ресурс. Это полезно при оптимизации использования памяти в вашем приложении, когда вам нужно понять, что загружается в память в любой момент времени.

Отчеты о сборке

При бандлинге вашей игры есть возможность создать отчет о сборке. Это очень полезно, чтобы получить представление о размере всех ассетов, входящих в бандл вашей игры. Просто установите флажок Generate build report при бандлинге игры.

build report

Сборщик создаст файл с именем «report.html» рядом с бандлом игры. Откройте файл в веб-браузере, чтобы изучить отчет:

build report

Раздел Overview дает общую визуальную разбивку размера проекта в зависимости от типа ресурса.

Раздел Resources показывает подробный список ресурсов, которые вы можете отсортировать по размеру, степени сжатия, шифрованию, типу и имени каталога. Используйте поле «search» для фильтрации отображаемых записей ресурсов.

Раздел Structure показывает размеры в зависимости от того, как ресурсы организованы в файловой структуре проекта. Записи имеют цветовую кодировку от зеленого (легкий) до синего (тяжелый) в зависимости от относительного размера файла и содержимого каталога.

Внешние инструменты

В дополнение к встроенным инструментам доступен широкий спектр бесплатных высококачественных инструментов трассировки и профилирования. Ниже приведена их подборка:

ProFi (Lua)
Мы не поставляем никаких встроенных профилировщиков Lua, но есть внешние библиотеки, которые достаточно просты в использовании. Чтобы узнать, на что ваши скрипты тратят время, либо вставьте замеры времени в свой код самостоятельно, либо используйте библиотеку профилирования Lua, такую как ProFi.

https://github.com/jgrahamc/ProFi

Обратите внимание, что профилировщики на чистом Lua добавляют довольно много накладных расходов с каждым устанавливаемым хуком. По этой причине вам следует немного опасаться временных профилей, которые вы получаете такими инструментами. Однако профили подсчета (Counting profiles) достаточно точны.

Instruments (macOS и iOS)
Это анализатор производительности и визуализатор, который является частью Xcode. Он позволяет отслеживать и проверять поведение одного или нескольких приложений или процессов, изучать определенные функции устройства (например, Wi-Fi и Bluetooth) и многое другое.

instruments

OpenGL profiler (macOS)
Часть пакета “Additional Tools for Xcode”, который можно загрузить из Apple (выберите Xcode ▸ Open Developer Tool ▸ More Developer Tools... в меню Xcode).

Этот инструмент позволяет вам анализировать работающее Defold приложение и увидеть, как оно использует OpenGL. Он позволяет вам отслеживать вызовы функций OpenGL, устанавливать точки останова для функций OpenGL, исследовать ресурсы приложения (текстуры, программы, шейдеры и т. д.), просматривать содержимое буфера и проверять другие аспекты состояния OpenGL.

opengl profiler

Android Profiler (Android)
https://developer.android.com/studio/profile/android-profiler.html

Набор инструментов профилирования, который в реальном времени собирает данные о процессоре, памяти и сетевой активности вашей игры. Вы можете выполнять отслеживание выполнения кода методов на основе семплирования, захватывать heap дампы, просматривать выделение памяти и изучать детали файлов, передаваемых по сети. Для использования этого инструмента необходимо установить android:debuggable="true" в файле “AndroidManifest.xml”.

android profiler

Примечание. Начиная с Android Studio 4.1, также можно запускать инструменты профилирования без запуска самой Android Studio.

Graphics API Debugger (Android)
https://github.com/google/gapid

Это набор инструментов, который позволяет вам проверять, настраивать и воспроизводить вызовы от приложения к графическому драйверу. Для использования этого инструмента необходимо установить android:debuggable="true" в “AndroidManifest.xml”.

graphics api debugger