เลเยอร์แอบสแตรกชันของแพลตฟอร์ม HAR

ใช้ High Availability Renderer (HAR) เพื่อแสดงข้อมูลยานพาหนะที่ Android แสดงไม่ได้ ซึ่งอาจเกิดขึ้นเนื่องจากปัญหาต่างๆ เช่น การเริ่มต้นใช้งาน ความพร้อมใช้งาน ความปลอดภัย หรือกฎระเบียบ HAR เป็นแอปในตัวแบบพกพาที่เขียนด้วย Rust

HAR หรือที่เรียกว่าเฟรมเวิร์ก HAR มีโค้ดที่คุณใช้สร้างแอป แอปที่สร้างด้วย HAR คือแอปที่ใช้ HAR เฟรมเวิร์ก HAR มีส่วนโค้ดสำหรับแพลตฟอร์มต่างๆ ตัวอย่างเช่น ในระบบ Linux คุณใช้ไลบรารี เช่น tinyalsa สำหรับเสียง QNX มีคลังเสียงที่ไม่ซ้ำกันเป็นของตัวเอง

แพลตฟอร์มประกอบด้วยฮาร์ดแวร์ ระบบปฏิบัติการ ไลบรารีระบบ และปัจจัยอื่นๆ โค้ดเฉพาะแพลตฟอร์มมีส่วนที่เรียกว่าระบบย่อย ระบบย่อยแต่ละระบบจะจัดการฟีเจอร์แพลตฟอร์ม 1 รายการ เช่น เสียง กล้อง EVS หรือข้อมูลยานพาหนะ หากต้องการรองรับแพลตฟอร์ม เฟรมเวิร์ก HAR ต้องใช้ระบบย่อยทั้งหมดที่ติดตั้งใช้งาน

โค้ดระบบย่อยเฉพาะแพลตฟอร์มอาจทำงานในกระบวนการเดียวกับแอปที่ใช้ HAR หรือแยกกันก็ได้ เมื่อแยกกัน โค้ดนี้จะจัดการการสื่อสารระหว่างโปรเซส (IPC) เพื่อช่วยยืนยันว่าแพลตฟอร์มรองรับแอป กลไก IPC ที่ซับซ้อนต้องเป็นส่วนหนึ่งของโค้ดเฉพาะแพลตฟอร์ม

ชุดโปรแกรมทดสอบ HAR จะทำการทดสอบในระบบย่อยทั้งหมดที่ติดตั้งใช้งานสำหรับแพลตฟอร์ม ใช้ชุดเครื่องมือนี้เพื่อตรวจสอบว่าแพลตฟอร์มเป็นไปตามข้อกำหนดของ HAR หรือไม่ และเพื่อค้นหาปัญหาใหม่ๆ

คำศัพท์

คำเหล่านี้อยู่ในหน้านี้

แอปที่ใช้ HAR
แอป OEM หรือแอปเฉพาะฟังก์ชันที่สร้างขึ้นด้วยเฟรมเวิร์ก HAR แอปจะแตกต่างกันไปตามสถานะของแอปและลักษณะอื่นๆ ที่ปรับแต่งได้
เฟรมเวิร์ก HAR
มีชุดเครื่องมือหลักที่ใช้ในการสร้างแอป
นามธรรมของแพลตฟอร์ม HAR
ส่วนหนึ่งของเฟรมเวิร์ก HAR ที่มี API ที่รู้จักซึ่งแพลตฟอร์มเป้าหมายทั้งหมดต้องใช้
ชุดโปรแกรมทดสอบ HAR
ชุดการทดสอบที่ทราบเกี่ยวกับการติดตั้งใช้งานแพลตฟอร์ม ซึ่งช่วยยืนยันว่าการติดตั้งใช้งานแพลตฟอร์มรองรับเฟรมเวิร์ก HAR ในแพลตฟอร์มหนึ่งๆ

ไม่อยู่ในขอบเขต

HAR ไม่ได้ระบุข้อมูลต่อไปนี้

  • การติดตั้งใช้งานแต่ละรายการสําหรับเป้าหมายแพลตฟอร์มทั้งหมด: การติดตั้งใช้งานสําหรับแพลตฟอร์มเป้าหมาย แต่หน้านี้จะอธิบายอินเทอร์เฟซที่การติดตั้งใช้งานแพลตฟอร์มต้องดำเนินการให้เสร็จสมบูรณ์และชุดโปรแกรมทดสอบต้องเป็นไปตามข้อกำหนด

  • กรอบการทดสอบ: กรอบการทดสอบที่เฉพาะเจาะจงสำหรับอินเทอร์เฟซทั้งหมด แต่หน้านี้จะอธิบายฟังก์ชันแต่ละรายการสำหรับอินเทอร์เฟซ ซึ่งรวมถึงอาร์กิวเมนต์ ค่าที่แสดงผล ลักษณะการทำงานที่คาดไว้ และผลข้างเคียงที่คาดไว้ หน้านี้อธิบายชุดโปรแกรมทดสอบที่คุณสามารถใช้และเรียกใช้กรอบการทดสอบได้

โครงสร้าง Crate ระดับสูงของ Platform Abstraction

โปรเจ็กต์ Rust ประกอบด้วย Crate รูปที่ 1 แสดงโครงสร้างลังสำหรับเลเยอร์นามธรรมของแพลตฟอร์ม HAR เลเยอร์นามธรรมของแพลตฟอร์ม ส่งผลต่อ Rust Crate อย่างน้อย 2 รายการ ดังนี้

  • Abstractions (คำอธิบาย Rust trait) อยู่ใน crate ของเฟรมเวิร์ก HAR

  • การติดตั้งใช้งานสำหรับแพลตฟอร์มจะดำเนินการโดย crate har-platform-x แยกต่างหาก เช่น har-platform-linux หรือ har-platform-android

คุณไม่สามารถสร้างหรือทดสอบ HAR crate โดยไม่มีการติดตั้งใช้งานแพลตฟอร์มที่ระบุ ซึ่งเป็นสิ่งที่เราตั้งใจเนื่องจากเฟรมเวิร์ก HAR เป็นเฟรมเวิร์ก

แอปที่ระบุแพลตฟอร์มต้องสร้างขึ้นด้วยเฟรมเวิร์กนี้จึงจะทำงานและทดสอบได้ ความเชื่อมโยงระหว่างเฟรมเวิร์ก HAR กับแพลตฟอร์มจะอยู่ในแผนภาพนี้

ลัง HAR

รูปที่ 1 ลัง HAR

โครงสร้างทั่วไปภายใน display-safety

การออกแบบนี้จะเพิ่มชุดลังใหม่ลงในที่เก็บ display_safety ดังที่แสดงในรูปที่ 2

Crate, เฟรมเวิร์ก และแอป HAR

รูปที่ 2 โมดูล Abstraction

ชุดโปรแกรมทดสอบมีโครงสร้างคล้ายกับแอป แต่จะอาศัยเฉพาะลังการใช้งานแพลตฟอร์มที่ระบุเท่านั้น ชุดโปรแกรมทดสอบต้องอ้างอิงถึงลักษณะและโครงสร้างที่กำหนดไว้ในเฟรมเวิร์ก HAR แต่ไม่ควรอ้างอิงถึงการใช้งานที่ซับซ้อนกว่านั้น

คำอธิบายระดับสูงของเลเยอร์นามธรรมของแพลตฟอร์ม

ตารางนี้อธิบายระบบย่อยเฉพาะแพลตฟอร์มที่กำหนดโดยเลเยอร์นามธรรมของแพลตฟอร์ม HAR

ชื่อแอบสแตรกชัน ฟังก์ชันที่เกี่ยวข้อง คำอธิบาย หมายเหตุ
OpenGL การแสดงผลภาพ 2 มิติ มอบความสามารถในการแสดงผล OpenGLES 2.0/3.0 ให้กับ Crate ของเฟรมเวิร์ก HAR
Audio การแสดงผลเสียง มีอินเทอร์เฟซที่คล้ายกับ Android SoundPool เพื่อจัดการและเล่นเสียงของระบบ
Camera จอแสดงผลกล้องของยานพาหนะ มีอินเทอร์เฟซที่คล้ายกับ EVS HAL เพื่อจัดการและแสดงข้อมูลกล้องของยานพาหนะ
Looper ลูปหลักของแอปและการกำหนดค่าการแสดงผล มีอินเทอร์เฟซที่คล้ายกับ Android Looper เพื่อจัดการลูปหลักของแอปและการกำหนดค่าการแสดงผลเฉพาะแพลตฟอร์ม
UserInput การสัมผัส แป้นพิมพ์ พวงมาลัยหรือปุ่มหมุนควบคุม และการป้อนข้อมูลอื่นๆ ที่เฉพาะเจาะจงสำหรับแพลตฟอร์ม มีอินเทอร์เฟซสำหรับป้อนข้อมูลด้วยการสัมผัสและแป้นพิมพ์ให้กับแอปที่ใช้ HAR การใช้งานอ้างอิงที่อิงตาม Linux evdev ใน har-user-input-evdev
VehicleData อินพุตสถานะยานพาหนะ มีอินเทอร์เฟซสำหรับส่งสตรีมข้อมูลยานพาหนะที่กำหนดเองให้แก่แอปที่ใช้ HAR เช่น ข้อมูลที่ได้จาก Android VHAL หรือ CAN bus
ResourceManager เอกสารการออกแบบที่แคชไว้เฉพาะแอป มีแคชหน่วยความจำของทรัพยากรที่จำเป็นสำหรับการเริ่มต้น HAR เช่น รูปภาพที่แคชไว้และเอกสารการออกแบบ ยังไม่ได้ใช้แคชดิสก์
Logging การบันทึกของระบบและการวัดและส่งข้อมูลทางไกล ให้การสนับสนุนการบันทึกเฉพาะแพลตฟอร์มโดยใช้ระบบการติดตาม ซึ่งจะเปิดใช้การรวบรวมข้อมูลการตรวจวัดระยะไกลตามที่แพลตฟอร์มกำหนด
Tracing System Tracing ให้ข้อมูลสรุปสำหรับการผสานรวมกับระบบการติดตามและการทำโปรไฟล์
Monitoring การตรวจสอบระบบ ชุดเครื่องมือสำหรับตรวจสอบประสิทธิภาพและเวลาในการตอบสนองภายในเฟรมเวิร์ก HAR
Commlib ข้อมูลรถยนต์ การใช้งานอ้างอิงโดยใช้การแปลง Protobuf เป็นอนุกรม เลิกใช้งาน: ใช้ API ที่กำหนดไว้ใน reference/harry-control-api และการติดตั้งใช้งาน harry-grpcio-server และ harry-tonic-server (การติดตั้งใช้งานอ้างอิง)
TestSupport ฮุกการสนับสนุนการทดสอบ รองรับการสร้างและการแยกย่อยกรอบการทดสอบ การสร้างเหตุการณ์ทดสอบ และการสร้างอาร์ติแฟกต์การทดสอบ เช่น การสร้างการโต้ตอบแบบสัมผัสจำลองเพื่อทดสอบ UserInput และการสร้างภาพหน้าจอเพื่อการวิเคราะห์ ฟีเจอร์นี้ล็อกโดย Rust เพื่อป้องกันไม่ให้รวมอยู่ในบิลด์เวอร์ชันที่ใช้งานจริง

รูปแบบการตั้งชื่อและโครงสร้างเฟรมเวิร์ก

ตารางนี้แสดงชื่อและโครงสร้างต่อไปนี้

  • คาดว่าจะมีอินสแตนซ์ระบบย่อย trait ที่เฟรมเวิร์ก HAR มีให้ trait แต่ละรายการแสดงถึงระบบย่อยเฉพาะแพลตฟอร์มที่ต้องติดตั้งใช้งาน

  • ชื่อที่คาดหวังของการติดตั้งใช้งานระบบย่อยเฉพาะแพลตฟอร์มในลังแพลตฟอร์มใดๆ แอปที่ใช้ HAR คาดหวังให้มีการใช้ชื่อที่เฉพาะเจาะจงเหล่านี้

  • อินสแตนซ์ enum และ struct ของเฟรมเวิร์ก HAR ที่เกี่ยวข้องซึ่งโดยปกติจะใช้เพื่อส่งข้อมูลจากการติดตั้งใช้งานที่เกี่ยวข้องกับแพลตฟอร์มไปยังเฟรมเวิร์ก HAR

ชื่อลักษณะเฉพาะ ชื่อการใช้งาน Enum และ Struct ของเฟรมเวิร์ก HAR
GlContextFactory OpenGL trait harry::Renderer
harry::DisplayRotation
AudioApiFactory Audio harry::AudioApi
harry::AudioDevice
harry::VolumeMillibel
ICameraManager Camera harry::ICameraDevice
harry::CameraDescriptor
Looper Looper harry::LooperMessage
harry::LooperOptions
harry::DisplayId
PlatformVehicleData VehicleData harry::VehicleDataType
harry::VehicleDataListener
ResourceManager (โครงสร้าง) ResourceManager harry::ResourceManagerMessage
harry::ResourceToken
harry::RawImageData
PlatformTracing Tracing ไม่มี
HarPerformanceMonitor Monitoring harry::Renderer
harry::ResolveLatencyToken
PlatformTestSupport TestSupport harry::TestConfig
harry::TestDisplayConfig

ข้อผิดพลาดและการจัดการข้อผิดพลาด

API ที่เสนอใช้ประเภท Result<> ของ Rust Rust กำหนดให้คุณต้องตรวจสอบประเภท Result ที่มีข้อผิดพลาด หากไม่เป็นเช่นนั้น คอมไพเลอร์จะสร้างคำเตือนหรือข้อผิดพลาด การตรวจสอบเวลาบิลด์จะบังคับใช้การตรวจสอบข้อผิดพลาดจากโค้ดเฉพาะแพลตฟอร์ม

ข้อผิดพลาดที่แสดงผลโดยการติดตั้งใช้งานแพลตฟอร์มเป็นประเภท harry::error::Error หากต้องการยืนยันว่าประเภทข้อผิดพลาดของแพลตฟอร์มไม่รั่วไหลไปยังโค้ดของแอป ให้ใช้ประเภทข้อผิดพลาดมาตรฐานที่เฟรมเวิร์ก HAR มีให้

ประเภท harry::error::Error จะขยายเพื่อรวมข้อผิดพลาดที่เฉพาะเจาะจงสำหรับระบบย่อยทั้งหมด ดังนี้

// This is Rust
pub enum Error {
  Msg(String), // A generic message string
  // Legacy error type, likely to be removed or merged into Msg
  Audio(String),
}

ข้อผิดพลาดที่กู้คืนไม่ได้จะแสดงผลผ่านอินเทอร์เฟซและ Callback ที่กำหนดไว้เป็นหลัก

การออกแบบชุดโปรแกรมทดสอบโดยละเอียด

ส่วนนี้จะอธิบายการออกแบบชุดโปรแกรมทดสอบ ซึ่งจะยืนยันการติดตั้งใช้งาน Abstraction เฉพาะแพลตฟอร์ม

สร้างการทดสอบชุดโปรแกรมทดสอบ

สำหรับบิลด์ Soong (กำหนดโดยไฟล์ Android.bp) การทดสอบจะคอมไพล์เป็นส่วนหนึ่งของระบบบิลด์แพลตฟอร์ม Android และการดำเนินการจะจัดการโดย atest

เรียกใช้ชุดโปรแกรมทดสอบ

หากต้องการทดสอบแต่ละแพลตฟอร์ม ให้ใช้คำสั่ง atest กับเป้าหมายการทดสอบที่เกี่ยวข้อง (เช่น atest <module_name>) คำสั่งนี้จะติดตั้งใช้งานและเรียกใช้การทดสอบในอุปกรณ์หรือโปรแกรมจำลองที่ใช้ Android