Version: 2017.3
Особые оптимизации для iOS
Optimizing the size of the built iOS player

Измерение производительности при помощи встроенного профайлера

Unity iOS и Android содержат встроенный профайлер. Он включён во все версии дополнений и не является Pro функцией (хотя Pro версии содержат расширенный профайлер). Встроенный профайлер вызывает консольные сообщения из игры, запущенной на устройстве. Эти сообщения пишутся каждые 30 секунд и дают представление о том, как работает игра. Не всегда просто понять, что значат эти сообщения, но, как минимум, вы должны уметь быстро определять упирается ли ваша игра в CPU или GPU. А если это CPU, то виноват ли код скрипта, или может это сборка мусора Mono замедляет процесс. Ниже на этой странице, вы сможете научиться настраивать встроенный профайлер.

Что вам сообщает профайлер

Вот пример выходной информации встроенного профайлера.

iPhone/iPad Unity internal profiler stats:
cpu-player> min: 9.8 max: 24.0 avg: 16.3
cpu-ogles-drv> min: 1.8 max: 8.2 avg: 4.3
cpu-waits-gpu> min: 0.8 max: 1.2 avg: 0.9
cpu-present> min: 1.2 max: 3.9 avg: 1.6
frametime> min: 31.9 max: 37.8 avg: 34.1
draw-call #> min: 4 max: 9 avg: 6 | batched: 10
tris #> min: 3590 max: 4561 avg: 3871 | batched: 3572
verts #> min: 1940 max: 2487 avg: 2104 | batched: 1900
player-detail> physx: 1.2 animation: 1.2 culling: 0.5 skinning: 0.0 batching: 0.2 render: 12.0 fixed-update-count: 1 .. 2
mono-scripts> update: 0.5 fixedUpdate: 0.0 coroutines: 0.0 
mono-memory> used heap: 233472 allocated heap: 548864 max number of collections: 1 collection total duration: 5.7

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

Общая активность процессора

cpu-player Отображает время, которое ваша игра затрачивает на запуск кода внутри движка Unity и на запуск скриптов в процессоре.
cpu-ogles-drv Отображает время, затраченное на запуск кода OpenGL ES драйвера в процессоре. Много факторов, вроде количества вызовов отрисовки (Draw Calls), количества изменений внутреннего состояния рендеринга, настроек системы рендеринга и даже количества обработанных вершин, может повлиять на статистику драйвера.
cpu-waits-gpu Отображает время, которое CPU простаивает ожидая, пока GPU завершит рендеринг. Если это число превышает 2–3 милисекунды, то это значит, что в вашем приложении вызывает задержк, скорее всего GPU/fillrate. Если это значение будет слишком маленьким, то профайлер пропустит его отображение.
msaa-resolve Время, затраченное на применение сглаживания (anti-aliasing).
cpu-present Количество времени, затраченное на запуск команды presentRenderbuffer в OpenGL ES.
frametime Демонстрирует общую длительность игрового кадра. Учтите, что iOS устройства всегда зафиксированы на частоте обновления 60 Гц, так что вы всегда будет получать результат равный 16.7 мс (1000ms/60Hz = 16.7ms).

Статистика рендеринга

tris # Общее количество треугольников, отправленных на рендеринг.
verts # Общее число вершин, отправленных на рендеринг. Вам следует сохранять это значение ниже 10000, если используете только статичную геометрию, но если у вас есть много skinned геометрии, то вам нужно сохранять его ещё более низким.
batched Количество вызовов отрисовки, треугольников и вершин, которые были автоматически подвержены батчингу (пакетная обработка) движком. Сравнение этих чисел с общим количеством вызовов отрисовки и треугольников даст вам представление о том, как хорошо ваша сцена подготовлена к батчингу. Распределите столько материалов, сколько возможно среди ваших объектов, чтобы улучшить батчинг.

Детализированная статистика приложения Unity

Раздел player-detail предоставляет детальный разбор того, что происходит внутри движка:-

physx Время, затраченное на физику.
animation Время, затраченное на анимирование костей.
culling Время, затраченное на отсечение объектов за пределами усечённого вида камеры.
skinning Время, затраченное на анимирование skinned мешей.
batching Время, затраченное на батчинг геометрии. Батчинг динамической геометрии существенно сильнее увеличивает нагрузку, нежели батчинг статичной геометрия.
render Время, затраченное на рендеринг видимых объектов.
fixed-update-count Минимальное и максимальное количество запущенных FixedUpdate во время этого кадра. Слишком много FixedUpdate заметно ухудшит производительность.

Детальная статистика скриптов

Раздел mono-scripts предоставляет детальный разбор времени, затраченного на исполнение кода в Mono:

update Общее время, затраченное на исполнение в скриптах всех функций Update().
fixedUpdate Общее время, затраченное на исполнение в скриптах всех функций FixedUpdate().
coroutines Время, затраченное внутри скриптовых сопрограмм.

Детальная статистика по памяти, выделенной скриптами.

Раздел mono-memory даёт представление о том, как память управляется сборщиком мусора Mono:

allocated heap Общее количество памяти, доступное для выделения. Сборка мусора будет вызвана, если для данного выделения в куче будет недостаточно памяти. Если памяти всё ещё будет не хватать, даже после сборки мусора, то тогда выделенная куча увеличится в размере.
used heap Размер выделенной кучи (allocated heap), которая в данный момент используется объектами. Каждый раз, когда вы создаёте новый экземпляр класса (не структуры), это значение будет расти до следующей сборки мусора.
max number of collections Количество проходов сборки мусора во время последних 30-ти кадров.
collection total duration Общее время (в милисекундах), затраченное на все проходы сборки мусора, что произошли за последние 30 кадров.

Настройка

On iOS, it’s disabled by default. To enable it, open the Unity-generated XCode project, select the InternalProfiler.h file, and change the line

 #define ENABLE_INTERNAL_PROFILER 0

на

 #define ENABLE_INTERNAL_PROFILER 1

Выберите в меню XCode View > Debug Area > Activate Console, чтобы отображать консоль выходной информации (GDB), а затем запустите ваш проект. Unity будет выдавать статистику в окно консоли каждые 30 кадров.

To enable it on Android, click the Enable Internal Profiler checkbox in PlayerSettings (Edit > Project Settings > Player). Make sure Development Build is checked in the Build Settings when building, and the statistics should show up in logcat when run on the device. To view logcat, you need adb or the Android Debug Bridge. Once you have that, simply run the shell command adb logcat.

Особые оптимизации для iOS
Optimizing the size of the built iOS player