Version: 2018.1
iOS-specific optimizations
Optimizing the size of the built iOS Player

Measuring performance with the built-in profiler

Unity iOS and Android contain a built-in profiler. The built-in profiler emits console messages from the game running on device. These messages are written every 30 seconds and will provide insight into how the game is running. Understanding what these messages mean is not always easy, but as a minimum, you should quickly be able to determine if your game is CPU or GPU bound, and if CPU bound whether it’s script code, or perhaps Mono garbage collection that is slowing you down. See later in this page to learn how to configure the built-in profiler.

What the profiler tells you

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

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 кадров.

General CPU activity

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

Rendering statistics

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

Detailed Unity Player statistics

The player-detail section provides a detailed breakdown of what is happening inside the engine:

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

Detailed script statistics

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

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

Detailed statistics on memory allocated by scripts

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

Property: Function:
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 (Deprecated) 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-specific optimizations
Optimizing the size of the built iOS Player