Измерение производительности с помощью встроенного профилера
Примечание: Внутренний профайлер объявлен устаревшим и будет убран в одной из будущих версий Unity. Используйте Окно Profiler вместо (меню: Окно > Анализ > Profiler) См. Сбор данных о производительности на устройстве iOS для дополнительной информации о том, как профилировать устройства iOS.
Unity содержит встроенный профилер для iOS, чтобы предоставить представление о том, как работает приложение. Каждые 30 кадров встроенный профилер отправляет сообщения консоли из приложения, запущенного на устройстве, чтобы помочь определить, связано ли оно с CPU или GPU. Если ваше приложение связано с CPU, вы можете определить, является ли причиной узкого места скриптовый код или сбор мусора.
Вот пример вывода встроенного профилера:
iPhone Unity internal profiler stats
frametime> min: 32.5 max: 34.1 avg: 33.3
cpu-player> min: 2.2 max: 4.4 avg: 3.7
batches> min: 3 max: 3 avg: 3
draw calls> min: 3 max: 3 avg: 3
tris> min: 1704 max: 1704 avg: 1704
verts> min: 5088 max: 5088 avg: 5088
dynamic batching> batched draw calls: 0 batches: 0 tris: 0 verts: 0
static batching> batched draw calls: 0 batches: 0 tris: 0 verts: 0
player-detail> physx: 0.0 animation: 0.0 culling 0.0 skinning: 0.0 batching: 0.0 render: 0.0 fixed-update-count: 0 .. 0
scripting-scripts> update: 0.0 fixedUpdate: 0.0 coroutines: 0.0
scripting-memory> information not available on non-development player configuration
Все время измеряется в миллисекундах на кадр. Вы можете проверить минимальное, максимальное и среднее время за последние тридцать кадров.
Общая деятельность CPU
| Свойство | Функция |
|---|---|
| cpu-плеер | Отображает время, затраченное приложением на выполнение кода в движке Unity и на выполнение скриптов в CPU.. |
| cpu-ogles-drv (Android только) | Показывает время выполнения кода драйвера OpenGL ES на CPU. На эту статистику влияет ряд факторов: количество вызовов отрисовки, число внутренних смен состояния рендеринга, настройка конвейера рендеринга и количество обработанных вершин. |
| cpu-present (Android только) | Количество времени, потраченное на выполнение команды presentRenderbuffer в OpenGL ES. |
| время кадра | Представляет общее время кадра приложения. Обратите внимание, что оборудование iOS заблокировано на частоте обновления 60 Гц, поэтому это свойство всегда возвращает время, кратное 16,7 мс (1000 мс/60 Гц = 16,7 мс). |
Статистика отображения
| Свойство | Функция |
|---|---|
| три # | Общее число треугольников, отправленных для отображения. |
| зеленые # | Общее число вершин, отправленных на отрисовку. Если приложение использует только статическую геометрию, старайтесь держать это число ниже 10000. Если в приложении много экземпляров скиннинговой геометрии, значение должно быть существенно меньше. |
| dynamic/static batching | Число рисунков, треугольников и вершин, которые движок автоматически выделил в пакет. Сравнение этих чисел с общим числом рисунков и треугольников может дать вам представление о том, насколько хорошо ваша сцена подготовлена для выделения в пакет. Распределяйте как можно больше материалов между объектами, чтобы улучшить выделение в пакет. |
Подробная статистика игрока Unity
Раздел player-detail предоставляет подробную разбивку того, что происходит внутри двигателя:
| Свойство | Функция |
|---|---|
| Фикс | Время, затраченное на физику. |
| анимация | Время, потраченное на анимацию костей. |
| ликвидация | Время, потраченное на уборку объектов за пределами камеры frustum. |
| skinning | Время, затраченное на применение анимации к мешам со скинами. |
| дозирование | Время, затраченное на пакетирование геометрии. Пакетирование динамической геометрии заметно ресурсоёмче, чем статической. |
| рендер | Время отображения видимых объектов. |
| fixed-update-count | Минимальное и максимальное количество FixedUpdates, выполненных в течение этого кадра. Слишком много FixedUpdates значительно ухудшит производительность. |
Подробная статистика скриптов
Раздел scripting-scripts предоставляет подробную разбивку времени, потраченного на выполнение кода во время выполнения Mono:
| Свойство | Функция |
|---|---|
| обновление | Общее время, затраченное на выполнение всех методов Update() в скриптах. |
| fixedUpdate | Общее время, затраченное на выполнение всех методов FixedUpdate() в скриптах. |
| сопроцедуры | Время, затраченное внутри сопутствующих программ скрипта. |
Подробная статистика памяти, выделяемой скриптами
Раздел scripting-memory дает вам представление о том, как память управляется сборщиком мусора Mono:
| Свойство: | Функция: |
|---|---|
| выделенная куча | Общий объем памяти, доступной для выделений. Сбор мусора запускается, если в куче не осталось достаточно памяти для данного выделения. Если это не высвободит достаточно памяти, выделенный куча будет расти в размере. |
| использованная куча | Часть выделенная куча которая сейчас занята объектами. Каждый раз, когда вы создаёте новый экземпляр класса (а не структуры), это число растёт до следующей сборки мусора. |
| максимальное количество коллекций | Количество проходов сбора мусора за последние 30 кадров. |
| Общая продолжительность сбора | Общее время (в миллисекундах) всех проходов сбора мусора, которые произошли за последние 30 кадров. |
Конфигурация
На iOS внутренний профайлер по умолчанию отключён. Чтобы включить его, воспользуйтесь одним из следующих способов.
Проект Xcode
Чтобы включить внутренний профайлер из проекта Xcode, выполните следующие шаги:
- Откройте проект Xcode, созданный Unity,
- Выберите файл
InternalProfiler.h. - Обновить следующую строку из:
#define ENABLE_INTERNAL_PROFILER 0
до
#define ENABLE_INTERNAL_PROFILER 1
Настройки плеера
Чтобы включить внутренний профайлер в Unity, выполните следующие шаги:
- В главном меню перейдите в Изменить > Project Настройки > Настройки игрока > iOS.
- В разделе Отладка и отчеты о сбоях включите Включить внутреннюю Profiler (Устаревшую).
Примечание: Обеспечить, чтобы Разработка Build опция включена Настройки платформы раздела бюджета Создание профилей окно при создании приложения.
Отображение консоли
Чтобы отобразить консоль вывода, в Xcode выберите Вид > Debug Area > Activate Console и запустите свой проект. Unity выводит статистику в окно консоли каждые 30 кадров.