Unity profiler editor loop что такое
Практические советы по использованию профайлера в Unity
Авторизуйтесь
Практические советы по использованию профайлера в Unity
Инструмент профилировки Unity профайлер даёт конкретные данные о производительности игры и облегчает процесс её оптимизации. Профайлер предоставляет покадровые показатели, с помощью которых можно легче выявить проблемные места. Он также даёт информацию о производительности игры вне редактора. Имейте в виду, что использование профайлера частично сказывается на производительности. Чтобы увеличить точность показателей производительности, нужно создать билд для необходимой платформы и запустить игру на целевом устройстве. Хотя наилучшую производительность можно получить на неотладочной сборке (Development Build), профайлер Unity может работать только на отладочной сборке.
Чтобы активировать профайлер в приложении, необходимо в окне Build Settings (File→Build Settings) включить параметры Development Build и Autoconnect Profiler. При запуске приложения профайлер будет запускаться автоматически. Подключить профайлер также можно в Profiler Controls через выпадающий список в редакторе.
Профайлер даёт вам информацию о том, сколько времени требуется приложению на рендер каждого кадра, разбивая это на работу процессора, рендер, память, аудио, физику, UI и сеть.
Примечание Не сравнивайте показания профайлеров разных версий Unity. Разные архитектуры профайлеров по-разному отображают показания.
Профилирование в редакторе
Не стоит забывать о некоторых подводных камнях при профилировании приложения в редакторе. Из-за большого количества открытых окон могут проскакивать лаги. Даже рендер в самом редакторе даёт о себе знать. Поэтому крайне важно хоть иногда профилировать приложение на целевом устройстве и не полагаться только на данные из редактора.
Deep Profile
В этом режиме отдельно записываются вызовы каждого метода, обеспечивая чёткое представление дерева методов.
Примечание Начиная с Unity 2017.3, режим deep profile работает не только в редакторе, но и на Android, и на Desktop, с использованием бэкенда Mono.
Профилирование памяти в редакторе
Профилирование памяти в редакторе полезно для понимания общей модели памяти, но не для фактических показателей конкретных устройств.
Статистика рендера
В Unity есть функция отображения статистики рендера в реальном времени (окно Game). Туда входят fps, батчи draw calls, использование VRAM, количество вершин и треугольников. Для включения слоя статистики необходимо нажать на кнопку Stats на панели окна Game. Эта статистика поможет анализировать батчинг и GPU производительность, основываясь на количестве вызовов отрисовки.
Статистика в окне Game
Для более детальной статистики рендера можно открыть вкладку рендера в профайлере.
Вкладка рендера, показывающая детальную статистику за кадр
На изображении выше видно, что пустая сцена имеет 5 вызовов SetPass и 5 вызовов отрисовки.
Вызовы отрисовки
Частые вызовы отрисовки с похожими пайплайнами влияют на производительность лучше, чем редкие с разными пайплайнами. Unity кеширует одинаковые вызовы, что ускоряет процесс отрисовки. Для разных вызовов отрисовки Unity создает разные буферы. Это загружает графическую память.
Многопоточный рендер и Graphics Jobs
Многопоточный рендер и Graphics Jobs (Player Settings) чаще всего положительно сказываются на производительности, но во время отладки и профилирования некоторые показатели могут быть «размытыми». Для более точного профилирования можно посмотреть на оптимизацию графики в Unity.
Кадровый отладчик
Кадровый отладчик позволяет остановить игру на определённом кадре и пройтись по основным событиям. С его помощью можно просмотреть, как Unity выстраивает сцену и продумать возможные способы оптимизации. Отладчик также указывает на те GameObject’ы, рендер которых не обязателен. Отключив эти GameObject’ы, можно уменьшить число вызовов отрисовки на один кадр.
Отладчик не показывает отдельные вызовы отрисовки или разницу между ними. Он показывает процесс построения кадра. Только нативные GPU-профайлеры дадут исчерпывающую информацию о вызовах отрисовки (чаще всего привязанную к времени). Кадровый отладчик может оказаться полезным в отладке пайплайна и батчинга (особенно при работе с Unity UI). Детальная информация описана в документации кадрового отладчика.
Профайлер памяти
В этом проекте демонстрируется использование профайлера памяти. Также по нему есть документация.
Снимок с профайлера памяти
Данный инструмент отслеживает память, выделенную подсистемами Unity, а также пользовательскими скриптами (до версии Unity 2017.3). Профайлер не может отслеживать выделение памяти из сторонних инструментов. Начиная с версии Unity 2017.3 профайлер также поддерживает отслеживание управляемых объектов в среде выполнения Mono scripting.
Подробно профайлер можно изучить в этом видео и документации.
Окно Profiler
Подключение к проигрывателям Unity
Профайлер может быть подключен к вашему приложению, выполняющемся прямо на устройстве, либо к проигрывателю, запущенному на другом компьютере. В выпадающем меню Active Profiler отобразятся все проигрыватели, запущенные на устройствах и компьютерах в текущей локальной сети. Имена этих проигрывателей формируются из их типа и имён хостов, на которых они запущены, например “iPhonePlayer (iPhone Тома)”. Чтобы профайлер мог подключиться к проигрывателю, проигрыватель должен быть создан с включённым флажком Development Build в диалоговом окне Build Settings. В том же диалоге можно найти флажок, который позволит автоматически подключать профайлер к проигрывателю при запуске приложения: Autoconnect Profiler.
Элементы управления профайлера
Глубокий профайлинг
Учтите, что глубокий профайлинг привносит очень большие избыточные нагрузки и требует много памяти, в результате чего ваша игра будет работать значительно медленнее при профилировании. Если вы используете очень сложный код, глубокий профайлинг может быть вообще невозможен. Глубокий профайлинг должен довольно быстро работать на небольших играх с простым кодом. Если вы заметили, что включение глубокого профайлинга приводит к такому падению частоты кадров, что игра едва работает, то следует отказаться от использования глубокого профайлинга и использовать способ, описанный ниже. Глубокий профайлинг будет полезен на этапе разработки дизайна игры, чтобы определить как лучше реализовать те или иные ключевые возможности. Учтите, что при использовании глубоко профайлинга на больших проектах может привести к переполнению памяти Unity, делая глубокий профайлинг невозможным.
Ручной профайлинг участков вашего кода будет иметь значительно меньшую излишнюю нагрузку, нежели при использовании глубокого профайлинга. Используйте функции кода Profiler.BeginSample и Profiler.EndSample для включения и отключения профайлинга для нужных вам секций кода.
View SyncTime (Отображение времени синхронизации)
При проигрывании с фиксированной частотой кадров или при включенной вертикальной синхронизации, Unity записывает время ожидания как “Wait For Target FPS”. По умолчанию, это время не отображается в профайлере. Чтобы посмотреть, сколько времени тратится на ожидание, вы можете включить “View SyncTime”. Также это помогает измерить как много времени у вас есть в запасе до снижения частоты кадров.
Временная шкала профайлера
В верхней части окна профайлера отображаются данные о производительности с течением времени. Когда вы запускаете игру, данные записываются каждый кадр и в профайлере выводится история последних нескольких сотен кадров. Клик на определенном кадре выделит его и в нижней части окна отобразит дополнительные данные, записанные в этом кадре. Дополнительные данные будут представлены в виде, соответствующем выделенной области.
Вертикальный масштаб временной шкалы устанавливается автоматически так, чтобы заполнялось вертикальное пространство окна. Заметьте, что вы можете удалить ненужные области для более детального просмотра нужной вам области, например можно удалить области Memory и Rendering, чтобы лучше рассмотреть область CPU. Также для увеличения площади под диаграмму временной шкалы, можно перетащить вниз горизонтальный разделитель между временной шкалой и панелью статистики.
Временная шкала состоит из нескольких областей: CPU Usage, Rendering и Memory. Эти области можно как удалить с помощью нажатия на кнопку закрытия на панели, так и добавить обратно с помощью выпадающего меню Add Area на панели инструментов профайлера.
Обратите внимание, что с помощью цветных меток вы можете контролировать связанные с ними части временной шкалы. Нажмите на метку для отключения отображения соответствующих данных. Метка затемнится и данные будут убраны из графика. Это может быть полезно при определении причин зашкаливающих скачков в графике CPU, например.
The Profiler Window
Профайлер Unity помогает вам оптимизировать вашу игру. Он сообщает вам о том, как много времени тратится в различных областях вашей игры. Например, он может сообщить процент времени, потраченный на рендеринг, анимацию или внутриигровую логику.
Вы можете играть в вашу игру в редакторе с включенным профайлером и он будет записывать данные о производительности. Записанные данные отображаются на временной шкале в окне профайлера, позволяя вам обнаружить зашкаливающие (занимающие больше времени) по сравнению с другими кадры или области. Кликнув по любому кадру на временной шкале, вы его выделите и увидите в нижней части окна Profiler подробную информацию для этого кадра.
Учтите, что профайлинг должен инструментировать ваш код (то есть, внедрять в код набор инструкций для измерения производительности). Эта инструментация немного влияет на производительность игры. Обычно издержки не достаточно велики, чтобы повлиять на частоту кадров игры. При профайлинге обычно имеет значение только пропорциональность (в процентном соотношении) времени, потраченного в определенных областях. Для улучшения производительности сконцентрируйтесь на тех участках игры, что требуют больше всего времени. Сравните результаты профайлинга до и после изменений в коде, чтобы выяснить насколько изменения были эффективны. Иногда сделанный вам изменения для увеличения производительности могут иметь обратный эффект, снижая частоту кадров; будьте готовы к неожиданным результатам оптимизации.
Details of the Profiler window are described in the next page.
См. также
Веб-проигрыватель
Следуйте этим шагам для профайлинга webplayer сборок:
Следуйте этим шагам для включения удалённого профайлинга на устройствах iOS:
Важно: Иногда редактор Unity может не подключиться автоматически к устройству. В таких случаях подключение может быть установлено с помощью выбора соответствующего устройства из выпадающего меню Active Profiler в окне профайлера.
Android
Существует два способа включения удалённого профайлинга на устройствах с Android: WiFi или ADB.
Следуйте этим шагам для профайлинга через WiFi:
Следуйте этим шагам для ADB профайлинга:
Важно: Указанный выше пункт выпадающего меню виден только если в качестве целевой платформы выбран Andoid.
Оптимизация проекта в Unity. Что такое Profiler и для чего он нужен
В Unity есть инструмент, который может предоставить вам четкие данные о производительности вашего приложения, это Profiler, его целью является запись данных о производительности и облегчение процесса оптимизации вашего приложения.
Чтобы открыть Profiler, вам следует выбрать пункт Window > Analysis > Profiler
Profiler даёт вам информацию о том, сколько времени требуется вашей игре на отрисовку каждого кадра, разбивая каждый кадр на разделы: работа процессора, рендер, память, звук, физику,графический интерфейс и сеть.
Но полностью доверяться данным из редактора не стоит, ведь сама unity, да и открытые окна в ней могут влиять на отображаемые данные, по этой причине следует хоть иногда проводить тесты с включенным профилированием на вашей целевой платформе.
Unity также позволяет получить информацию о производительности вашего приложения вне редактора, но стоит всегда держать в уме, что профайлер немного сказывается на производительности. Чтобы увеличить точность показателей производительности, нужно создать сборку для необходимой платформы и запустить игру.
Чтобы запустить профайлер для вашей игры, необходимо в Build Settings включить параметры Development Build и Autoconnect Profiler. При запуске приложения профайлер будет запускаться автоматически. Подключить профайлер также можно в Profiler Controls через выпадающий списокв редакторе.
Важно! Если вы создаете сборку под Android, то в Edit > Project Settings > Editor укажите Any Device
Когда ваша сборка будет готова, не закрывая окно Unity Profiler откройте свою игру. Теперь Unity будет автоматически отображать данные о производительности текущей сборке в окне профайлера.
Deep Profile
В этом режиме записываются вызовы каждого метода, что позволяет четко определить, в какой части кода ваш скрипт потребляет больше всего ресурсов.
Но учтите, что глубокое профилирование требует больших ресурсов и использует большое количество памяти. Это приводит к тому, что ваше приложение работает значительно медленнее во время профилирования. Deep Profiling лучше подходит для небольших игр с простыми скриптами.
Для того, чтобы запустить приложение в этом режиме, вам следует запускать его через консоль с указанием определенных аргументов.
Для включения этого режима на Android используйте аргумент командной строки adb.
Для запуска в редакторе достаточно нажать кнопку в окне Profiler
Frame Debugger позволяет нам остановить игру на определенном кадре и просмотреть отдельные вызовы отрисовки, которые используются при построении этого кадра. Помимо просмотра,отладчик также дает возможность пошагового выполнения, что дает нам возможность посмотреть, как выстраивается сцена.
Открывается отладчик кадров через Window > Analysis > Frame Debugger
При щелчке по элементу на сцене вы сможете увидеть то, в каком виде была модель до вызова отрисовки
Как вы могли заметить, в верхней части есть определенное число из 19. Это порядок отрисовки,стрелочками перемещаясь от 0 до конца (это может быть и не 19) вы можете посмотреть, как выстраивается ваша сцена.
Мы с вами разобрались с одним из основных инструментов, которые позволяют нам определить,где же с нашим приложением что-то не так. Это только первая часть серии статей по оптимизации,в рамках которых мы разберем подробнее Deep Profile, но и другие интересные инструменты.
Profiler window
Access the Profiler window in the Unity Editor via the toolbar: Window > Analysis > Profiler.
See Profiler overview for a summary of how the Profiler works.
Profile window
Profiler Controls
The Profiler controls are in the toolbar at the top of the window. Use these to turn profiling on and off, and navigate through profiled frames. The transport controls are at the far right end of the toolbar. Note that when the game is running and the profiler is collecting data, clicking on any of these transport controls pauses the game. The controls go to the first recorded frame, step one frame back, step one frame forward and go to the last frame respectively.
The Profiler does not keep all recorded frames, so the notion of the first frame should really be though of as the oldest frame that is still kept in memory. The “current” transport button causes the profile statistics window to display data collected in real-time. The Active Profiler popup menu allows you to select whether profiling should be done in the editor or a separate player (for example, a game running on an attached iOS device). Save button lets you write the recorded frames to a file. Correspondingly, Load button reads data saved earlier. You can also load a binary profile data written out by the player (when generating log, set Profiler.enableBinaryLog to enable binary format). If “Load” is clicked while the shift button is pressed, file contents is appended to the current profile frames in memory.
Глубокий профайлинг
При включенной кнопке Deep Profile, все ваши скрипты профилируются, то есть записываются вызовы всех функций. Это полезно, когда вы хотите выяснить куда именно тратится время в коде вашей игры.
Учтите, что глубокий профайлинг привносит очень большие избыточные нагрузки и требует много памяти, в результате чего ваша игра будет работать значительно медленнее при профилировании. Если вы используете очень сложный код, глубокий профайлинг может быть вообще невозможен. Глубокий профайлинг должен довольно быстро работать на небольших играх с простым кодом. Если вы заметили, что включение глубокого профайлинга приводит к такому падению частоты кадров, что игра едва работает, то следует отказаться от использования глубокого профайлинга и использовать способ, описанный ниже. Глубокий профайлинг будет полезен на этапе разработки дизайна игры, чтобы определить как лучше реализовать те или иные ключевые возможности. Учтите, что при использовании глубоко профайлинга на больших проектах может привести к переполнению памяти Unity, делая глубокий профайлинг невозможным.
Manually profiling blocks of your script code will have a smaller overhead than using Deep Profiling. Use Profiler.BeginSample and Profiler.EndSample scripting functions to enable and disable profiling around sections of code.
Color Blind Mode
The Profiler window features a Color Blind Mode, which uses higher contrast colors in the graphs to enhance visibility for users with red-green color blindness (such as deuteranopia, protanopia, or tritanopia). To enable it, click the context menu in the upper-right corner of the Profiler window, and click Color Blind Mode.
View SyncTime (Отображение времени синхронизации)
При проигрывании с фиксированной частотой кадров или при включенной вертикальной синхронизации, Unity записывает время ожидания как “Wait For Target FPS”. По умолчанию, это время не отображается в профайлере. Чтобы посмотреть, сколько времени тратится на ожидание, вы можете включить “View SyncTime”. Также это помогает измерить как много времени у вас есть в запасе до снижения частоты кадров.
Profiler Timeline
В верхней части окна профайлера отображаются данные о производительности с течением времени. Когда вы запускаете игру, данные записываются каждый кадр и в профайлере выводится история последних нескольких сотен кадров. Клик на определенном кадре выделит его и в нижней части окна отобразит дополнительные данные, записанные в этом кадре. Дополнительные данные будут представлены в виде, соответствующем выделенной области.
Вертикальный масштаб временной шкалы устанавливается автоматически так, чтобы заполнялось вертикальное пространство окна. Заметьте, что вы можете удалить ненужные области для более детального просмотра нужной вам области, например можно удалить области Memory и Rendering, чтобы лучше рассмотреть область CPU. Также для увеличения площади под диаграмму временной шкалы, можно перетащить вниз горизонтальный разделитель между временной шкалой и панелью статистики.
Временная шкала состоит из нескольких областей: CPU Usage, Rendering и Memory. Эти области можно как удалить с помощью нажатия на кнопку закрытия на панели, так и добавить обратно с помощью выпадающего меню Add Area на панели инструментов профайлера.
Обратите внимание, что с помощью цветных меток вы можете контролировать связанные с ними части временной шкалы. Нажмите на метку для отключения отображения соответствующих данных. Метка затемнится и данные будут убраны из графика. Это может быть полезно при определении причин зашкаливающих скачков в графике CPU, например.
WebGL
You can use the Unity profiler on WebGL, just like on any other platform. One important distinction is that you cannot attach to running players in WebGL, though, as WebGL uses WebSockets for communication, which will not allow incoming connections on the browser side. Instead, you need to use the “Autoconnect profiler” checkbox in the build settings. Note also that draw calls cannot currently be profiled for WebGL.
Remote Profiling
To profile your game running on another device or a Unity player running on another computer, you can connect the Unity Editor to that other device or computer. The dropdown Active Profiler shows all Unity players running on the local network. These players are identified by player type and the host name running the player “iPhonePlayer (Toms iPhone)”.
To be able to connect to a Unity player, you must launch that Unity player as a Development build (menu: File > Build Settings…).
Check the Development Build option in the dialog box. From here you can also check Autoconnect Profiler to make the Editor and Player Autoconnect at startup.
Enable remote profiling on iOS devices by following these steps:
Note: Sometimes the Unity Editor might not autoconnect to the device. In such cases you can initiate the Profiler connection from Profiler window Active Profiler drop down menu by select appropriate device.
Андроид
There are two methods to enable remote profiling on Android devices: WiFi or ADB.
Следуйте этим шагам для профайлинга через WiFi:
Важно: И устройство с Andoid и компьютер (с запущенным редактором Unity), к которому вы его подключили, оба должны находиться в одной подсети, чтобы редактор мог определить устройство.
Следуйте этим шагам для ADB профайлинга:
Важно: Указанный выше пункт выпадающего меню виден только если в качестве целевой платформы выбран Andoid.
• 2017–05–16 Page amended with no editorial review