ใช้ 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 กับแพลตฟอร์มจะอยู่ในแผนภาพนี้
รูปที่ 1 ลัง HAR
โครงสร้างทั่วไปภายใน display-safety
การออกแบบนี้จะเพิ่มชุดลังใหม่ลงในที่เก็บ display_safety ดังที่แสดงในรูปที่ 2
รูปที่ 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::Rendererharry::DisplayRotation |
AudioApiFactory |
Audio |
harry::AudioApiharry::AudioDeviceharry::VolumeMillibel |
ICameraManager |
Camera |
harry::ICameraDeviceharry::CameraDescriptor |
Looper |
Looper |
harry::LooperMessageharry::LooperOptionsharry::DisplayId |
PlatformVehicleData |
VehicleData |
harry::VehicleDataTypeharry::VehicleDataListener |
ResourceManager (โครงสร้าง) |
ResourceManager |
harry::ResourceManagerMessageharry::ResourceTokenharry::RawImageData |
PlatformTracing |
Tracing |
ไม่มี |
HarPerformanceMonitor |
Monitoring |
harry::Rendererharry::ResolveLatencyToken |
PlatformTestSupport |
TestSupport |
harry::TestConfigharry::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