XR_ANDROID_performance_metrics OpenXR एक्सटेंशन

Name String

XR_ANDROID_performance_metrics

एक्सटेंशन टाइप

इंस्टेंस एक्सटेंशन

रजिस्टर किया गया एक्सटेंशन नंबर

466

पिछली बार बदलाव करने की तारीख

2024-09-06

आईपी स्टेटस

आईपी पर कोई दावा नहीं किया गया है.

एक्सटेंशन और वर्शन की डिपेंडेंसी

OpenXR 1.0

योगदान देने वाले

दिमित्री कोटोव, Google

लेवाना चेन, Google

जेरेड फ़ाइंडर, Google

स्पेंसर क्विन, Google

खास जानकारी

यह एक्सटेंशन, मौजूदा एक्सआर डिवाइस, कंपोजिटर, और एक्सआर ऐप्लिकेशन की परफ़ॉर्मेंस मेट्रिक के अलग-अलग काउंटर की गिनती करने और उनसे जुड़ी क्वेरी करने के लिए एपीआई उपलब्ध कराता है. डेवलपर, इकट्ठा की जा रही परफ़ॉर्मेंस मेट्रिक के काउंटर का इस्तेमाल करके, परफ़ॉर्मेंस का विश्लेषण कर सकते हैं और XR ऐप्लिकेशन को टारगेट करके ऑप्टिमाइज़ कर सकते हैं. ऐप्लिकेशन को काउंटर रीड के आधार पर, अपने व्यवहार में बदलाव नहीं करना चाहिए.

परफ़ॉर्मेंस मेट्रिक के काउंटर, पहले से तय की गई XrPath वैल्यू में व्यवस्थित किए जाते हैं. ये वैल्यू, रूट पाथ /perfmetrics_android में होती हैं. कोई ऐप्लिकेशन, xrEnumeratePerformanceMetricsCounterPathsANDROID के ज़रिए उपलब्ध काउंटर के बारे में जानकारी पा सकता है. यहां परफ़ॉर्मेंस मेट्रिक के उन काउंटर पाथ की सूची दी गई है जो Android डिवाइसों पर हो सकते हैं:

  • /perfmetrics_android/app/cpu_frametime (मिलीसेकंड, फ़्लोट) - क्लाइंट को एक फ़्रेम को प्रोसेस करने में लगा कुल समय.
  • /perfmetrics_android/app/gpu_frametime (मिलीसेकंड, फ़्लोट) - हर फ़्रेम के लिए, GPU के काम पूरा होने का इंतज़ार करने में क्लाइंट का कुल समय. ध्यान दें:
    • इंतज़ार करने में ज़्यादा समय लगने का मतलब यह हो सकता है कि जीपीयू किसी दूसरे काम में व्यस्त था. ऐसा ज़रूरी नहीं है कि यह क्लाइंट, जीपीयू का ज़्यादा इस्तेमाल कर रहा हो.
    • अगर कंपोजिटर की जांच करने पर रेंडरिंग पहले ही पूरी हो चुकी थी, तो GPU से फ़्रेम रेंडर होने में लगने वाला समय शून्य हो सकता है.
  • /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 (मिलीसेकंड, फ़्लोट) - हर फ़्रेम के लिए, GPU के काम पूरा होने का इंतज़ार करने में कॉम्पोज़र को जो समय लगा उसे वॉलक्लॉक टाइम कहा जाता है.
  • /perfmetrics_android/compositor/dropped_frame_count (पूर्णांक) - सभी ऐप्लिकेशन से छूटे हुए फ़्रेम की कुल संख्या.
  • /perfmetrics_android/compositor/frames_per_second (फ़्लोट) - डिवाइस पर हर सेकंड में दिखाए गए कंपोजिटर फ़्रेम की संख्या.
  • /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 का इस्तेमाल किया जा सकता है.

इस एक्सटेंशन की सुविधा चालू करने के लिए, ऐप्लिकेशन को एक्सटेंशन सेक्शन में बताए गए XrInstanceCreateInfo::enabledExtensionNames पैरामीटर का इस्तेमाल करके, xrCreateInstance में एक्सटेंशन का नाम देना चाहिए.

नए टाइप के फ़्लैग

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;

नए Enum काॅन्सटेंट

XrStructureType एनोटेशन को इनके साथ जोड़ा गया है:

  • XR_TYPE_PERFORMANCE_METRICS_STATE_ANDROID
  • XR_TYPE_PERFORMANCE_METRICS_COUNTER_ANDROID

नए Enums

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 पर सेट करें.

परफ़ॉर्मेंस मेट्रिक सिस्टम को चालू या बंद करने के लिए, xrSetPerformanceMetricsStateANDROID को कॉल करते समय, XrPerformanceMetricsStateANDROID को इनपुट के तौर पर दिया जाता है. XrPerformanceMetricsStateANDROID को आउटपुट पैरामीटर के तौर पर पॉप्युलेट किया जाता है. ऐसा तब होता है, जब xrGetPerformanceMetricsStateANDROID को कॉल करके यह क्वेरी की जाती है कि परफ़ॉर्मेंस मेट्रिक सिस्टम चालू है या नहीं.

मान्य इस्तेमाल (इंप्लिसिट)

  • XrPerformanceMetricsStateANDROID का इस्तेमाल करने से पहले, XR_ANDROID_performance_metrics एक्सटेंशन चाहिए कि चालू हो
  • 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 को कॉल करके पॉप्युलेट किया जाता है.

मान्य इस्तेमाल (इंप्लिसिट)

  • XrPerformanceMetricsCounterANDROID का इस्तेमाल करने से पहले, XR_ANDROID_performance_metrics एक्सटेंशन चालू होना ज़रूरी है
  • 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 का एक कलेक्शन है, जिसे रनटाइम भरता है. इसमें परफ़ॉर्मेंस मेट्रिक के सभी उपलब्ध काउंटर होते हैं. हालांकि, अगर counterPathCapacityInput 0 है, तो NULL हो सकता है.
  • ज़रूरी counterPaths साइज़ को वापस पाने के बारे में पूरी जानकारी के लिए, बफ़र साइज़ पैरामीटर सेक्शन देखें.

मान्य इस्तेमाल (इंप्लिसिट)

  • xrEnumeratePerformanceMetricsCounterPathsANDROID को कॉल करने से पहले, XR_ANDROID_performance_metrics एक्सटेंशन चालू होना चाहिए
  • 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);

पैरामीटर की जानकारी

xrSetPerformanceMetricsStateANDROID फ़ंक्शन, परफ़ॉर्मेंस मेट्रिक सिस्टम को चालू या बंद करता है.

मान्य इस्तेमाल (इंप्लिसिट)

  • xrSetPerformanceMetricsStateANDROID को कॉल करने से पहले, XR_ANDROID_performance_metrics एक्सटेंशन चालू होना चाहिए
  • 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);

पैरामीटर की जानकारी

xrGetPerformanceMetricsStateANDROID फ़ंक्शन से, परफ़ॉर्मेंस मेट्रिक सिस्टम की मौजूदा स्थिति का पता चलता है.

मान्य इस्तेमाल (इंप्लिसिट)

  • xrGetPerformanceMetricsStateANDROID को कॉल करने से पहले, XR_ANDROID_performance_metrics एक्सटेंशन चालू होना चाहिए
  • 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 फ़ंक्शन, परफ़ॉर्मेंस मेट्रिक काउंटर से क्वेरी करता है.

ऐप्लिकेशन को चाहिए कि वह परफ़ॉर्मेंस मेट्रिक सिस्टम को चालू करे. इसके लिए, xrQueryPerformanceMetricsCounterANDROID का इस्तेमाल करके मेट्रिक क्वेरी करने से पहले, xrSetPerformanceMetricsStateANDROID को कॉल करें.

मान्य इस्तेमाल (इंप्लिसिट)

  • xrQueryPerformanceMetricsCounterANDROID को कॉल करने से पहले, XR_ANDROID_performance_metrics एक्सटेंशन चालू होना चाहिए
  • 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