Performance

Наследует: Object

Раскрытие данных о производительности.

Описание

Этот класс предоставляет доступ к ряду различных мониторов, связанных с производительностью, таких как использование памяти, вызовы отрисовки и FPS. Они совпадают со значениями, отображаемыми на вкладке Монитор на панели Отладчик редактора. Используя метод get_monitor() этого класса, вы можете получить доступ к этим данным из своего кода.

Вы можете добавлять пользовательские мониторы с помощью метода add_custom_monitor(). Пользовательские мониторы доступны на вкладке Монитор на панели Отладчик редактора вместе со встроенными мониторами.

Примечание: Некоторые встроенные мониторы доступны только в режиме отладки и всегда возвращают 0 при использовании в проекте, экспортированном в режиме выпуска.

Примечание: Некоторые встроенные мониторы не обновляются в режиме реального времени по соображениям производительности, поэтому между изменениями может быть задержка до 1 секунды.

Примечание: Пользовательские мониторы не поддерживают отрицательные значения. Отрицательные значения ограничиваются 0.

Методы

void

add_custom_monitor(id: StringName, callable: Callable, arguments: Array = [], type: MonitorType = 0)

Variant

get_custom_monitor(id: StringName)

Array[StringName]

get_custom_monitor_names()

PackedInt32Array

get_custom_monitor_types()

float

get_monitor(monitor: Monitor) const

int

get_monitor_modification_time()

bool

has_custom_monitor(id: StringName)

void

remove_custom_monitor(id: StringName)


Перечисления

enum Monitor: 🔗

Monitor TIME_FPS = 0

Количество кадров, отрисованных за последнюю секунду. Эта метрика обновляется только один раз в секунду, даже если запрашивается чаще. Чем выше, тем лучше.

Monitor TIME_PROCESS = 1

Время, необходимое для завершения одного кадра, в секундах. Чем меньше, тем лучше.

Monitor TIME_PHYSICS_PROCESS = 2

Время, необходимое для завершения одного физического кадра, в секундах. Чем меньше, тем лучше.

Monitor TIME_NAVIGATION_PROCESS = 3

Время, необходимое для завершения одного шага навигации, в секундах. Сюда входят обновления навигационной карты, а также расчеты избегания агента. Чем меньше, тем лучше.

Monitor MEMORY_STATIC = 4

Статическая память, используемая в настоящее время, в байтах. Недоступно в сборках релиза. Чем меньше, тем лучше.

Monitor MEMORY_STATIC_MAX = 5

Доступная статическая память. Недоступно в релизных сборках. Чем меньше, тем лучше.

Monitor MEMORY_MESSAGE_BUFFER_MAX = 6

Наибольший объем памяти, который буфер очереди сообщений использовал, в байтах. Очередь сообщений используется для отложенных вызовов функций и уведомлений. Чем меньше, тем лучше.

Monitor OBJECT_COUNT = 7

Количество объектов, экземпляры которых в данный момент созданы (включая узлы). Чем меньше, тем лучше.

Monitor OBJECT_RESOURCE_COUNT = 8

Количество используемых в данный момент ресурсов. Чем меньше, тем лучше.

Monitor OBJECT_NODE_COUNT = 9

Количество узлов, которые в данный момент инстанцированы в дереве сцены. Сюда также входит корневой узел. Чем меньше, тем лучше.

Monitor OBJECT_ORPHAN_NODE_COUNT = 10

Количество узлов-сирот, т.е. узлов, которые не являются дочерними узлами дерева сцены. Чем меньше, тем лучше.

Примечание: Эта опция доступна только в режиме отладки и всегда будет возвращать 0 при использовании в проекте, экспортированном в режиме выпуска.

Monitor RENDER_TOTAL_OBJECTS_IN_FRAME = 11

Общее количество объектов в последнем отрисованном кадре. Эта метрика не включает отбракованные объекты (через скрытие узлов, отбраковку по усеченной области или отбраковку по окклюзии). Чем меньше, тем лучше.

Monitor RENDER_TOTAL_PRIMITIVES_IN_FRAME = 12

Общее количество вершин или индексов, отрендеренных в последнем отрендеренном кадре. Эта метрика не включает примитивы из отбракованных объектов (через скрытие узлов, отбраковку по усеченной пирамиде или отбраковку по окклюзии). Из-за предварительного прохода глубины и проходов теней количество примитивов всегда больше фактического количества вершин в сцене (обычно вдвое или втрое больше исходного количества вершин). Чем меньше, тем лучше.

Monitor RENDER_TOTAL_DRAW_CALLS_IN_FRAME = 13

Общее количество вызовов отрисовки, выполненных в последнем отрендеренном кадре. Эта метрика не включает отбракованные объекты (через скрытие узлов, отбраковку по усеченной пирамиде или отбраковку по окклюзии), поскольку они не приводят к вызовам отрисовки. Чем ниже, тем лучше.

Monitor RENDER_VIDEO_MEM_USED = 14

Объем используемой видеопамяти (объединенная память текстур и вершин, в байтах). Поскольку эта метрика также включает в себя различные выделения, это значение всегда больше суммы RENDER_TEXTURE_MEM_USED и RENDER_BUFFER_MEM_USED. Чем меньше, тем лучше.

Monitor RENDER_TEXTURE_MEM_USED = 15

Объем используемой памяти текстур (в байтах). Чем меньше, тем лучше.

Monitor RENDER_BUFFER_MEM_USED = 16

Объем используемой памяти буфера рендеринга (в байтах). Чем меньше, тем лучше.

Monitor PHYSICS_2D_ACTIVE_OBJECTS = 17

Количество активных узлов RigidBody2D в игре. Чем меньше, тем лучше.

Monitor PHYSICS_2D_COLLISION_PAIRS = 18

Количество пар столкновений в 2D физическом движке. Чем меньше, тем лучше.

Monitor PHYSICS_2D_ISLAND_COUNT = 19

Количество островов в 2D физическом движке. Чем меньше, тем лучше.

Monitor PHYSICS_3D_ACTIVE_OBJECTS = 20

Количество активных узлов RigidBody3D и VehicleBody3D в игре. Чем меньше, тем лучше.

Monitor PHYSICS_3D_COLLISION_PAIRS = 21

Количество пар столкновений в 3D физическом движке. Чем меньше, тем лучше.

Monitor PHYSICS_3D_ISLAND_COUNT = 22

Количество островов в 3D физическом движке. Чем меньше, тем лучше.

Monitor AUDIO_OUTPUT_LATENCY = 23

Задержка вывода AudioServer. Эквивалентно вызову AudioServer.get_output_latency(), не рекомендуется вызывать его каждый кадр.

Monitor NAVIGATION_ACTIVE_MAPS = 24

Количество активных навигационных карт в NavigationServer2D и NavigationServer3D. Сюда также входят пустые навигационные карты по умолчанию, созданные экземплярами World2D и World3D.

Monitor NAVIGATION_REGION_COUNT = 25

Количество активных навигационных регионов в NavigationServer2D и NavigationServer3D.

Monitor NAVIGATION_AGENT_COUNT = 26

Количество активных навигационных агентов, обрабатывающих избегание в NavigationServer2D и NavigationServer3D.

Количество активных навигационных ссылок (link) в NavigationServer2D и NavigationServer3D.

Monitor NAVIGATION_POLYGON_COUNT = 28

Количество полигонов навигационной сетки в NavigationServer2D и NavigationServer3D.

Monitor NAVIGATION_EDGE_COUNT = 29

Количество ребер полигонов навигационной сетки в NavigationServer2D и NavigationServer3D.

Monitor NAVIGATION_EDGE_MERGE_COUNT = 30

Количество ребер полигонов навигационной сетки, которые были объединены из-за перекрытия ключей ребер в NavigationServer2D и NavigationServer3D.

Monitor NAVIGATION_EDGE_CONNECTION_COUNT = 31

Количество ребер полигона, которые считаются соединенными по близости ребер NavigationServer2D и NavigationServer3D.

Monitor NAVIGATION_EDGE_FREE_COUNT = 32

Количество ребер полигонов навигационной сетки, которые не удалось объединить в NavigationServer2D и NavigationServer3D. Ребра по-прежнему могут быть соединены близостью ребер или связями (Link).

Monitor NAVIGATION_OBSTACLE_COUNT = 33

Количество активных навигационных препятствий в NavigationServer2D и NavigationServer3D.

Monitor PIPELINE_COMPILATIONS_CANVAS = 34

Количество компиляций конвейера, которые были запущены рендерером 2D Canvas.

Monitor PIPELINE_COMPILATIONS_MESH = 35

Количество компиляций конвейера, которые были вызваны загрузкой сеток. Эти компиляции будут отображаться как более длительное время загрузки при первом запуске игры пользователем, и конвейер требуется.

Monitor PIPELINE_COMPILATIONS_SURFACE = 36

Количество компиляций конвейера, запущенных при создании кэша поверхности перед рендерингом сцены. Эти компиляции будут проявляться в виде подтормаживаний при загрузке сцены при первом запуске игры пользователем, когда требуется конвейер.

Monitor PIPELINE_COMPILATIONS_DRAW = 37

Количество компиляций конвейера, которые были запущены при отрисовке сцены. Эти компиляции будут отображаться как подтормаживания во время игрового процесса, когда пользователь впервые запускает игру и требуется конвейер.

Monitor PIPELINE_COMPILATIONS_SPECIALIZATION = 38

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

Monitor NAVIGATION_2D_ACTIVE_MAPS = 39

Количество активных навигационных карт в NavigationServer2D. Сюда также входят пустые навигационные карты по умолчанию, созданные экземплярами World2D.

Monitor NAVIGATION_2D_REGION_COUNT = 40

Количество активных навигационных регионов в NavigationServer2D.

Monitor NAVIGATION_2D_AGENT_COUNT = 41

Количество активных навигационных агентов, обрабатывающих избегание в NavigationServer2D.

Количество активных навигационных ссылок в NavigationServer2D.

Monitor NAVIGATION_2D_POLYGON_COUNT = 43

Количество полигонов навигационной сетки в NavigationServer2D.

Monitor NAVIGATION_2D_EDGE_COUNT = 44

Количество ребер полигонов навигационной сетки в NavigationServer2D.

Monitor NAVIGATION_2D_EDGE_MERGE_COUNT = 45

Количество ребер полигонов навигационной сетки, которые были объединены из-за перекрытия ключей ребер в NavigationServer2D.

Monitor NAVIGATION_2D_EDGE_CONNECTION_COUNT = 46

Количество ребер полигона, которые считаются соединенными по близости ребер NavigationServer2D.

Monitor NAVIGATION_2D_EDGE_FREE_COUNT = 47

Количество ребер полигонов навигационной сетки, которые не удалось объединить в NavigationServer2D. Ребра по-прежнему могут быть соединены близостью ребер или ссылками.

Monitor NAVIGATION_2D_OBSTACLE_COUNT = 48

Количество активных навигационных препятствий в NavigationServer2D.

Monitor NAVIGATION_3D_ACTIVE_MAPS = 49

Количество активных навигационных карт в NavigationServer3D. Сюда также входят пустые навигационные карты по умолчанию, созданные экземплярами World3D.

Monitor NAVIGATION_3D_REGION_COUNT = 50

Количество активных навигационных регионов в NavigationServer3D.

Monitor NAVIGATION_3D_AGENT_COUNT = 51

Количество активных навигационных агентов, обрабатывающих избегание в NavigationServer3D.

Количество активных навигационных ссылок в NavigationServer3D.

Monitor NAVIGATION_3D_POLYGON_COUNT = 53

Количество полигонов навигационной сетки в NavigationServer3D.

Monitor NAVIGATION_3D_EDGE_COUNT = 54

Количество ребер полигонов навигационной сетки в NavigationServer3D.

Monitor NAVIGATION_3D_EDGE_MERGE_COUNT = 55

Количество ребер полигонов навигационной сетки, которые были объединены из-за перекрытия ключей ребер в NavigationServer3D.

Monitor NAVIGATION_3D_EDGE_CONNECTION_COUNT = 56

Количество ребер полигона, которые считаются соединенными по близости ребер NavigationServer3D.

Monitor NAVIGATION_3D_EDGE_FREE_COUNT = 57

Количество ребер полигонов навигационной сетки, которые не удалось объединить в NavigationServer3D. Ребра по-прежнему могут быть соединены близостью ребер или связями.

Monitor NAVIGATION_3D_OBSTACLE_COUNT = 58

Количество активных навигационных препятствий в NavigationServer3D.

Monitor MONITOR_MAX = 59

Представляет размер перечисления Monitor.


enum MonitorType: 🔗

MonitorType MONITOR_TYPE_QUANTITY = 0

Вывод на монитор осуществляется в формате целочисленного значения.

MonitorType MONITOR_TYPE_MEMORY = 1

Вывод на монитор осуществляется в формате, соответствующем памяти компьютера. Представленные значения должны представлять собой количество байтов.

MonitorType MONITOR_TYPE_TIME = 2

Вывод монитора форматируется как время в миллисекундах. Представленные значения должны указывать время в секундах (а не в миллисекундах).

MonitorType MONITOR_TYPE_PERCENTAGE = 3

Вывод монитора осуществляется в виде процентов. Представленные значения должны быть дробными, а не представлять собой процент напрямую, например, 0.5 для 50.00%.


Описания метода

void add_custom_monitor(id: StringName, callable: Callable, arguments: Array = [], type: MonitorType = 0) 🔗

Добавляет пользовательский монитор с именем id. Вы можете указать категорию монитора, используя разделители косой черты в id (например: "Game/NumberOfNPCs"). Если есть более одного разделителя косой черты, то используется категория по умолчанию. Категория по умолчанию - "Custom". Выводит ошибку, если указанный id уже присутствует.

func _ready():
    var monitor_value = Callable(self, "get_monitor_value")

    # Добавляет монитор с именем "MyName" в категорию "MyCategory".
    Performance.add_custom_monitor("MyCategory/MyMonitor", monitor_value)

    # Добавляет монитор с именем "MyName" в категорию "Custom".
    # Примечание: "MyCategory/MyMonitor" и "MyMonitor" имеют одинаковое имя, но разные идентификаторы, поэтому код действителен.
    Performance.add_custom_monitor("MyMonitor", monitor_value)

    #Добавляет монитор с именем "MyName" в категорию "Custom".
    # Примечание: "MyMonitor"и "Custom/MyMonitor" имеют одинаковое имя и одну и ту же категорию, но разные идентификаторы, поэтому код действителен.
    Performance.add_custom_monitor("Custom/MyMonitor", monitor_value)

    # Добавляет монитор с именем "MyCategoryOne/MyCategoryTwo/MyMonitor" в категорию "Custom".
    Performance.add_custom_monitor("MyCategoryOne/MyCategoryTwo/MyMonitor", monitor_value)

func get_monitor_value():
    return randi() % 25

Отладчик вызывает вызываемый объект, чтобы получить значение пользовательского монитора. Вызываемый объект должен возвращать ноль или положительное целое число или число с плавающей точкой.

Вызываемые объекты вызываются с аргументами, указанными в массиве аргументов.


Variant get_custom_monitor(id: StringName) 🔗

Возвращает значение пользовательского монитора с заданным id. Вызываемый объект вызывается для получения значения пользовательского монитора. Смотрите также has_custom_monitor(). Выводит сообщение об ошибке, если заданный id отсутствует.


Array[StringName] get_custom_monitor_names() 🔗

Возвращает имена активных пользовательских мониторов в Array.


PackedInt32Array get_custom_monitor_types() 🔗

Возвращает значения MonitorType активных пользовательских мониторов в Array.


float get_monitor(monitor: Monitor) const 🔗

Возвращает значение одного из доступных встроенных мониторов. В качестве аргумента следует указать одну из констант Monitor, например, такую:

print(Performance.get_monitor(Performance.TIME_FPS)) # Выводит значение FPS на консоль.

Смотрите get_custom_monitor() для запроса значений пользовательских мониторов производительности.


int get_monitor_modification_time() 🔗

Возвращает последний тик, в течение которого пользовательский монитор был добавлен/удален (в микросекундах с момента запуска движка). При обновлении монитора устанавливается значение Time.get_ticks_usec().


bool has_custom_monitor(id: StringName) 🔗

Возвращает true, если присутствует пользовательский монитор с указанным id, в противном случае — false.


void remove_custom_monitor(id: StringName) 🔗

Удаляет пользовательский монитор с указанным id. Выводит ошибку, если указанный id уже отсутствует.