String de nome
XR_ANDROID_performance_metrics
Tipo de extensão
Extensão de instância
Número de extensão registrado
466
Data da última modificação
2024-09-06
Status do IP
Nenhuma reivindicação de IP conhecida.
Dependências de extensão e versão
Colaboradores
Dmitry Kotov, Google
Levana Chen, Google
Jared Finder, Google
Spencer Quin, Google
Visão geral
Essa extensão oferece APIs para enumerar e consultar vários contadores de métricas de desempenho do dispositivo XR, compositor e aplicativo XR atual. Os desenvolvedores podem realizar análises de desempenho e fazer otimização direcionada no aplicativo de XR usando os contadores de métricas de desempenho coletados. O aplicativo não pode mudar o comportamento com base nas leituras do contador.
Os contadores de métricas de desempenho são organizados em valores
XrPath
predefinidos, no caminho raiz
/perfmetrics_android. Um
aplicativo pode consultar os contadores disponíveis usando
xrEnumeratePerformanceMetricsCounterPathsANDROID. Confira uma lista de caminhos de contador de métricas de desempenho que podem ser fornecidos em dispositivos Android:
- /perfmetrics_android/app/cpu_frametime (milissegundos, float) - tempo de parede gasto pelo cliente para processar um frame.
- /perfmetrics_android/app/gpu_frametime
(milissegundos, float) - tempo de parede que o cliente gastou aguardando a conclusão do trabalho da GPU
por frame. Observações:
- Um tempo de espera alto pode significar que a GPU estava ocupada com outras tarefas, não necessariamente que o cliente está fazendo muito trabalho de GPU.
- O tempo de espera da GPU pode ser zero se a renderização já tiver sido concluída quando verificada pelo compositor.
- /perfmetrics_android/app/cpu_utilization
(porcentagem, float) é a taxa total de uso da CPU do app em média ao longo do tempo.
- Ele pode ser maior que 100% em processadores multicore.
- /perfmetrics_android/app/gpu_utilization (porcentagem): taxa de utilização total da GPU do app em média ao longo do tempo.
- /perfmetrics_android/app/motion_to_photon_latency (milissegundos, float) é o tempo gasto desde o evento de movimento iniciado pelo usuário até a atualização da imagem física correspondente na tela.
- /perfmetrics_android/compositor/cpu_frametime (milissegundos, float) - tempo de parede gasto pelo compositor para processar um frame.
- /perfmetrics_android/compositor/gpu_frametime (milissegundos, float) - tempo de parede que o compositor gastou esperando a GPU ser concluída por frame.
- /perfmetrics_android/compositor/dropped_frame_count (número inteiro) é o número total de frames descartados de todos os apps.
- /perfmetrics_android/compositor/frames_per_second (float) - número de frames do compositor renderizados no dispositivo por segundo.
- /perfmetrics_android/device/cpu_utilization_average (porcentagem, float) é a taxa de utilização da CPU do dispositivo calculada em todos os núcleos e em média ao longo do tempo.
- /perfmetrics_android/device/cpu_utilization_worst (porcentagem, flutuante) - taxa de utilização da CPU do dispositivo do núcleo de pior desempenho em média ao longo do tempo.
- /perfmetrics_android/device/cpu0_utilization até /perfmetrics_android/device/cpuX_utilization (porcentagem, flutuante, X é o número de núcleos de CPU menos um) - taxa de utilização da CPU do dispositivo por núcleo de CPU, em média, ao longo do tempo.
- /perfmetrics_android/device/cpu_frequency (MHz, float) - a frequência da CPU do dispositivo é calculada em todas as cores e em média ao longo do tempo.
- /perfmetrics_android/device/gpu_utilization (porcentagem, flutuante) — taxa de utilização da GPU do dispositivo com média ao longo do tempo.
Depois que uma sessão é criada, um aplicativo pode usar xrSetPerformanceMetricsStateANDROID para ativar o sistema de métricas de desempenho para essa sessão. Um aplicativo pode usar xrQueryPerformanceMetricsCounterANDROID para consultar um contador de métricas de desempenho em uma sessão que tenha o sistema de métricas de desempenho ativado ou usar xrGetPerformanceMetricsStateANDROID para consultar se o sistema de métricas de desempenho está ativado.
Para ativar a funcionalidade dessa extensão, o aplicativo precisa transmitir o nome da extensão para xrCreateInstance usando o parâmetro XrInstanceCreateInfo::enabledExtensionNames conforme indicado na seção Extensões.
Novos tipos de flag
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;
Novas constantes de tipo enumerado
A enumeração XrStructureType foi ampliada com:
XR_TYPE_PERFORMANCE_METRICS_STATE_ANDROID
XR_TYPE_PERFORMANCE_METRICS_COUNTER_ANDROID
Novos tipos enumerados
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;
Novas estruturas
A estrutura XrPerformanceMetricsStateANDROID é definida como:
typedef struct XrPerformanceMetricsStateANDROID {
XrStructureType type;
void* next;
XrBool32 enabled;
} XrPerformanceMetricsStateANDROID;
Descrições dos participantes
type
é o XrStructureType dessa estrutura.next
éNULL
ou um ponteiro para a próxima estrutura em uma cadeia de estruturas. Nenhuma dessas estruturas é definida no núcleo do OpenXR ou nesta extensão.enabled
é definido comoXR_TRUE
para indicar que o sistema de métricas de performance está ativado. Caso contrário,XR_FALSE
é usado ao receber o estado. Ao definir o estado, defina comoXR_TRUE
para ativar o sistema de métricas de desempenho eXR_FALSE
para desativá-lo.
XrPerformanceMetricsStateANDROID é fornecido como entrada ao chamar xrSetPerformanceMetricsStateANDROID para ativar ou desativar o sistema de métricas de desempenho. XrPerformanceMetricsStateANDROID é preenchido como um parâmetro de saída ao chamar xrGetPerformanceMetricsStateANDROID para consultar se o sistema de métricas de desempenho está ativado.
Uso válido (implícito)
- A extensão
XR_ANDROID_performance_metrics
precisa ser ativada antes de usar XrPerformanceMetricsStateANDROID. type
precisa serXR_TYPE_PERFORMANCE_METRICS_STATE_ANDROID
next
precisa serNULL
ou um ponteiro válido para a próxima estrutura em uma cadeia de estruturas
A estrutura XrPerformanceMetricsCounterANDROID é definida como:
typedef struct XrPerformanceMetricsCounterANDROID {
XrStructureType type;
void* next;
XrPerformanceMetricsCounterFlagsANDROID counterFlags;
XrPerformanceMetricsCounterUnitANDROID counterUnit;
uint32_t uintValue;
float floatValue;
} XrPerformanceMetricsCounterANDROID;
Descrições dos participantes
type
é o XrStructureType dessa estrutura.next
éNULL
ou um ponteiro para a próxima estrutura em uma cadeia de estruturas. Nenhuma dessas estruturas é definida no núcleo do OpenXR ou nesta extensão.counterFlags
é uma máscara de bits de XrPerformanceMetricsCounterFlagsANDROID que descreve a validade dos membros de valor.counterUnit
é um tipo enumerado de XrPerformanceMetricsCounterUnitANDROID que descreve a unidade de medida.uintValue
é o valor do contador no formatouint32_t
. É válido secounterFlags
contiverXR_PERFORMANCE_METRICS_COUNTER_UINT_VALUE_VALID_BIT_ANDROID
.floatValue
é o valor do contador no formatofloat
. É válido secounterFlags
contiverXR_PERFORMANCE_METRICS_COUNTER_FLOAT_VALUE_VALID_BIT_ANDROID
.
O XrPerformanceMetricsCounterANDROID é preenchido chamando xrQueryPerformanceMetricsCounterANDROID para consultar informações de contador de métricas de desempenho em tempo real.
Uso válido (implícito)
- A extensão
XR_ANDROID_performance_metrics
precisa ser ativada antes de usar XrPerformanceMetricsCounterANDROID. type
precisa serXR_TYPE_PERFORMANCE_METRICS_COUNTER_ANDROID
next
precisa serNULL
ou um ponteiro válido para a próxima estrutura em uma cadeia de estruturascounterFlags
precisa ser 0 ou uma combinação válida de valores de XrPerformanceMetricsCounterFlagsANDROID.counterUnit
precisa ser um valor XrPerformanceMetricsCounterUnitANDROID válido.
Novas funções
A função xrEnumeratePerformanceMetricsCounterPathsANDROID enumera todos os caminhos de contador de métricas de desempenho que têm suporte do ambiente de execução. Ela é definida como:
XrResult xrEnumeratePerformanceMetricsCounterPathsANDROID(
XrInstance instance,
uint32_t counterPathCapacityInput,
uint32_t* counterPathCountOutput,
XrPath* counterPaths);
Descrições dos parâmetros
instance
é um identificador XrInstance criado anteriormente com xrCreateInstance.counterPathCapacityInput
é a capacidade da matrizcounterPaths
ou 0 para indicar uma solicitação para recuperar a capacidade necessária.- O
counterPathCountOutput
é preenchido pelo ambiente de execução com a contagem decounterPaths
gravada ou a capacidade necessária casocounterPathCapacityInput
seja insuficiente. counterPaths
é uma matriz deXrPath
preenchida pelo ambiente de execução que contém todos os contadores de métricas de performance disponíveis, mas pode serNULL
secounterPathCapacityInput
for 0.- Consulte a seção Parâmetros de tamanho do buffer para uma descrição detalhada
de como recuperar o tamanho
counterPaths
necessário.
Uso válido (implícito)
- A extensão
XR_ANDROID_performance_metrics
precisa ser ativada antes de chamar xrEnumeratePerformanceMetricsCounterPathsANDROID. instance
precisa ser um identificador XrInstance válidocounterPathCountOutput
precisa ser um ponteiro para um valoruint32_t
- Se
counterPathCapacityInput
não for 0,counterPaths
precisa ser um ponteiro para uma matriz de valorescounterPathCapacityInput
XrPath
Códigos de retorno
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
A função xrSetPerformanceMetricsStateANDROID é definida como:
XrResult xrSetPerformanceMetricsStateANDROID(
XrSession session,
const XrPerformanceMetricsStateANDROID* state);
Descrições dos parâmetros
session
é um identificador XrSession criado anteriormente com xrCreateSession.state
é um ponteiro para uma estrutura XrPerformanceMetricsStateANDROID.
A função xrSetPerformanceMetricsStateANDROID ativa ou desativa o sistema de métricas de desempenho.
Uso válido (implícito)
- A extensão
XR_ANDROID_performance_metrics
precisa ser ativada antes de chamar xrSetPerformanceMetricsStateANDROID. session
precisa ser um identificador XrSession válidostate
precisa ser um ponteiro para uma estrutura XrPerformanceMetricsStateANDROID válida.
Códigos de retorno
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
A função xrGetPerformanceMetricsStateANDROID é definida como:
XrResult xrGetPerformanceMetricsStateANDROID(
XrSession session,
XrPerformanceMetricsStateANDROID* state);
Descrições dos parâmetros
session
é um identificador XrSession criado anteriormente com xrCreateSession.state
é um ponteiro para uma estrutura XrPerformanceMetricsStateANDROID.
A função xrGetPerformanceMetricsStateANDROID recebe o estado atual do sistema de métricas de desempenho.
Uso válido (implícito)
- A extensão
XR_ANDROID_performance_metrics
precisa ser ativada antes de chamar xrGetPerformanceMetricsStateANDROID. session
precisa ser um identificador XrSession válidostate
precisa ser um ponteiro para uma estrutura XrPerformanceMetricsStateANDROID.
Códigos de retorno
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
A função xrQueryPerformanceMetricsCounterANDROID é definida como:
XrResult xrQueryPerformanceMetricsCounterANDROID(
XrSession session,
XrPath counterPath,
XrPerformanceMetricsCounterANDROID* counter);
Descrições dos parâmetros
session
é um identificador XrSession criado anteriormente com xrCreateSession.counterPath
é um caminho de contador de métricas de performance válido.counter
é um ponteiro para uma estrutura XrPerformanceMetricsCounterANDROID.
A função xrQueryPerformanceMetricsCounterANDROID consulta um contador de métricas de desempenho.
O aplicativo precisa ativar o sistema de métricas de desempenho chamando xrSetPerformanceMetricsStateANDROID antes de consultar as métricas usando xrQueryPerformanceMetricsCounterANDROID.
Uso válido (implícito)
- A extensão
XR_ANDROID_performance_metrics
precisa ser ativada antes de chamar xrQueryPerformanceMetricsCounterANDROID. session
precisa ser um identificador XrSession válidocounter
precisa ser um ponteiro para uma estrutura XrPerformanceMetricsCounterANDROID.
Códigos de retorno
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