การตรวจสอบความสามารถในการทดสอบ 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 ทั้งหมดที่มีการใช้งานแบบ Passthrough (เช่น มีไฟล์ -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. ไฟล์ manifest.xml ของ ODM ซึ่งโหลดจากไฟล์ต่อไปนี้ตามลำดับ
    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)