การตรวจสอบความสามารถในการทดสอบ HAL

ชุดทดสอบของผู้ให้บริการ (VTS) ของ Android 9 รองรับเมธอดรันไทม์สำหรับใช้การกำหนดค่าอุปกรณ์เพื่อระบุว่าควรข้ามการทดสอบ VTS ใดสำหรับเป้าหมายอุปกรณ์นั้น

ความยืดหยุ่นในการทดสอบ VTS

ตั้งแต่ Android 8.0 เป็นต้นไป อุปกรณ์ทั้งหมดที่เปิดตัวพร้อมกับ Android 8.0 ขึ้นไปจะต้องผ่านการทดสอบ VTS อย่างไรก็ตาม การทดสอบ VTS บางรายการใช้กับเป้าหมายอุปกรณ์บางรายการไม่ได้ เช่น

  • หากอุปกรณ์หนึ่งๆ ไม่รองรับ HAL สำหรับการทดสอบ (เช่น IR) VTS ไม่จำเป็นต้องเรียกใช้การทดสอบสำหรับ HAL นั้นกับเป้าหมายอุปกรณ์นั้น
  • หากอุปกรณ์หลายเครื่องใช้ SoC และรูปภาพของผู้ให้บริการรายเดียวกัน แต่มี ฟังก์ชันการทำงานของฮาร์ดแวร์ที่แตกต่างกัน VTS ต้องพิจารณาว่าควรเรียกใช้ การทดสอบหรือข้ามการทดสอบสำหรับเป้าหมายอุปกรณ์ที่เฉพาะเจาะจง

ประเภทการทดสอบ VTS

VTS มีการทดสอบประเภทต่อไปนี้

  • การทดสอบการปฏิบัติตามข้อกำหนดช่วยให้มั่นใจได้ถึงความเข้ากันได้ระหว่างเฟรมเวิร์ก และพาร์ติชันของผู้ให้บริการ การทดสอบเหล่านี้จำเป็นต้องดำเนินการ (และผ่าน) ในอุปกรณ์ที่เปิดตัวด้วย Android 8.0 ขึ้นไป
  • การทดสอบการไม่ปฏิบัติตามข้อกำหนดช่วยให้ผู้ให้บริการปรับปรุงคุณภาพผลิตภัณฑ์ (ประสิทธิภาพ/การฟัซ เป็นต้น) การทดสอบเหล่านี้เป็นทางเลือกสำหรับผู้ให้บริการ

การทดสอบจะเป็นการทดสอบการปฏิบัติตามข้อกำหนดหรือไม่นั้นขึ้นอยู่กับแพ็กเกจที่การทดสอบนั้นอยู่ การทดสอบที่ทำงานด้วย แผน VTS ถือเป็นการทดสอบการปฏิบัติตามข้อกำหนด

กำหนด HAL ที่รองรับ

VTS สามารถใช้ไฟล์ต่อไปนี้เพื่อพิจารณาว่าเป้าหมายของอุปกรณ์รองรับ HAL ที่เฉพาะเจาะจงหรือไม่

  • /system/compatibility_matrix.xml อ้างสิทธิ์อินสแตนซ์ HAL ที่เฟรมเวิร์กต้องการ ตัวอย่าง
    <hal format="hidl" optional="true">
        <name>android.hardware.vibrator</name>
        <version>1.0-1</version>
        <interface>
           <name>IVibrator</name>
           <instance>default</instance>
        </interface>
    </hal>
    • แอตทริบิวต์ optional จะระบุว่าเฟรมเวิร์กจำเป็นต้องใช้ HAL อย่างเคร่งครัดหรือไม่
    • ไฟล์อาจมีหลายรายการสำหรับ HAL เดียวกัน (มีชื่อเดียวกัน) แต่มีเวอร์ชันและอินเทอร์เฟซต่างกัน
    • ไฟล์อาจมีการกำหนดค่า version หลายรายการสำหรับ รายการเดียวกัน ซึ่งบ่งบอกว่าเฟรมเวิร์กสามารถทำงานกับเวอร์ชันต่างๆ ได้
    • version1.0-1 หมายความว่าเฟรมเวิร์กสามารถทำงานกับเวอร์ชันต่ำสุด 1.0 และไม่จำเป็นต้องใช้เวอร์ชันที่สูงกว่า 1.1
  • อุปกรณ์ manifest.xml อ้างสิทธิ์อินสแตนซ์ HAL ที่ผู้ให้บริการ ให้ไว้ ตัวอย่าง
    <hal format="hidl">
        <name>android.hardware.vibrator</name>
        <transport>hwbinder</transport>
        <version>1.2</version>
        <interface>
            <name>IVibrator</name>
           <instance>default</instance>
        </interface>
    </hal>
    • ไฟล์อาจมีหลายรายการสำหรับ HAL เดียวกัน (มีชื่อเดียวกัน) แต่มีเวอร์ชันและอินเทอร์เฟซต่างกัน
    • หากไฟล์มีการกำหนดค่า version รายการเดียว สำหรับรายการหนึ่งๆ version1.2 หมายความว่าผู้ให้บริการรองรับทุกเวอร์ชัน ตั้งแต่ 1.0~1.2
  • lshal เครื่องมือในอุปกรณ์ที่แสดงข้อมูลรันไทม์เกี่ยวกับ บริการ HAL ที่ลงทะเบียนกับ hwservicemanager ตัวอย่าง
    android.hardware.vibrator@1.0::IVibrator/default

    lshal ยังแสดง HAL ทั้งหมดที่มีการใช้งานแบบส่งผ่าน (เช่น มีไฟล์ -impl.so ที่เกี่ยวข้องใน อุปกรณ์) ตัวอย่าง
    android.hardware.nfc@1.0::I*/* (/vendor/lib/hw/)
    android.hardware.nfc@1.0::I*/* (/vendor/lib64/hw/)

การทดสอบการปฏิบัติตามข้อกำหนด

สำหรับการทดสอบการปฏิบัติตามข้อกำหนด VTS จะอิงตามไฟล์ Manifest ของผู้ให้บริการเพื่อระบุ (และทดสอบ) อินสแตนซ์ HAL ทั้งหมดที่อุปกรณ์มี ขั้นตอนการตัดสินใจ

การตรวจสอบความสามารถในการทดสอบเพื่อการปฏิบัติตามข้อกำหนด

รูปที่ 1 การตรวจสอบความสามารถในการทดสอบสำหรับการทดสอบการปฏิบัติตามข้อกำหนดของ VTS

การทดสอบการไม่ปฏิบัติตามข้อกำหนด

สำหรับการทดสอบการไม่ปฏิบัติตามข้อกำหนด VTS จะอิงตามไฟล์ Manifest ของผู้ให้บริการและเอาต์พุต lshal เพื่อพิจารณา (และทดสอบ) HAL เวอร์ชันทดลองที่ไม่ได้อ้างสิทธิ์ในไฟล์ manifest.xml ขั้นตอนการตัดสินใจ

การตรวจสอบความสามารถในการทดสอบสำหรับการไม่ปฏิบัติตามข้อกำหนด

รูปที่ 2 การตรวจสอบความสามารถในการทดสอบสำหรับการทดสอบที่ไม่เป็นไปตามข้อกำหนดของ VTS

ค้นหาไฟล์ Manifest ของผู้ให้บริการ

VTS จะตรวจสอบไฟล์ manifest.xml ของผู้ให้บริการในตำแหน่งต่อไปนี้ตามลำดับ

  1. /vendor/etc/vintf/manifest.xml + ไฟล์ Manifest ของ ODM (หากมีการกำหนด HAL เดียวกัน ทั้ง 2 ที่ ไฟล์ Manifest ของ ODM จะลบล้างไฟล์ใน /vendor/etc/vintf/manifest.xml)
  2. /vendor/etc/vintf/manifest.xml
  3. ไฟล์ ODM manifest.xml ที่โหลดจากไฟล์ต่อไปนี้ตามลำดับต่อไปนี้
    1. /odm/etc/vintf/manifest_$(ro.boot.product.hardware.sku).xml
    2. /odm/etc/vintf/manifest.xml
    3. /odm/etc/manifest_$(ro.boot.product.hardware.sku).xml
    4. /odm/etc/manifest.xml
    5. /vendor/manifest.xml

เครื่องมือตรวจสอบความสามารถในการทดสอบของ VTS

vts_testibility_checker เป็นไบนารีที่มาพร้อมกับ VTS และใช้โดย เฟรมเวิร์กการทดสอบ VTS ที่รันไทม์เพื่อพิจารณาว่าการทดสอบ HAL ที่ระบุ ทดสอบได้หรือไม่ โดยอิงตาม libvintf เพื่อโหลดและแยกวิเคราะห์ไฟล์ Manifest ของผู้ให้บริการ และใช้ขั้นตอนการตัดสินใจ ที่อธิบายไว้ในส่วนก่อนหน้า

วิธีใช้ "vts_testability_check"

  • สำหรับการทดสอบการปฏิบัติตามข้อกำหนด ให้ทำดังนี้
    vts_testability_check -c -b <bitness>  <hal@version>
  • สำหรับการทดสอบการไม่ปฏิบัติตามข้อกำหนด ให้ทำดังนี้
    vts_testability_check -b <bitness>  <hal@version>

เอาต์พุตของ vts_testability_check ใช้รูปแบบ JSON ต่อไปนี้

{testable: <True/False> Instances: <list of instance names of HAL service>}

กำหนด HAL ที่เข้าถึง

หากต้องการระบุว่าการทดสอบ VTS เข้าถึง HAL ใด ให้ตรวจสอบว่าการทดสอบ HAL แต่ละรายการ ใช้ VtsHalHidlTargetTestEnvBase เทมเพลตเพื่อลงทะเบียน HAL ที่เข้าถึงในการทดสอบ จากนั้นเฟรมเวิร์กการทดสอบ VTS จะดึง HAL ที่ลงทะเบียนไว้เมื่อประมวลผลการทดสอบล่วงหน้า

สำหรับการทดสอบการปฏิบัติตามข้อกำหนด คุณยังตรวจสอบ /system/etc/vintf/manifest.xml ได้ด้วย หากกำหนด HAL ไว้ที่นี่ VTS ควรทดสอบ HAL นั้น (สำหรับบริการ HAL ที่ระบบจัดหาให้ (เช่น graphics.composer/vr) จะมีการประกาศ HAL ใน /system/manifest.xml)