Performance
Наследует: Object
Раскрытие данных о производительности.
Описание
Этот класс предоставляет доступ к ряду различных мониторов, связанных с производительностью, таких как использование памяти, вызовы отрисовки и FPS. Они совпадают со значениями, отображаемыми на вкладке Монитор на панели Отладчик редактора. Используя метод get_monitor() этого класса, вы можете получить доступ к этим данным из своего кода.
Вы можете добавлять пользовательские мониторы с помощью метода add_custom_monitor(). Пользовательские мониторы доступны на вкладке Монитор на панели Отладчик редактора вместе со встроенными мониторами.
Примечание: Некоторые встроенные мониторы доступны только в режиме отладки и всегда возвращают 0 при использовании в проекте, экспортированном в режиме выпуска.
Примечание: Некоторые встроенные мониторы не обновляются в режиме реального времени по соображениям производительности, поэтому между изменениями может быть задержка до 1 секунды.
Примечание: Пользовательские мониторы не поддерживают отрицательные значения. Отрицательные значения ограничиваются 0.
Методы
void |
add_custom_monitor(id: StringName, callable: Callable, arguments: Array = [], type: MonitorType = 0) |
get_monitor(monitor: Monitor) const |
|
void |
Перечисления
enum Monitor: 🔗
Monitor TIME_FPS = 0
Количество кадров, отрисованных за последнюю секунду. Эта метрика обновляется только один раз в секунду, даже если запрашивается чаще. Чем выше, тем лучше.
Monitor TIME_PROCESS = 1
Время, необходимое для завершения одного кадра, в секундах. Чем меньше, тем лучше.
Monitor TIME_PHYSICS_PROCESS = 2
Время, необходимое для завершения одного физического кадра, в секундах. Чем меньше, тем лучше.
Время, необходимое для завершения одного шага навигации, в секундах. Сюда входят обновления навигационной карты, а также расчеты избегания агента. Чем меньше, тем лучше.
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(), не рекомендуется вызывать его каждый кадр.
Количество активных навигационных карт в NavigationServer2D и NavigationServer3D. Сюда также входят пустые навигационные карты по умолчанию, созданные экземплярами World2D и World3D.
Количество активных навигационных регионов в NavigationServer2D и NavigationServer3D.
Количество активных навигационных агентов, обрабатывающих избегание в NavigationServer2D и NavigationServer3D.
Количество активных навигационных ссылок (link) в NavigationServer2D и NavigationServer3D.
Количество полигонов навигационной сетки в NavigationServer2D и NavigationServer3D.
Количество ребер полигонов навигационной сетки в NavigationServer2D и NavigationServer3D.
Количество ребер полигонов навигационной сетки, которые были объединены из-за перекрытия ключей ребер в NavigationServer2D и NavigationServer3D.
Количество ребер полигона, которые считаются соединенными по близости ребер NavigationServer2D и NavigationServer3D.
Количество ребер полигонов навигационной сетки, которые не удалось объединить в NavigationServer2D и NavigationServer3D. Ребра по-прежнему могут быть соединены близостью ребер или связями (Link).
Количество активных навигационных препятствий в 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
Количество компиляций конвейера, которые были запущены для оптимизации текущей сцены. Эти компиляции выполняются в фоновом режиме и не должны вызывать никаких задержек.
Количество активных навигационных карт в NavigationServer2D. Сюда также входят пустые навигационные карты по умолчанию, созданные экземплярами World2D.
Количество активных навигационных регионов в NavigationServer2D.
Количество активных навигационных агентов, обрабатывающих избегание в NavigationServer2D.
Количество активных навигационных ссылок в NavigationServer2D.
Количество полигонов навигационной сетки в NavigationServer2D.
Количество ребер полигонов навигационной сетки в NavigationServer2D.
Количество ребер полигонов навигационной сетки, которые были объединены из-за перекрытия ключей ребер в NavigationServer2D.
Количество ребер полигона, которые считаются соединенными по близости ребер NavigationServer2D.
Количество ребер полигонов навигационной сетки, которые не удалось объединить в NavigationServer2D. Ребра по-прежнему могут быть соединены близостью ребер или ссылками.
Количество активных навигационных препятствий в NavigationServer2D.
Количество активных навигационных карт в NavigationServer3D. Сюда также входят пустые навигационные карты по умолчанию, созданные экземплярами World3D.
Количество активных навигационных регионов в NavigationServer3D.
Количество активных навигационных агентов, обрабатывающих избегание в NavigationServer3D.
Количество активных навигационных ссылок в NavigationServer3D.
Количество полигонов навигационной сетки в NavigationServer3D.
Количество ребер полигонов навигационной сетки в NavigationServer3D.
Количество ребер полигонов навигационной сетки, которые были объединены из-за перекрытия ключей ребер в NavigationServer3D.
Количество ребер полигона, которые считаются соединенными по близости ребер NavigationServer3D.
Количество ребер полигонов навигационной сетки, которые не удалось объединить в NavigationServer3D. Ребра по-прежнему могут быть соединены близостью ребер или связями.
Количество активных навигационных препятствий в 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
public override void _Ready()
{
var monitorValue = new Callable(this, MethodName.GetMonitorValue);
//Добавляет монитор с именем "MyName" в категорию "MyCategory".
Performance.AddCustomMonitor("MyCategory/MyMonitor", monitorValue);
// Добавляет монитор с именем "MyName" в категорию "Custom".
// Примечание: "MyCategory/MyMonitor" и "MyMonitor" имеют одинаковое имя, но разные идентификаторы, поэтому код действителен.
Performance.AddCustomMonitor("MyMonitor", monitorValue);
// Добавляет монитор с именем "MyName" в категорию "Custom".
// Примечание: "MyMonitor"и "Custom/MyMonitor" имеют одинаковое имя и одну и ту же категорию, но разные идентификаторы, поэтому код действителен.
Performance.AddCustomMonitor("Custom/MyMonitor", monitorValue);
// Добавляет монитор с именем "MyCategoryOne/MyCategoryTwo/MyMonitor" в категорию "Custom".
Performance.AddCustomMonitor("MyCategoryOne/MyCategoryTwo/MyMonitor", monitorValue);
}
public int GetMonitorValue()
{
return GD.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 на консоль.
GD.Print(Производительность.Получить монитор(Performance.Monitor.TimeFps)); // Выводит значение 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 уже отсутствует.