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_ANDROID
- XR_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.
- nextto- NULLlub 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_ANDROID
- nextmusi 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.
- nextto- NULLlub 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 formacie- uint32_t. Jest prawidłowy, jeśli- counterFlagszawiera- XR_PERFORMANCE_METRICS_COUNTER_UINT_VALUE_VALID_BIT_ANDROID.
- floatValueto wartość licznika w formacie- float. Jest prawidłowy, jeśli- counterFlagszawiera- XR_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_ANDROID
- nextmusi 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ść tablicy- counterPathslub 0, aby wskazać żądanie pobrania wymaganej pojemności.
- counterPathCountOutputjest wypełniane przez środowisko uruchomieniowe za pomocą liczby zapisanych wartości- counterPathslub wymaganej pojemności w przypadku, gdy- counterPathCapacityInputjest niewystarczająca.
- counterPathsto tablica- XrPathwypełniana przez środowisko uruchomieniowe, która zawiera wszystkie dostępne liczniki danych o skuteczności, ale może być- NULL, jeśli- counterPathCapacityInput= 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 XrInstance
- counterPathCountOutputmusi 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_UNSUPPORTED
- XR_ERROR_VALIDATION_FAILURE
- XR_ERROR_RUNTIME_FAILURE
- XR_ERROR_HANDLE_INVALID
- XR_ERROR_INSTANCE_LOST
- XR_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 XrSession
- statemusi być wskaźnikiem do prawidłowej struktury XrPerformanceMetricsStateANDROID
Kody zwracane
- 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
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 XrSession
- statemusi być wskaźnikiem do struktury XrPerformanceMetricsStateANDROID
Kody zwracane
- 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
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 XrSession
- countermusi być wskaźnikiem do struktury XrPerformanceMetricsCounterANDROID
Kody zwracane
- 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
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.
