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) - taxa total de uso da CPU do app com 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) - taxa de utilização da CPU do dispositivo com média em todos os núcleos e 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 calculada 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 média em todos os núcleos e em média ao longo do tempo.
- /perfmetrics_android/device/gpu_utilization (porcentagem, float) - 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 flags
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_ANDROIDXR_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éNULLou 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_TRUEpara 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_TRUEpara ativar o sistema de métricas de desempenho eXR_FALSEpara 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_metricsprecisa ser ativada antes de usar XrPerformanceMetricsStateANDROID. typeprecisa serXR_TYPE_PERFORMANCE_METRICS_STATE_ANDROIDnextprecisa serNULLou 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éNULLou 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 secounterFlagscontiverXR_PERFORMANCE_METRICS_COUNTER_UINT_VALUE_VALID_BIT_ANDROID.floatValueé o valor do contador no formatofloat. É válido secounterFlagscontiverXR_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_metricsprecisa ser ativada antes de usar XrPerformanceMetricsCounterANDROID. typeprecisa serXR_TYPE_PERFORMANCE_METRICS_COUNTER_ANDROIDnextprecisa serNULLou um ponteiro válido para a próxima estrutura em uma cadeia de estruturascounterFlagsprecisa ser 0 ou uma combinação válida de valores de XrPerformanceMetricsCounterFlagsANDROID.counterUnitprecisa 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 matrizcounterPathsou 0 para indicar uma solicitação para recuperar a capacidade necessária.- O
counterPathCountOutputé preenchido pelo ambiente de execução com a contagem decounterPathsgravada ou a capacidade necessária casocounterPathCapacityInputseja insuficiente. counterPathsé uma matriz deXrPathpreenchida pelo ambiente de execução que contém todos os contadores de métricas de performance disponíveis, mas pode serNULLsecounterPathCapacityInputfor 0.- Consulte a seção Parâmetros de tamanho do buffer para uma descrição detalhada
de como recuperar o tamanho
counterPathsnecessário.
Uso válido (implícito)
- A extensão
XR_ANDROID_performance_metricsprecisa ser ativada antes de chamar xrEnumeratePerformanceMetricsCounterPathsANDROID. instanceprecisa ser um identificador XrInstance válidocounterPathCountOutputprecisa ser um ponteiro para um valoruint32_t- Se
counterPathCapacityInputnão for 0,counterPathsprecisa ser um ponteiro para uma matriz de valorescounterPathCapacityInputXrPath
Códigos de retorno
XR_SUCCESS
XR_ERROR_FUNCTION_UNSUPPORTEDXR_ERROR_VALIDATION_FAILUREXR_ERROR_RUNTIME_FAILUREXR_ERROR_HANDLE_INVALIDXR_ERROR_INSTANCE_LOSTXR_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_metricsprecisa ser ativada antes de chamar xrSetPerformanceMetricsStateANDROID. sessionprecisa ser um identificador XrSession válidostateprecisa ser um ponteiro para uma estrutura XrPerformanceMetricsStateANDROID válida.
Códigos de retorno
XR_SUCCESSXR_SESSION_LOSS_PENDING
XR_ERROR_FUNCTION_UNSUPPORTEDXR_ERROR_VALIDATION_FAILUREXR_ERROR_RUNTIME_FAILUREXR_ERROR_HANDLE_INVALIDXR_ERROR_INSTANCE_LOSTXR_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_metricsprecisa ser ativada antes de chamar xrGetPerformanceMetricsStateANDROID. sessionprecisa ser um identificador XrSession válidostateprecisa ser um ponteiro para uma estrutura XrPerformanceMetricsStateANDROID.
Códigos de retorno
XR_SUCCESSXR_SESSION_LOSS_PENDING
XR_ERROR_FUNCTION_UNSUPPORTEDXR_ERROR_VALIDATION_FAILUREXR_ERROR_HANDLE_INVALIDXR_ERROR_INSTANCE_LOSTXR_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_metricsprecisa ser ativada antes de chamar xrQueryPerformanceMetricsCounterANDROID. sessionprecisa ser um identificador XrSession válidocounterprecisa ser um ponteiro para uma estrutura XrPerformanceMetricsCounterANDROID.
Códigos de retorno
XR_SUCCESSXR_SESSION_LOSS_PENDING
XR_ERROR_FUNCTION_UNSUPPORTEDXR_ERROR_VALIDATION_FAILUREXR_ERROR_RUNTIME_FAILUREXR_ERROR_HANDLE_INVALIDXR_ERROR_INSTANCE_LOSTXR_ERROR_SESSION_LOSTXR_ERROR_PATH_UNSUPPORTEDXR_ERROR_PATH_INVALID
O OpenXR™ e o logotipo do OpenXR são marcas registradas do The Khronos Group Inc. e estão registrados como marca registrada na China, na União Europeia, no Japão e no Reino Unido.