Ciąg znaków nazwy
XR_ANDROID_performance_metrics
Typ rozszerzenia
Rozszerzenie instancji
Zarejestrowany numer wewnętrzny
466
Data ostatniej modyfikacji
2024-09-06
Stan adresu IP
Brak znanych roszczeń do praw autorskich do treści objętych ochroną prawną.
Zależności rozszerzeń i wersji
Twórcy
Dmitry Kotov, Google
Levana Chen, Google
Jared Finder, Google
Spencer Quin, Google
Omówienie
To rozszerzenie udostępnia interfejsy API do wyliczania i wyszukiwania różnych liczników danych o wydajności urządzenia XR, kompozytora i aplikacji XR. Deweloperzy mogą przeprowadzić analizę skuteczności i wykonać ukierunkowaną optymalizację aplikacji XR, korzystając z zbieranych liczników danych o skuteczności. Aplikacja nie powinna zmieniać swojego działania na podstawie odczytów licznika.
Liczniki danych o skuteczności są uporządkowane według zdefiniowanych wstępnie wartości XrPath w ścieżce głównej /perfmetrics_android. Aplikacja może wysyłać zapytania do dostępnych liczników za pomocą funkcji xrEnumeratePerformanceMetricsCounterPathsANDROID. Oto lista ścieżek liczników danych o wydajności, które mogą być dostępne na urządzeniach z Androidem:
- /perfmetrics_android/app/cpu_frametime(milisekundy, liczba zmiennoprzecinkowa) – czas, jaki klient poświęcił na przetworzenie ramki.
- /perfmetrics_android/app/gpu_frametime (ms, liczba zmiennoprzecinkowa) – czas, jaki klient spędził na oczekiwaniu na zakończenie pracy GPU na każdą klatkę. Uwagi:
- Długi czas oczekiwania może oznaczać, że procesor GPU był zajęty innymi zadaniami, a niekoniecznie, że ten klient wykonywał zbyt dużo operacji na GPU.
- Czas oczekiwania na GPU może wynosić 0, jeśli renderowanie zostało już ukończone w momencie sprawdzenia przez kompozytora.
- /perfmetrics_android/app/cpu_utilization(wartość procentowa, liczba zmiennoprzecinkowa) – łączne średnie wykorzystanie procesora przez aplikację na przestrzeni czasu.
- W przypadku procesorów wielordzeniowych może ona przekraczać 100%.
- /perfmetrics_android/app/gpu_utilization(procent) – średnia w czasie łączna wartość wykorzystania GPU przez aplikację.
- /perfmetrics_android/app/motion_to_photon_latency (ms, liczba zmiennoprzecinkowa) – czas od zainicjowania przez użytkownika zdarzenia związanego z ruchu do odpowiedniej aktualizacji obrazu fizycznego na wyświetlaczu.
- /perfmetrics_android/compositor/cpu_frametime (milisekundy, liczba zmiennoprzecinkowa) – czas, jaki zajęło procesorowi kompozytorskiemu przetworzenie klatki.
- /perfmetrics_android/compositor/gpu_frametime (ms, liczba zmiennoprzecinkowa) – czas oczekiwania kompozytora na zakończenie pracy GPU na każdą klatkę.
- /perfmetrics_android/compositor/dropped_frame_count(liczba całkowita) – łączna liczba pominiętych klatek ze wszystkich aplikacji.
- /perfmetrics_android/compositor/frames_per_second (float) – liczba klatek kompozytora wyświetlanych na urządzeniu w ciągu sekundy.
- /perfmetrics_android/device/cpu_utilization_average (wartość procentowa, typ float) – średnie wykorzystanie procesora urządzenia na wszystkich rdzeniach uśrednione w czasie.
- /perfmetrics_android/device/cpu_utilization_worst(wartość procentowa, liczba zmiennoprzecinkowa) – średnie wykorzystanie procesora na urządzeniu w najsłabszym rdzeniu w ciągu czasu.
- /perfmetrics_android/device/cpu0_utilization do /perfmetrics_android/device/cpuX_utilization (wartość procentowa, typ float, X to liczba rdzeni procesora pomniejszona o 1) – średnie wykorzystanie procesora urządzenia na rdzeń procesora w czasie.
- /perfmetrics_android/device/cpu_frequency (MHz, float) – średnia częstotliwość procesora urządzenia na wszystkich rdzeniach i średnia w czasie.
- /perfmetrics_android/device/gpu_utilization(procent, liczba zmiennoprzecinkowa) – średnie wykorzystanie GPU urządzenia na przestrzeni czasu.
Po utworzeniu sesji aplikacja może użyć metody xrSetPerformanceMetricsStateANDROID, aby włączyć system danych o skuteczności dla tej sesji. Aplikacja może użyć metody xrQueryPerformanceMetricsCounterANDROID, aby zapytać licznik danych o skuteczności w sesji, w której włączono system danych o skuteczności. Może też użyć metody xrGetPerformanceMetricsStateANDROID, aby sprawdzić, czy system danych o skuteczności jest włączony.
Aby włączyć funkcje tego rozszerzenia, aplikacja powinna przekazać nazwę rozszerzenia do funkcji xrCreateInstance, używając parametru XrInstanceCreateInfo::enabledExtensionNames zgodnie z opisem w sekcji Rozszerzenia.
Nowe typy 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;
Nowe stałe typu wyliczeniowego
Wyliczenie XrStructureType zostało rozszerzone o:
XR_TYPE_PERFORMANCE_METRICS_STATE_ANDROIDXR_TYPE_PERFORMANCE_METRICS_COUNTER_ANDROID
Nowe wartości typu wyliczeniowego
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;
Nowe struktury
Struktura XrPerformanceMetricsStateANDROID jest zdefiniowana jako:
typedef struct XrPerformanceMetricsStateANDROID {
XrStructureType type;
void* next;
XrBool32 enabled;
} XrPerformanceMetricsStateANDROID;
Opisy członków
typeto XrStructureType tej struktury.nexttoNULLlub wskaźnik do następnej struktury w łańcuchu struktury. Nie ma żadnych takich struktur zdefiniowanych w podstawowej wersji OpenXR ani w tym rozszerzeniu.- Wartość
enabledjest ustawiona naXR_TRUE, aby wskazać, że system danych o wydajności jest włączony, lub naXR_FALSE, gdy jest wyłączony. Podczas ustawiania stanu wybierzXR_TRUE, aby włączyć system danych o skuteczności, lubXR_FALSE, aby go wyłączyć.
XrPerformanceMetricsStateANDROID jest przekazywany jako dane wejściowe podczas wywoływania funkcji xrSetPerformanceMetricsStateANDROID w celu włączenia lub wyłączenia systemu pomiarów wydajności. Parametr XrPerformanceMetricsStateANDROID jest wypełniany jako parametr wyjściowy podczas wywoływania funkcji xrGetPerformanceMetricsStateANDROID, aby sprawdzić, czy system danych o wydajności jest włączony.
Prawidłowe użycie (domyślne)
- Przed użyciem XrPerformanceMetricsStateANDROID należy włączyć rozszerzenie
XR_ANDROID_performance_metrics. typemusi byćXR_TYPE_PERFORMANCE_METRICS_STATE_ANDROIDnextmusi byćNULLlub prawidłowym wskaźnikiem do następnej struktury w łańcuchu struktur.
Struktura XrPerformanceMetricsCounterANDROID jest zdefiniowana w ten sposób:
typedef struct XrPerformanceMetricsCounterANDROID {
XrStructureType type;
void* next;
XrPerformanceMetricsCounterFlagsANDROID counterFlags;
XrPerformanceMetricsCounterUnitANDROID counterUnit;
uint32_t uintValue;
float floatValue;
} XrPerformanceMetricsCounterANDROID;
Opisy członków
typeto XrStructureType tej struktury.nexttoNULLlub wskaźnik do następnej struktury w łańcuchu struktury. Nie ma żadnych takich struktur zdefiniowanych w podstawowej wersji OpenXR ani w tym rozszerzeniu.counterFlagsto maska bitowa XrPerformanceMetricsCounterFlagsANDROID, która opisuje poprawność wartości elementów.counterUnitto typ enumeracji XrPerformanceMetricsCounterUnitANDROID opisujący jednostkę miary.uintValueto wartość licznika w formacieuint32_t. Jest prawidłowy, jeślicounterFlagszawieraXR_PERFORMANCE_METRICS_COUNTER_UINT_VALUE_VALID_BIT_ANDROID.floatValueto wartość licznika w formaciefloat. Jest prawidłowy, jeślicounterFlagszawieraXR_PERFORMANCE_METRICS_COUNTER_FLOAT_VALUE_VALID_BIT_ANDROID.
Wartość XrPerformanceMetricsCounterANDROID jest wypełniana przez wywołanie funkcji xrQueryPerformanceMetricsCounterANDROID, aby zapytać o informacje o liczniku danych o wydajności w czasie rzeczywistym.
Prawidłowe użycie (domyślne)
- Przed użyciem funkcji XrPerformanceMetricsCounterANDROID musi być włączone rozszerzenie
XR_ANDROID_performance_metrics. typemusi byćXR_TYPE_PERFORMANCE_METRICS_COUNTER_ANDROIDnextmusi byćNULLlub prawidłowym wskaźnikiem do następnej struktury w łańcuchu struktur.counterFlagsmusi być 0 lub prawidłową kombinacją wartości XrPerformanceMetricsCounterFlagsANDROID.counterUnitmusi być prawidłową wartością XrPerformanceMetricsCounterUnitANDROID.
Nowe funkcje
Funkcja xrEnumeratePerformanceMetricsCounterPathsANDROID wylicza wszystkie ścieżki liczników danych o skuteczności obsługiwane przez środowisko uruchomieniowe. Jest ona zdefiniowana jako:
XrResult xrEnumeratePerformanceMetricsCounterPathsANDROID(
XrInstance instance,
uint32_t counterPathCapacityInput,
uint32_t* counterPathCountOutput,
XrPath* counterPaths);
Opisy parametrów
instanceto obiekt XrInstance utworzony wcześniej za pomocą funkcji xrCreateInstance.counterPathCapacityInputto pojemność tablicycounterPathslub 0, aby wskazać żądanie pobrania wymaganej pojemności.counterPathCountOutputjest wypełniane przez środowisko uruchomieniowe za pomocą liczby zapisanych wartościcounterPathslub wymaganej pojemności w przypadku, gdycounterPathCapacityInputjest niewystarczająca.counterPathsto tablicaXrPathwypełniana przez środowisko uruchomieniowe, która zawiera wszystkie dostępne liczniki danych o skuteczności, ale może byćNULL, jeślicounterPathCapacityInput= 0.- Szczegółowe informacje o pobieraniu wymaganego rozmiaru
counterPathsznajdziesz w sekcji Parametry rozmiaru bufora.
Prawidłowe użycie (domyślne)
- Przed wywołaniem metody xrEnumeratePerformanceMetricsCounterPathsANDROID należy włączyć rozszerzenie
XR_ANDROID_performance_metrics. instancemusi być prawidłowym identyfikatorem XrInstancecounterPathCountOutputmusi być wskaźnikiem na wartośćuint32_t- Jeśli
counterPathCapacityInputnie jest równe 0,counterPathsmusi być wskaźnikiem do tablicy wartościcounterPathCapacityInputXrPath.
Kody zwracane
XR_SUCCESS
XR_ERROR_FUNCTION_UNSUPPORTEDXR_ERROR_VALIDATION_FAILUREXR_ERROR_RUNTIME_FAILUREXR_ERROR_HANDLE_INVALIDXR_ERROR_INSTANCE_LOSTXR_ERROR_SIZE_INSUFFICIENT
Funkcja xrSetPerformanceMetricsStateANDROID jest zdefiniowana w ten sposób:
XrResult xrSetPerformanceMetricsStateANDROID(
XrSession session,
const XrPerformanceMetricsStateANDROID* state);
Opisy parametrów
sessionto identyfikator XrSession utworzony wcześniej za pomocą funkcji xrCreateSession.stateto wskaźnik do struktury XrPerformanceMetricsStateANDROID.
Funkcja xrSetPerformanceMetricsStateANDROID włącza lub wyłącza system pomiarów wydajności.
Prawidłowe użycie (domyślne)
- Przed wywołaniem metody xrSetPerformanceMetricsStateANDROID należy włączyć rozszerzenie
XR_ANDROID_performance_metrics. sessionmusi być prawidłowym identyfikatorem XrSessionstatemusi być wskaźnikiem do prawidłowej struktury XrPerformanceMetricsStateANDROID
Kody zwracane
XR_SUCCESSXR_SESSION_LOSS_PENDING
XR_ERROR_FUNCTION_UNSUPPORTEDXR_ERROR_VALIDATION_FAILUREXR_ERROR_RUNTIME_FAILUREXR_ERROR_HANDLE_INVALIDXR_ERROR_INSTANCE_LOSTXR_ERROR_SESSION_LOST
Funkcja xrGetPerformanceMetricsStateANDROID jest zdefiniowana w ten sposób:
XrResult xrGetPerformanceMetricsStateANDROID(
XrSession session,
XrPerformanceMetricsStateANDROID* state);
Opisy parametrów
sessionto identyfikator XrSession utworzony wcześniej za pomocą funkcji xrCreateSession.stateto wskaźnik do struktury XrPerformanceMetricsStateANDROID.
Funkcja xrGetPerformanceMetricsStateANDROID zwraca bieżący stan systemu danych o wydajności.
Prawidłowe użycie (domyślne)
- Rozszerzenie
XR_ANDROID_performance_metricsmusi być włączone przed wywołaniem xrGetPerformanceMetricsStateANDROID. sessionmusi być prawidłowym identyfikatorem XrSessionstatemusi być wskaźnikiem do struktury XrPerformanceMetricsStateANDROID
Kody zwracane
XR_SUCCESSXR_SESSION_LOSS_PENDING
XR_ERROR_FUNCTION_UNSUPPORTEDXR_ERROR_VALIDATION_FAILUREXR_ERROR_HANDLE_INVALIDXR_ERROR_INSTANCE_LOSTXR_ERROR_SESSION_LOST
Funkcja xrQueryPerformanceMetricsCounterANDROID jest zdefiniowana jako:
XrResult xrQueryPerformanceMetricsCounterANDROID(
XrSession session,
XrPath counterPath,
XrPerformanceMetricsCounterANDROID* counter);
Opisy parametrów
sessionto identyfikator XrSession utworzony wcześniej za pomocą funkcji xrCreateSession.counterPathto prawidłowa ścieżka licznika danych o skuteczności.counterto wskaźnik do struktury XrPerformanceMetricsCounterANDROID.
Funkcja xrQueryPerformanceMetricsCounterANDROID wysyła zapytanie do licznika danych o skuteczności.
Aplikacja powinna włączyć system danych o wydajności, wywołując xrSetPerformanceMetricsStateANDROID przed wysłaniem zapytania o dane za pomocą xrQueryPerformanceMetricsCounterANDROID.
Prawidłowe użycie (domyślne)
- Przed wywołaniem funkcji xrQueryPerformanceMetricsCounterANDROID należy włączyć rozszerzenie
XR_ANDROID_performance_metrics. sessionmusi być prawidłowym identyfikatorem XrSessioncountermusi być wskaźnikiem do struktury XrPerformanceMetricsCounterANDROID
Kody zwracane
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
OpenXR™ i logo OpenXR są znakami towarowymi należącymi do The Khronos Group Inc. i zarejestrowanymi jako znak towarowy w Chinach, Unii Europejskiej, Japonii i Wielkiej Brytanii.