UI Toolkit маркеры профилеров
Маркеры профилирования UI Toolkit помогают отслеживать производительность UI. Маркеры предоставляют подробную информацию о времени, затраченном на отображение и обновление UI.. Вы можете использовать маркеры для выявления узких мест в производительности и оптимизации элементов UI.
Чтобы открыть окно Profiler, перейдите в Окно > Анализи выберите нужный параметр. Дополнительную информацию см. в Unity Profiler.
UI Toolkit использует одни и те же метки core profiler как для времени выполнения, так и для Редактора UI, хотя некоторые метки специфичны для Редактора UI.
При профилировании в режиме Игра, профилер отображает эти метки, как описано в Цикл выполнения, для каждой панели Настройки, используемой в вашей игре. В режиме Редактор, профилер отображает эти метки, как описано в Цикл редактора, для каждого открытого окна Редактора.
Примечание: UI Toolkit маркеры отображают различное время между кадрами в Profiler. Это потому, что UI Toolkit кэширует предыдущие вычисления и пытается обработать только то, что изменилось.
Маркеры высокого уровня
Высокоуровневые маркеры помогают найти ваши собственные обращения к UI Toolkit: каждый из них соответствует одной высокоуровневой фазе внутреннего цикла обновления UI Toolkit. Каждый маркер снабжён префиксом с именем панели.
В следующей таблице <panel-name> относится к имени окна Редактора или к имени ассета Настройки панели.
| Маркер | Фаза высокого уровня, которая |
|---|---|
<panel-name>.TickScheduledActions (только для редакторов) |
Расписывает действия для выполнения с интервалом в 10 миллисекунд. |
<panel-name>.TickScheduledActionsPreLayout (только время выполнения) |
Расписывает действия, выполняемые через регулярные промежутки времени до проверки макета. |
<panel-name>.TickScheduledActionsPostLayout (только время выполнения) |
Расписывает действия для выполнения через регулярные промежутки времени после проверки макета. |
<panel-name>.ValidateLayout |
Вычисляет положение визуальных элементов в панели. Для Редактора UI это происходит только если визуальный элемент был изменен после последнего кадра, было обработано событие или запрошено перерисовывание EditorWindow. Для времени выполнения UI это происходит каждый кадр. |
<panel-name>.PrepareRepaint |
Вычисляет данные отображения визуальных элементов в панели. Если свойства элемента, влияющие на их позиции, были изменены в ходе фазы ValidateLayout, фаза PrepareRepaint вычисляет новые позиции. Для Редактора UI это происходит только в том случае, если визуальный элемент был изменен с момента последнего кадра или было запрошено перерисовывание EditorWindow. Для времени выполнения UI это происходит каждый кадр. |
<panel-name>.Render |
Рисует панель. Когда визуальные элементы не изменяются, стоимость этого маркера остается стабильной на протяжении всех кадров. Для Редактора UI это происходит только в том случае, если визуальный элемент был изменён после последнего кадра или был задан запрос на перерисовку EditorWindow. Для времени выполнения UI это происходит каждый кадр. |
Основные маркеры
Основные маркеры соответствуют внутреннему циклу обновления UI Toolkit. Они одинаковы для интерфейса времени выполнения и интерфейса редактора.
| Маркер | Время, потраченное на |
|---|---|
| UIElements.PickAll | Идентифицируйте элемент под указателем или находящийся под ним. |
| UIElements.UpdateRuntimeBindings | Обновить привязки времени выполнения. |
| UIElements.UpdateStyle | Применение таблиц стилей и вычисление разрешенного стиля элемента. |
| UIElements.UpdateLayout | Вычисление и обновление позиции макета каждого элемента. Это включает в себя вызов обратного вызова GeometryChangedEvent. |
| UIElements.UpdateAnimation | Обновить анимацию. |
| UIElements.UpdateRenderData | Подготовка графических данных для рендеринга панели. Это включает время, затраченное на вызов обратных вызовов VisualElement.generateVisualContents. |
| UIR.DrawChain | Нарисовать панель. Когда элементы не изменяются, стоимость этого маркера остается стабильной на протяжении всех кадров. |
<class-name>.ImmediateRepaint |
Рисовать пользовательские элементы непосредственного режима. Стоимость остается стабильной на протяжении кадров, хотя она зависит от реализации пользовательского элемента. |
Маркеры только для редакторов
Следующие метки появляются только при профилировании UI, выполняемого внутри Редактора (либо Editor UI, либо runtime UI в представлении Game).
| Маркер | Время, потраченное на |
|---|---|
| UIElements.UpdateEditorBindings | Обработка запросов на привязку серийных объектов. |
| UIElements.UpdateViewData | Применение свойств к элементам, использующим ViewData. |
| UIElements.UpdateAssetsInEditor | Проверка изменения ассетов, используемых в этой панели. Это происходит как для runtime, так и для Editor UI, но выполняется только в том случае, если для панели включена Live Reload. |
| IMGUIContainer / OnGUI | Обновление элементов IMGUIContainer. OnGUI — это время, затраченное на вызов кода IMGUI, разница — это накладные расходы. Стоимость остается стабильной между кадрами, хотя она зависит от фактической реализации обратного вызова IMGUI. |
Цикл выполнения
Цикл обновления UI Toolkit для времени выполнения UI выполняет одни и те же действия каждый кадр. Каждая активная панель, управляемая Panel Settings с одним или несколькими UI Документами, имеет свои собственные высокоуровневые маркеры.
PreLateUpdate.UIElementsUpdatePanels
Цикл предварительного обновления панели происходит до обратных вызовов ,MonoBehaviour.LateUpdate(), и делится на три основные фазы: TickScheduledActionsPreLayout, ValidateLayoutи TickScheduledActionsPostLayout.
На следующем скриншоте показана иерархия маркера PreLateUpdate.UIElementsUpdatePanels:
В нижеследующей таблице перечислена последовательность маркеров, требуемых для каждого этапа:
| Маркеры | Последовательность |
|---|---|
<panel-name>.TickScheduledActionsPreLayout |
|
<panel-name>.ValidateLayout |
|
<panel-name>.TickScheduledActionsPostLayout |
|
PostLateUpdate.UIElementsRepaintPanels
Цикл пост-задержки обновления панели происходит после обратных вызовов ,MonoBehaviour.LateUpdate(), и имеет только фазу PrepareRepaint.
На следующем скриншоте показана иерархия маркера PostLateUpdate.UIElementsRepaintPanels:
В следующей таблице перечислена последовательность маркеров, вызванных для фазы PrepareRepaint:
| Маркеры | Последовательность |
|---|---|
<panel-name>.PrepareRepaint |
|
UI.RenderOverlays
Маркер UI.RenderOverlays вызывается после PostLateUpdate.UIElementsRepaintPanels. Он рисует элементы перекрытия над содержимым главной панели.
На следующем скриншоте показана иерархия маркера UI.RenderOverlays:
Примечание: Этот снимок сделан из проекта, использующего Universal Render Pipeline. Если вы используете встроенный Render Pipeline, UI.RenderOverlays появится под другими маркерами.
В следующей таблице перечислена последовательность маркеров, вызванных для фазы Render:
| Маркеры | Последовательность |
|---|---|
<panel-name>.Render |
|
Цикл редактора
Цикл обновления UI Toolkit для Редактора UI не запускает каждый кадр. Некоторые действия запланированы на выполнение каждые 10 миллисекунд, в то время как обработка событий ввода определяется взаимодействием пользователя. Перекраска окна происходит только при необходимости или при явном запросе с помощью EditorWindow.Repaint(). Каждый EditorWindow имеет панель со своими собственными высокоуровневыми маркерами.
Scheduler.Tick
Запланированные действия обрабатываются каждые 10 миллисекунд. На следующем скриншоте показана иерархия маркера Scheduler.Tick:
В следующей таблице перечислена последовательность маркеров, вызванных для фазы TickScheduledActions:
| Маркеры | Последовательность |
|---|---|
<panel-name>.TickScheduledActions |
|
<window-name>.<mouse-event-name>
При обработке события мыши для обработки события вызывается маркер UIElementsUtility.DoDispatch. Событие делится на две основные фазы: UIElementsUtility.DoDispatch и ValidateLayout.
На следующем скриншоте показана иерархия примера маркера <window-name>.<mouse-event-name>:
InspectorWindow.MouseMove в ProfilerВ нижеследующей таблице перечислена последовательность маркеров, требуемых для каждого этапа:
| Маркеры | Последовательность |
|---|---|
<panel-name>.ValidateLayout |
|
| UIElementsUtility.DoDispatch | UIElements.PickAll |
<window-name> .Repaint
Когда запрашивается перекраска EditorWindow, для обработки перекраски вызывается маркер UIElementsUtility.DoDispatch. Перекраска делится на две основные фазы: Render и PrepareRepaint.
На следующем скриншоте показана иерархия примера маркера <window-name>.Repaint:
InspectorWindow.Repaint в ProfilerВ нижеследующей таблице перечислена последовательность маркеров, требуемых для каждого этапа:
| Маркеры | Последовательность |
|---|---|
<panel-name>.PrepareRepaint |
|
<panel-name>.Render |
|