Unity 6.3
0 онлайн 101 гостей 3 в системе
Вход
UI системы Шаг 295 из 317

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:

Маркер PreLateUpdate.UIElementsUpdatePanels в Profiler
Маркер PreLateUpdate.UIElementsUpdatePanels в Profiler

В нижеследующей таблице перечислена последовательность маркеров, требуемых для каждого этапа:

Маркеры Последовательность
<panel-name>.TickScheduledActionsPreLayout
  1. Обновление запланированных пунктов
  2. Обновление фокуса
  3. UIElements.UpdateAssetsInEditor
<panel-name>.ValidateLayout
  1. UIElements.UpdateStyle
  2. UIElements.UpdateLayout
  3. UIElements.UpdateBounds
    UIElements.PickAll (при перемещении указателя)
<panel-name>.TickScheduledActionsPostLayout
  1. UIElements.UpdateAnimation
  2. UIElements.UpdateEditorBindings

PostLateUpdate.UIElementsRepaintPanels

Цикл пост-задержки обновления панели происходит после обратных вызовов ,MonoBehaviour.LateUpdate(), и имеет только фазу PrepareRepaint.

На следующем скриншоте показана иерархия маркера PostLateUpdate.UIElementsRepaintPanels:

Маркер PostLateUpdate.UIElementsRepaintPanels в Profiler
Маркер PostLateUpdate.UIElementsRepaintPanels в Profiler

В следующей таблице перечислена последовательность маркеров, вызванных для фазы PrepareRepaint:

Маркеры Последовательность
<panel-name>.PrepareRepaint
  1. UIElements.UpdateViewData
  2. UIElements.UpdateRuntimeBindings
  3. UIElements.UpdateStyle
  4. UIElements.UpdateLayout
  5. UIElements.UpdateBounds
    UIElements.PickAll (при перемещении указателя)
  6. UIElements.UpdateRenderData

UI.RenderOverlays

Маркер UI.RenderOverlays вызывается после PostLateUpdate.UIElementsRepaintPanels. Он рисует элементы перекрытия над содержимым главной панели.

На следующем скриншоте показана иерархия маркера UI.RenderOverlays:

Маркер UI.RenderOverlays в Profiler
Маркер UI.RenderOverlays в Profiler

Примечание: Этот снимок сделан из проекта, использующего Universal Render Pipeline. Если вы используете встроенный Render Pipeline, UI.RenderOverlays появится под другими маркерами.

В следующей таблице перечислена последовательность маркеров, вызванных для фазы Render:

Маркеры Последовательность
<panel-name>.Render
  • UIR.DrawChain извлекает контент UI Toolkit.
  • Если вы используете элементы режима Immediate, то <class-name>.ImmediateRepaint обрабатывает рисунок.

Цикл редактора

Цикл обновления UI Toolkit для Редактора UI не запускает каждый кадр. Некоторые действия запланированы на выполнение каждые 10 миллисекунд, в то время как обработка событий ввода определяется взаимодействием пользователя. Перекраска окна происходит только при необходимости или при явном запросе с помощью EditorWindow.Repaint(). Каждый EditorWindow имеет панель со своими собственными высокоуровневыми маркерами.

Scheduler.Tick

Запланированные действия обрабатываются каждые 10 миллисекунд. На следующем скриншоте показана иерархия маркера Scheduler.Tick:

Маркер Scheduler.Tick в Profiler
Маркер Scheduler.Tick в Profiler

В следующей таблице перечислена последовательность маркеров, вызванных для фазы TickScheduledActions:

Маркеры Последовательность
<panel-name>.TickScheduledActions
  1. UIElements.UpdateAssetsInEditor
  2. Обновление запланированных пунктов
  3. Обновление фокуса
  4. UIElements.UpdateRuntimeBindings
  5. UIElements.UpdateAnimation
  6. UIElements.UpdateEditorBindings

<window-name>.<mouse-event-name>

При обработке события мыши для обработки события вызывается маркер UIElementsUtility.DoDispatch. Событие делится на две основные фазы: UIElementsUtility.DoDispatch и ValidateLayout.

На следующем скриншоте показана иерархия примера маркера <window-name>.<mouse-event-name>:

Маркер InspectorWindow.MouseMove в Profiler
Маркер InspectorWindow.MouseMove в Profiler

В нижеследующей таблице перечислена последовательность маркеров, требуемых для каждого этапа:

Маркеры Последовательность
<panel-name>.ValidateLayout
  1. UIElements.UpdateStyle
  2. UIElements.UpdateLayout
  3. UIElements.UpdateBounds
    UIElements.PickAll (если указатель перемещается)
    UIElements.UpdateStyle (если изменился элемент hover)
UIElementsUtility.DoDispatch UIElements.PickAll

<window-name> .Repaint

Когда запрашивается перекраска EditorWindow, для обработки перекраски вызывается маркер UIElementsUtility.DoDispatch. Перекраска делится на две основные фазы: Render и PrepareRepaint.

На следующем скриншоте показана иерархия примера маркера <window-name>.Repaint:

Маркер InspectorWindow.Repaint в Profiler
Маркер InspectorWindow.Repaint в Profiler

В нижеследующей таблице перечислена последовательность маркеров, требуемых для каждого этапа:

Маркеры Последовательность
<panel-name>.PrepareRepaint
  1. UIElements.UpdateViewData
  2. UIElements.UpdateStyle
  3. UIElements.UpdateLayout
  4. UIElements.UpdateBounds
    UIElements.PickAll (если указатель перемещается)
    UIElements.UpdateStyle (если изменился элемент hover)
  5. UIElements.UpdateRenderData
<panel-name>.Render
  • UIR.DrawChain извлекает контент UI Toolkit.
  • Если вы используете IMGUIContainers, то отображаются маркеры IMGUIContainer, каждый из которых имеет два маркера OnGUI под собой.
  • Если вы используете элементы режима Немедленный, то <class-name>.ImmediateRepaint обрабатывает рисунок.

Дополнительные ресурсы