Строка имени
XR_ANDROID_performance_metrics
Тип расширения
Расширение экземпляра
Зарегистрированный внутренний номер
466
Дата последнего изменения
2024-09-06
IP-статус
Нет известных претензий на интеллектуальную собственность.
Зависимости расширений и версий
Авторы
Дмитрий Котов, Google
Левана Чен, Google
Джаред Файндер, Google
Спенсер Куин, Google
Обзор
Это расширение предоставляет API-интерфейсы для перечисления и запроса различных счетчиков показателей производительности текущего устройства XR, композитора и приложения XR. Разработчики могут выполнять анализ производительности и целевую оптимизацию приложения XR, используя собираемые счетчики показателей производительности. Приложение не должно менять свое поведение в зависимости от показаний счетчика.
Счетчики показателей производительности организованы в заранее определенные значения XrPath
по корневому пути /perfmetrics_android . Приложение может запросить доступные счетчики через xrEnumeratePerformanceMetricsCounterPathsANDROID . Ниже приведен список путей счетчиков показателей производительности, которые могут быть предоставлены на устройствах Android:
- /perfmetrics_android/app/cpu_frametime (миллисекунды, с плавающей запятой) — время, потраченное клиентом на обработку кадра.
- /perfmetrics_android/app/gpu_frametime (миллисекунды, с плавающей запятой) — время, которое клиент тратит на ожидание завершения работы графического процессора для каждого кадра. Примечания:
- Большое время ожидания может означать, что графический процессор занят другими задачами, но не обязательно, что этот клиент выполняет слишком много работы с графическим процессором.
- Время ожидания графического процессора может быть равно нулю, если рендеринг уже был завершен на момент проверки компоновщиком.
- /perfmetrics_android/app/cpu_utilization (процент, число с плавающей запятой) — общий коэффициент использования ЦП приложения, усредненный с течением времени.
- На многоядерных процессорах оно может быть выше 100%.
- /perfmetrics_android/app/gpu_utilization (процент) — общий коэффициент использования графического процессора приложения, усредненный с течением времени.
- /perfmetrics_android/app/motion_to_photon_latency (миллисекунды, с плавающей запятой) — время, затраченное от инициированного пользователем события движения до соответствующего физического обновления изображения на дисплее.
- /perfmetrics_android/compositor/cpu_frametime (миллисекунды, с плавающей запятой) — время, затраченное композитором на обработку кадра.
- /perfmetrics_android/compositor/gpu_frametime (миллисекунды, с плавающей запятой) — время, которое композитор тратит на ожидание завершения работы графического процессора для каждого кадра.
- /perfmetrics_android/compositor/dropped_frame_count (целое число) — общее количество пропущенных кадров из всех приложений.
- /perfmetrics_android/compositor/frames_per_sec (float) — количество кадров компоновщика, отрисовываемых на устройстве в секунду.
- /perfmetrics_android/device/cpu_utilization_average (процент, число с плавающей запятой) — коэффициент использования ЦП устройства, усредненный по всем ядрам и усредненный по времени.
- /perfmetrics_android/device/cpu_utilization_worst (процент, число с плавающей запятой) — коэффициент использования ЦП устройства с наихудшей производительностью ядра, усредненный с течением времени.
- /perfmetrics_android/device/cpu0_utilization через /perfmetrics_android/device/cpuX_utilization (процент, число с плавающей запятой, X — количество ядер ЦП минус одно) — коэффициент использования ЦП устройства на одно ядро ЦП, усредненный с течением времени.
- /perfmetrics_android/device/cpu_ Frequency (МГц, с плавающей запятой) — частота ЦП устройства, усредненная по всем ядрам и усредненная по времени.
- /perfmetrics_android/device/gpu_utilization (процент, число с плавающей запятой) — усредненный по времени коэффициент использования графического процессора устройства.
После создания сеанса приложение может использовать xrSetPerformanceMetricsStateANDROID , чтобы включить систему показателей производительности для этого сеанса. Приложение может использовать xrQueryPerformanceMetricsCounterANDROID для запроса счетчика показателей производительности в сеансе, в котором включена система показателей производительности, или использовать xrGetPerformanceMetricsStateANDROID для запроса, включена ли система показателей производительности.
Чтобы включить функциональность этого расширения, приложение должно передать имя расширения в xrCreateInstance с помощью параметра XrInstanceCreateInfo::enabledExtensionNames, как указано в разделе «Расширения» .
Новые типы флагов
typedef XrFlags64 XrPerformanceMetricsCounterFlagsANDROID;
// Flag bits for XrPerformanceMetricsCounterFlagsANDROID
static const XrPerformanceMetricsCounterFlagsANDROID XR_PERFORMANCE_METRICS_COUNTER_ANY_VALUE_VALID_BIT_ANDROID = 0x00000001;
static const XrPerformanceMetricsCounterFlagsANDROID XR_PERFORMANCE_METRICS_COUNTER_UINT_VALUE_VALID_BIT_ANDROID = 0x00000002;
static const XrPerformanceMetricsCounterFlagsANDROID XR_PERFORMANCE_METRICS_COUNTER_FLOAT_VALUE_VALID_BIT_ANDROID = 0x00000004;
Новые константы перечисления
Перечисление XrStructureType расширено:
-
XR_TYPE_PERFORMANCE_METRICS_STATE_ANDROID
-
XR_TYPE_PERFORMANCE_METRICS_COUNTER_ANDROID
Новые перечисления
typedef enum XrPerformanceMetricsCounterUnitANDROID {
XR_PERFORMANCE_METRICS_COUNTER_UNIT_GENERIC_ANDROID = 0,
XR_PERFORMANCE_METRICS_COUNTER_UNIT_PERCENTAGE_ANDROID = 1,
XR_PERFORMANCE_METRICS_COUNTER_UNIT_MILLISECONDS_ANDROID = 2,
XR_PERFORMANCE_METRICS_COUNTER_UNIT_BYTES_ANDROID = 3,
XR_PERFORMANCE_METRICS_COUNTER_UNIT_HERTZ_ANDROID = 4
} XrPerformanceMetricsCounterUnitANDROID;
Новые структуры
Структура XrPerformanceMetricsStateANDROID определяется как:
typedef struct XrPerformanceMetricsStateANDROID {
XrStructureType type;
void* next;
XrBool32 enabled;
} XrPerformanceMetricsStateANDROID;
Описания участников
-
type
— это XrStructureType этой структуры. -
next
имеет значениеNULL
или указатель на следующую структуру в цепочке структур. Никакие такие структуры не определены в ядре OpenXR или этом расширении. -
enabled
установлено значениеXR_TRUE
, чтобы указать, что система показателей производительности включена, в противном случаеXR_FALSE
при получении состояния. При настройке состояния установите значениеXR_TRUE
, чтобы включить систему показателей производительности, иXR_FALSE
чтобы отключить ее.
XrPerformanceMetricsStateANDROID предоставляется в качестве входных данных при вызове xrSetPerformanceMetricsStateANDROID для включения или отключения системы показателей производительности. XrPerformanceMetricsStateANDROID заполняется как выходной параметр при вызове xrGetPerformanceMetricsStateANDROID для запроса, включена ли система показателей производительности.
Допустимое использование (неявное)
- Расширение
XR_ANDROID_performance_metrics
необходимо включить перед использованием XrPerformanceMetricsStateANDROID. -
type
должен бытьXR_TYPE_PERFORMANCE_METRICS_STATE_ANDROID
-
next
должно бытьNULL
или действительным указателем на следующую структуру в цепочке структур.
Структура XrPerformanceMetricsCounterANDROID определяется как:
typedef struct XrPerformanceMetricsCounterANDROID {
XrStructureType type;
void* next;
XrPerformanceMetricsCounterFlagsANDROID counterFlags;
XrPerformanceMetricsCounterUnitANDROID counterUnit;
uint32_t uintValue;
float floatValue;
} XrPerformanceMetricsCounterANDROID;
Описания участников
-
type
— это XrStructureType этой структуры. -
next
имеет значениеNULL
или указатель на следующую структуру в цепочке структур. Такие структуры не определены в ядре OpenXR или этом расширении. -
counterFlags
— это битовая маска XrPerformanceMetricsCounterFlagsANDROID, описывающая допустимость элементов значений. -
counterUnit
— это перечисление XrPerformanceMetricsCounterUnitANDROID, описывающее единицу измерения. -
uintValue
— значение счетчика в форматеuint32_t
. Это допустимо, еслиcounterFlags
содержитXR_PERFORMANCE_METRICS_COUNTER_UINT_VALUE_VALID_BIT_ANDROID
. -
floatValue
— значение счетчика в форматеfloat
. Это допустимо, еслиcounterFlags
содержитXR_PERFORMANCE_METRICS_COUNTER_FLOAT_VALUE_VALID_BIT_ANDROID
.
XrPerformanceMetricsCounterANDROID заполняется путем вызова xrQueryPerformanceMetricsCounterANDROID для запроса информации счетчика показателей производительности в реальном времени.
Допустимое использование (неявное)
- Расширение
XR_ANDROID_performance_metrics
необходимо включить перед использованием XrPerformanceMetricsCounterANDROID. -
type
должен бытьXR_TYPE_PERFORMANCE_METRICS_COUNTER_ANDROID
-
next
должно бытьNULL
или действительным указателем на следующую структуру в цепочке структур. -
counterFlags
должен иметь значение 0 или допустимую комбинацию значений XrPerformanceMetricsCounterFlagsANDROID. -
counterUnit
должен быть допустимым значением XrPerformanceMetricsCounterUnitANDROID.
Новые функции
Функция xrEnumeratePerformanceMetricsCounterPathsANDROID перечисляет все пути счетчиков показателей производительности, которые поддерживаются средой выполнения. Она определяется как:
XrResult xrEnumeratePerformanceMetricsCounterPathsANDROID(
XrInstance instance,
uint32_t counterPathCapacityInput,
uint32_t* counterPathCountOutput,
XrPath* counterPaths);
Описание параметров
-
instance
— это дескриптор XrInstance , ранее созданный с помощью xrCreateInstance . -
counterPathCapacityInput
— это емкость массиваcounterPaths
или 0, чтобы указать запрос на получение необходимой емкости. -
counterPathCountOutput
заполняется средой выполнения количеством записанныхcounterPaths
или требуемой емкостью в случае, еслиcounterPathCapacityInput
недостаточен. -
counterPaths
— это массивXrPath
заполняемый средой выполнения, который содержит все доступные счетчики показателей производительности, но может иметь значениеNULL
, еслиcounterPathCapacityInput
равен 0. - См. раздел «Параметры размера буфера» для подробного описания получения необходимого размера
counterPaths
.
Допустимое использование (неявное)
- Расширение
XR_ANDROID_performance_metrics
необходимо включить перед вызовом xrEnumeratePerformanceMetricsCounterPathsANDROID. -
instance
должен быть действительным дескриптором XrInstance -
counterPathCountOutput
должен быть указателем на значениеuint32_t
- Если
counterPathCapacityInput
не равно 0,counterPaths
должен быть указателем на массив значенийcounterPathCapacityInput
XrPath
Коды возврата
-
XR_SUCCESS
-
XR_ERROR_FUNCTION_UNSUPPORTED
-
XR_ERROR_VALIDATION_FAILURE
-
XR_ERROR_RUNTIME_FAILURE
-
XR_ERROR_HANDLE_INVALID
-
XR_ERROR_INSTANCE_LOST
-
XR_ERROR_SIZE_INSUFFICIENT
Функция xrSetPerformanceMetricsStateANDROID определяется как:
XrResult xrSetPerformanceMetricsStateANDROID(
XrSession session,
const XrPerformanceMetricsStateANDROID* state);
Описание параметров
-
session
— это дескриптор XrSession, ранее созданный с помощью xrCreateSession . -
state
— это указатель на структуру XrPerformanceMetricsStateANDROID .
Функция xrSetPerformanceMetricsStateANDROID включает или отключает систему показателей производительности.
Допустимое использование (неявное)
- Расширение
XR_ANDROID_performance_metrics
необходимо включить перед вызовом xrSetPerformanceMetricsStateANDROID. -
session
должен быть действительным дескриптором XrSession -
state
должно быть указателем на действительную структуру XrPerformanceMetricsStateANDROID.
Коды возврата
-
XR_SUCCESS
-
XR_SESSION_LOSS_PENDING
-
XR_ERROR_FUNCTION_UNSUPPORTED
-
XR_ERROR_VALIDATION_FAILURE
-
XR_ERROR_RUNTIME_FAILURE
-
XR_ERROR_HANDLE_INVALID
-
XR_ERROR_INSTANCE_LOST
-
XR_ERROR_SESSION_LOST
Функция xrGetPerformanceMetricsStateANDROID определяется как:
XrResult xrGetPerformanceMetricsStateANDROID(
XrSession session,
XrPerformanceMetricsStateANDROID* state);
Описание параметров
-
session
— это дескриптор XrSession, ранее созданный с помощью xrCreateSession . -
state
— это указатель на структуру XrPerformanceMetricsStateANDROID .
Функция xrGetPerformanceMetricsStateANDROID получает текущее состояние системы показателей производительности.
Допустимое использование (неявное)
- Расширение
XR_ANDROID_performance_metrics
необходимо включить перед вызовом xrGetPerformanceMetricsStateANDROID. -
session
должен быть действительным дескриптором XrSession -
state
должно быть указателем на структуру XrPerformanceMetricsStateANDROID.
Коды возврата
-
XR_SUCCESS
-
XR_SESSION_LOSS_PENDING
-
XR_ERROR_FUNCTION_UNSUPPORTED
-
XR_ERROR_VALIDATION_FAILURE
-
XR_ERROR_HANDLE_INVALID
-
XR_ERROR_INSTANCE_LOST
-
XR_ERROR_SESSION_LOST
Функция xrQueryPerformanceMetricsCounterANDROID определяется как:
XrResult xrQueryPerformanceMetricsCounterANDROID(
XrSession session,
XrPath counterPath,
XrPerformanceMetricsCounterANDROID* counter);
Описание параметров
-
session
— это дескриптор XrSession, ранее созданный с помощью xrCreateSession . -
counterPath
— допустимый путь счетчика показателей производительности. -
counter
— это указатель на структуру XrPerformanceMetricsCounterANDROID .
Функция xrQueryPerformanceMetricsCounterANDROID запрашивает счетчик показателей производительности.
Приложение должно включить систему показателей производительности, вызвав xrSetPerformanceMetricsStateANDROID перед запросом показателей с помощью xrQueryPerformanceMetricsCounterANDROID .
Допустимое использование (неявное)
- Расширение
XR_ANDROID_performance_metrics
необходимо включить перед вызовом xrQueryPerformanceMetricsCounterANDROID. -
session
должен быть действительным дескриптором XrSession -
counter
должен быть указателем на структуру XrPerformanceMetricsCounterANDROID .
Коды возврата
-
XR_SUCCESS
-
XR_SESSION_LOSS_PENDING
-
XR_ERROR_FUNCTION_UNSUPPORTED
-
XR_ERROR_VALIDATION_FAILURE
-
XR_ERROR_RUNTIME_FAILURE
-
XR_ERROR_HANDLE_INVALID
-
XR_ERROR_INSTANCE_LOST
-
XR_ERROR_SESSION_LOST
-
XR_ERROR_PATH_UNSUPPORTED
-
XR_ERROR_PATH_INVALID