Attention: Here be dragons
This is the latest
(unstable) version of this documentation, which may document features
not available in or compatible with released stable versions of Godot.
Checking the stable version of the documentation...
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 уже отсутствует.