สตริงชื่อ
XR_ANDROID_performance_metrics
ประเภทชิ้นงาน
การขยายอินสแตนซ์
หมายเลขต่อที่จดทะเบียน
466
วันที่แก้ไขล่าสุด
2024-09-06
สถานะ IP
ไม่มีการอ้างสิทธิ์ IP ที่ทราบ
การพึ่งพาส่วนขยายและเวอร์ชัน
ผู้เขียน
Dmitry Kotov จาก Google
Levana Chen จาก Google
Jared Finder จาก Google
Spencer Quin จาก Google
ภาพรวม
ส่วนขยายนี้ให้ API เพื่อแจกแจงและค้นหาเมตริกประสิทธิภาพต่างๆ ของตัวนับของอุปกรณ์ XR, คอมโพสิเตอร์ และแอปพลิเคชัน XR ปัจจุบัน นักพัฒนาแอปสามารถทำการวิเคราะห์ประสิทธิภาพและเพิ่มประสิทธิภาพที่มุ่งเน้นไปยังแอปพลิเคชัน XR โดยใช้ตัวนับเมตริกประสิทธิภาพที่รวบรวม แอปพลิเคชันไม่ควรเปลี่ยนลักษณะการทํางานตามการอ่านตัวนับ
ตัวนับเมตริกประสิทธิภาพจะจัดระเบียบเป็นค่า XrPath ที่กําหนดไว้ล่วงหน้าในส่วนเส้นทางรูท /perfmetrics_android แอปพลิเคชันสามารถค้นหาเคาน์เตอร์ที่ใช้ได้ผ่าน xrEnumeratePerformanceMetricsCounterPathsANDROID ต่อไปนี้คือรายการเส้นทางตัวนับเมตริกประสิทธิภาพที่อาจระบุในอุปกรณ์ Android
- /perfmetrics_android/app/cpu_frametime (milliseconds, float) - เวลาตามนาฬิกาที่ไคลเอ็นต์ใช้ในการประมวลผลเฟรม
- /perfmetrics_android/app/gpu_frametime
(มิลลิวินาที, ตัวเลขทศนิยม) - เวลาตามนาฬิกาที่ลูกค้าใช้ในการรอให้ GPU ทำงานเสร็จสมบูรณ์ต่อเฟรม หมายเหตุ:
- เวลารอที่สูง อาจหมายความว่า GPU ไม่ว่างเนื่องจากมีงานอื่นๆ อยู่ ไม่ได้หมายความว่าไคลเอ็นต์นี้ใช้ GPU มากเกินไป
- เวลารอ GPU อาจเป็น 0 ได้หากคอมโพสิตตรวจสอบแล้วพบว่าการแสดงผลเสร็จสมบูรณ์แล้ว
- /perfmetrics_android/app/cpu_utilization
(เปอร์เซ็นต์, ตัวเลขทศนิยม) - อัตราการใช้งาน CPU ทั้งหมดของแอปโดยเฉลี่ยในช่วงเวลาหนึ่ง
- สามารถมีค่ามากกว่า 100% ในโปรเซสเซอร์แบบหลายแกน
- /perfmetrics_android/app/gpu_utilization (เปอร์เซ็นต์) - อัตราการใช้งาน GPU ทั้งหมดของแอปโดยเฉลี่ยในช่วงเวลาหนึ่ง
- /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 (float) - จํานวนเฟรมคอมโพสิตที่วาดในอุปกรณ์ต่อวินาที
- /perfmetrics_android/device/cpu_utilization_average (เปอร์เซ็นต์, ตัวเลขทศนิยม) - อัตราการใช้งาน CPU ของอุปกรณ์โดยเฉลี่ยจากทุกแกน และค่าเฉลี่ยตามช่วงเวลา
- /perfmetrics_android/device/cpu_utilization_worst (เปอร์เซ็นต์, ตัวเลขทศนิยม) - อัตราการใช้งาน CPU ของอุปกรณ์สำหรับแกนประมวลผลที่มีประสิทธิภาพต่ำที่สุดซึ่งคำนวณค่าเฉลี่ยเมื่อเวลาผ่านไป
- /perfmetrics_android/device/cpu0_utilization ผ่าน /perfmetrics_android/device/cpuX_utilization (เปอร์เซ็นต์, ตัวเลขทศนิยม, X คือจํานวนแกน CPU ลบ 1) - อัตราการใช้งาน CPU ของอุปกรณ์ต่อแกน CPU โดยเฉลี่ยเมื่อเวลาผ่านไป
- /perfmetrics_android/device/cpu_frequency (MHz, ตัวเลขทศนิยม) - ความถี่ของ CPU ของอุปกรณ์โดยเฉลี่ยจากทุกแกนและค่าเฉลี่ยเมื่อเวลาผ่านไป
- /perfmetrics_android/device/gpu_utilization (เปอร์เซ็นต์, ตัวเลขทศนิยม) - อัตราการใช้งาน GPU ของอุปกรณ์โดยเฉลี่ยในช่วงเวลาหนึ่ง
หลังจากสร้างเซสชันแล้ว แอปพลิเคชันสามารถใช้ xrSetPerformanceMetricsStateANDROID เพื่อเปิดใช้ระบบเมตริกประสิทธิภาพสำหรับเซสชันนั้น แอปพลิเคชันสามารถใช้ xrQueryPerformanceMetricsCounterANDROID เพื่อค้นหาตัวนับเมตริกประสิทธิภาพในเซสชันที่เปิดใช้ระบบเมตริกประสิทธิภาพ หรือใช้ xrGetPerformanceMetricsStateANDROID เพื่อค้นหาว่าระบบเมตริกประสิทธิภาพเปิดใช้อยู่หรือไม่
แอปพลิเคชันควรส่งชื่อของส่วนขยายไปยัง xrCreateInstance โดยใช้พารามิเตอร์ XrInstanceCreateInfo::enabledExtensionNames ตามที่ระบุไว้ในส่วนส่วนขยาย เพื่อเปิดใช้ฟังก์ชันการทำงานของส่วนขยายนี้
ประเภท 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;
ค่าคงที่ Enum ใหม่
เพิ่มรายการต่อไปนี้ในอนุกรม XrStructureType
XR_TYPE_PERFORMANCE_METRICS_STATE_ANDROIDXR_TYPE_PERFORMANCE_METRICS_COUNTER_ANDROID
Enumeration ใหม่
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เพื่อปิดใช้
XrPerformanceMetricsStateANDROID ใช้เป็นอินพุตเมื่อเรียกใช้ xrSetPerformanceMetricsStateANDROID เพื่อเปิดหรือปิดใช้ระบบเมตริกประสิทธิภาพ ระบบจะป้อนข้อมูล XrPerformanceMetricsStateANDROID เป็นพารามิเตอร์เอาต์พุตเมื่อเรียกใช้ xrGetPerformanceMetricsStateANDROID เพื่อสอบถามว่าเปิดใช้ระบบเมตริกประสิทธิภาพหรือไม่
การใช้งานที่ถูกต้อง (โดยนัย)
- ต้องเปิดใช้ส่วนขยาย
XR_ANDROID_performance_metricsก่อนใช้ XrPerformanceMetricsStateANDROID typeต้องเป็นXR_TYPE_PERFORMANCE_METRICS_STATE_ANDROIDnextต้องเป็น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คือ enum ของ XrPerformanceMetricsCounterUnitANDROID ที่อธิบายหน่วยวัดuintValueคือค่าตัวนับในรูปแบบuint32_tใช้ได้หากcounterFlagsมีXR_PERFORMANCE_METRICS_COUNTER_UINT_VALUE_VALID_BIT_ANDROIDfloatValueคือค่าตัวนับในรูปแบบfloatใช้ได้หากcounterFlagsมีXR_PERFORMANCE_METRICS_COUNTER_FLOAT_VALUE_VALID_BIT_ANDROID
XrPerformanceMetricsCounterANDROID จะสร้างขึ้นโดยการเรียกใช้ xrQueryPerformanceMetricsCounterANDROID เพื่อค้นหาข้อมูลเคาน์เตอร์เมตริกประสิทธิภาพแบบเรียลไทม์
การใช้งานที่ถูกต้อง (โดยนัย)
- ต้องเปิดใช้ส่วนขยาย
XR_ANDROID_performance_metricsก่อนใช้ XrPerformanceMetricsCounterANDROID typeต้องเป็นXR_TYPE_PERFORMANCE_METRICS_COUNTER_ANDROIDnextต้องเป็นNULLหรือพอยน์เตอร์ที่ถูกต้องไปยังโครงสร้างถัดไปในเชนโครงสร้างcounterFlagsต้องเป็น 0 หรือชุดค่าผสมที่ถูกต้องของค่า XrPerformanceMetricsCounterFlagsANDROIDcounterUnitต้องเป็นค่า XrPerformanceMetricsCounterUnitANDROID ที่ถูกต้อง
ฟังก์ชันใหม่
ฟังก์ชัน xrEnumeratePerformanceMetricsCounterPathsANDROID จะแสดงรายการเส้นทางตัวนับเมตริกประสิทธิภาพทั้งหมดที่รันไทม์รองรับ โดยคําจํากัดความมีดังนี้
XrResult xrEnumeratePerformanceMetricsCounterPathsANDROID(
XrInstance instance,
uint32_t counterPathCapacityInput,
uint32_t* counterPathCountOutput,
XrPath* counterPaths);
คําอธิบายพารามิเตอร์
instanceคือแฮนเดิล XrInstance ที่สร้างขึ้นก่อนหน้านี้ด้วย xrCreateInstancecounterPathCapacityInputคือความจุของอาร์เรย์counterPathsหรือ 0 เพื่อระบุคําขอดึงข้อมูลความจุที่จําเป็น- รันไทม์จะกรอก
counterPathCountOutputด้วยจํานวนcounterPathsที่เขียนหรือความจุที่จําเป็นในกรณีที่counterPathCapacityInputไม่เพียงพอ counterPathsคืออาร์เรย์ของXrPathที่รันไทม์กรอกข้อมูลไว้ ซึ่งมีตัวนับเมตริกประสิทธิภาพทั้งหมดที่ใช้ได้ แต่สามารถเป็นNULLได้หากcounterPathCapacityInputเป็น 0- ดูรายละเอียดเกี่ยวกับการดึงข้อมูล
counterPathsขนาดที่ต้องการได้ที่ส่วนพารามิเตอร์ขนาดบัฟเฟอร์
การใช้งานที่ถูกต้อง (โดยนัย)
- ต้องเปิดใช้ส่วนขยาย
XR_ANDROID_performance_metricsก่อนเรียกใช้ xrEnumeratePerformanceMetricsCounterPathsANDROID instanceต้องเป็นตัวแฮนเดิล XrInstance ที่ถูกต้องcounterPathCountOutputต้องเป็นพอยน์เตอร์ไปยังค่าuint32_t- หาก
counterPathCapacityInputไม่ใช่ 0counterPathsต้องเป็นพอยน์เตอร์ไปยังอาร์เรย์ของค่าcounterPathCapacityInputXrPath
รหัสการคืนสินค้า
XR_SUCCESS
XR_ERROR_FUNCTION_UNSUPPORTEDXR_ERROR_VALIDATION_FAILUREXR_ERROR_RUNTIME_FAILUREXR_ERROR_HANDLE_INVALIDXR_ERROR_INSTANCE_LOSTXR_ERROR_SIZE_INSUFFICIENT
ฟังก์ชัน xrSetPerformanceMetricsStateANDROID มีคำจำกัดความดังนี้
XrResult xrSetPerformanceMetricsStateANDROID(
XrSession session,
const XrPerformanceMetricsStateANDROID* state);
คําอธิบายพารามิเตอร์
sessionคือแฮนเดิล XrSession ที่สร้างขึ้นก่อนหน้านี้ด้วย xrCreateSessionstateเป็นพอยน์เตอร์ไปยังโครงสร้าง XrPerformanceMetricsStateANDROID
ฟังก์ชัน xrSetPerformanceMetricsStateANDROID จะเปิดหรือปิดใช้ระบบเมตริกประสิทธิภาพ
การใช้งานที่ถูกต้อง (โดยนัย)
- ต้องเปิดใช้ส่วนขยาย
XR_ANDROID_performance_metricsก่อนเรียกใช้ xrSetPerformanceMetricsStateANDROID sessionต้องเป็นแฮนเดิล XrSession ที่ถูกต้องstateต้องเป็นพอยน์เตอร์ไปยังโครงสร้าง XrPerformanceMetricsStateANDROID ที่ถูกต้อง
รหัสการคืนสินค้า
XR_SUCCESSXR_SESSION_LOSS_PENDING
XR_ERROR_FUNCTION_UNSUPPORTEDXR_ERROR_VALIDATION_FAILUREXR_ERROR_RUNTIME_FAILUREXR_ERROR_HANDLE_INVALIDXR_ERROR_INSTANCE_LOSTXR_ERROR_SESSION_LOST
ฟังก์ชัน xrGetPerformanceMetricsStateANDROID ได้รับการกําหนดดังนี้
XrResult xrGetPerformanceMetricsStateANDROID(
XrSession session,
XrPerformanceMetricsStateANDROID* state);
คําอธิบายพารามิเตอร์
sessionคือแฮนเดิล XrSession ที่สร้างขึ้นก่อนหน้านี้ด้วย xrCreateSessionstateเป็นพอยน์เตอร์ไปยังโครงสร้าง XrPerformanceMetricsStateANDROID
ฟังก์ชัน xrGetPerformanceMetricsStateANDROID จะรับสถานะปัจจุบันของระบบเมตริกประสิทธิภาพ
การใช้งานที่ถูกต้อง (โดยนัย)
- ต้องเปิดใช้ส่วนขยาย
XR_ANDROID_performance_metricsก่อนเรียกใช้ xrGetPerformanceMetricsStateANDROID sessionต้องเป็นแฮนเดิล XrSession ที่ถูกต้องstateต้องเป็นพอยน์เตอร์ไปยังโครงสร้าง XrPerformanceMetricsStateANDROID
รหัสการคืนสินค้า
XR_SUCCESSXR_SESSION_LOSS_PENDING
XR_ERROR_FUNCTION_UNSUPPORTEDXR_ERROR_VALIDATION_FAILUREXR_ERROR_HANDLE_INVALIDXR_ERROR_INSTANCE_LOSTXR_ERROR_SESSION_LOST
ฟังก์ชัน xrQueryPerformanceMetricsCounterANDROID มีคำจำกัดความดังนี้
XrResult xrQueryPerformanceMetricsCounterANDROID(
XrSession session,
XrPath counterPath,
XrPerformanceMetricsCounterANDROID* counter);
คําอธิบายพารามิเตอร์
sessionคือแฮนเดิล XrSession ที่สร้างขึ้นก่อนหน้านี้ด้วย xrCreateSessioncounterPathเป็นเส้นทางตัวนับเมตริกประสิทธิภาพที่ถูกต้องcounterเป็นพอยน์เตอร์ไปยังโครงสร้าง XrPerformanceMetricsCounterANDROID
ฟังก์ชัน xrQueryPerformanceMetricsCounterANDROID จะค้นหาตัวนับเมตริกประสิทธิภาพ
แอปพลิเคชันควรเปิดใช้ระบบเมตริกประสิทธิภาพโดยการเรียกใช้ xrSetPerformanceMetricsStateANDROID ก่อนการค้นหาเมตริกโดยใช้ xrQueryPerformanceMetricsCounterANDROID
การใช้งานที่ถูกต้อง (โดยนัย)
- ต้องเปิดใช้ส่วนขยาย
XR_ANDROID_performance_metricsก่อนเรียกใช้ xrQueryPerformanceMetricsCounterANDROID sessionต้องเป็นแฮนเดิล XrSession ที่ถูกต้องcounterต้องเป็นพอยน์เตอร์ไปยังโครงสร้าง XrPerformanceMetricsCounterANDROID
รหัสการคืนสินค้า
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™ และโลโก้ OpenXR เป็นเครื่องหมายการค้าของ The Khronos Group Inc. และจดทะเบียนเป็นเครื่องหมายการค้าในจีน สหภาพยุโรป ญี่ปุ่น และสหราชอาณาจักร