Android 15 เปิดตัวฟีเจอร์อัตราการรีเฟรชแบบปรับได้ (ARR) ซึ่งช่วยให้อัตราการรีเฟรชของจอแสดงผลปรับให้เข้ากับอัตราเฟรมของเนื้อหาได้โดยใช้ขั้นตอน VSync แบบแยก
ฟีเจอร์ ARR มีประโยชน์ดังนี้
- การลดการใช้พลังงาน: โดยค่าเริ่มต้น ARR จะช่วยให้อุปกรณ์ทำงานในอัตราที่ต่ำกว่าอัตราการรีเฟรชสูงสุด และจะเปลี่ยนไปใช้อัตราที่สูงขึ้นเฉพาะเมื่อจำเป็นต่อประสบการณ์การใช้งานของผู้ใช้เท่านั้น ซึ่งจะช่วยลดการใช้พลังงานที่ไม่จำเป็น
- ลดอาการกระตุก: ARR ช่วยให้ไม่ต้องสลับโหมด ซึ่งเป็นสาเหตุที่ทราบกันดีว่าทำให้เกิดอาการกระตุก
ภาพรวม
ในแผงที่ไม่ใช่ ARR จอแสดงผลจะรีเฟรชตามจังหวะคงที่ซึ่งกำหนดโดย โหมดการแสดงผลที่ใช้งานอยู่
ในแผง ARR ระบบจะแยกอัตรา VSync ของจอแสดงผลและอัตราการรีเฟรชออกจากกัน ซึ่งจะช่วยให้ อัตราการรีเฟรชเปลี่ยนแปลงได้ภายในโหมดการแสดงผลเดียวตามจังหวะการอัปเดตเนื้อหา แผงจะทำงานที่อัตราการรีเฟรชซึ่งเป็นตัวหารของเอฟเฟกต์ภาพขาด (TE) ของแผง OEM สามารถใช้ ARR ตามการประนีประนอมด้านพลังงานที่ต้องการ
รูปภาพต่อไปนี้แสดงจอแสดงผลที่มีvsyncPeriod 240 Hz และ
minFrameIntervalNs (อัตราการรีเฟรชสูงสุด) 120 Hz VSync จะเกิดขึ้นทุกๆ
4.16 มิลลิวินาที เฟรมจะแสดงได้ทุกๆ หลายครั้งของ VSync หลังจาก
minFrameIntervalNs จากเฟรมสุดท้าย
รูปที่ 1 ตัวอย่าง ARR
การใช้งาน
Android 15 รองรับ ARR ด้วย API ของ Hardware Composer (HWC) HAL ใหม่และการเปลี่ยนแปลงแพลตฟอร์ม
หากต้องการเปิดใช้ ARR ผู้ผลิตอุปกรณ์ต้องรองรับการเปลี่ยนแปลงเคอร์เนลและระบบในอุปกรณ์ที่ใช้ Android 15 ขึ้นไป และใช้ API android.hardware.graphics.composer3 เวอร์ชัน 3 ตามที่ระบุไว้ในส่วนต่อไปนี้
ดูข้อมูลเพิ่มเติมได้ที่การใช้งานอ้างอิงของ API ของ Pixel ที่รองรับ ARR
DisplayConfiguration.aidl
API DisplayConfiguration.aidl จะระบุการกำหนดค่าการแสดงผล
โดยใช้แอตทริบิวต์การแสดงผล พร้อมด้วยแอตทริบิวต์ต่อไปนี้สำหรับ ARR
- ไม่บังคับ
vrrConfig: หากตั้งค่าไว้ ระบบจะเปิดใช้ ARR สำหรับการกำหนดค่าที่เฉพาะเจาะจง หากตั้งค่าเป็นnullระบบจะตั้งค่าโหมดการแสดงผลเป็นโหมดที่ไม่ใช่ ARR เช่น อัตราการรีเฟรชหลายรายการ (MRR) แอตทริบิวต์นี้ช่วยให้กำหนดค่า การแสดงผลเป็น MRR หรือ ARR ได้ แต่จะกำหนดค่าทั้ง 2 อย่างพร้อมกันไม่ได้ vsyncPeriod: อัตรา VSync ของจอแสดงผล ในจอแสดงผล ARR ระบบจะใช้ค่านี้เพื่อหา อัตราการรีเฟรชแบบไม่ต่อเนื่องที่รองรับผู้ให้บริการต้องตั้งค่า
DisplayConfiguration.vsyncPeriodสำหรับอุปกรณ์ทั้งหมด สำหรับจอแสดงผลที่ไม่ใช่ ARRDisplayConfiguration.vsyncPeriodคือ อัตราการรีเฟรชจอแสดงผล หากอุปกรณ์รองรับ 120 Hz ค่านี้ต้องเป็น 8.3 มิลลิวินาทีสำหรับจอแสดงผล ARR
DisplayConfiguration.vsyncPeriodคือความถี่ของสัญญาณ TE หากอุปกรณ์มีminFrameIntervalNs8.3 มิลลิวินาที แต่ TE is 240 Hz ค่านี้ต้องเป็น 4.16 มิลลิวินาที
VrrConfig.aidl
API ของ VrrConfig.aidl มีแอตทริบิวต์ต่อไปนี้
minFrameIntervalNs: อัตราการรีเฟรชสูงสุดที่จอแสดงผลรองรับNotifyExpectedPresentConfig: ซึ่งจะกำหนดโดยเวลาที่จอแสดงผลต้องแจ้งล่วงหน้าเกี่ยวกับ เฟรมที่กำลังจะมาถึง
IComposerClient.notifyExpectedPresent
ให้คำแนะนำสำหรับเฟรมที่น่าจะแสดง เพื่อให้จอแสดงผล
ปรับระยะเวลาการรีเฟรชด้วยตนเองได้ตามนั้น frameIntervalNs แสดงถึง
ความถี่ปัจจุบันที่ตามหลัง expectedPresentTime ตัวอย่างเช่น หากมีการเรียกใช้
notifyExpectedPresent ด้วย expectedPresentTime N และ
frameIntervalNs ที่ 16.6 มิลลิวินาที เฟรมถัดไปจะอยู่ที่ N + 16.6 มิลลิวินาที
หลังจากเวลาปัจจุบัน N หลังจากเวลาปัจจุบัน N จังหวะเฟรมจะเป็น 16.6 มิลลิวินาทีจนกว่าจะมีการเปลี่ยนแปลงเพิ่มเติม
IComposerClient.notifyExpectedPresent จะเรียกใช้ก็ต่อเมื่อตั้งค่า
DisplayConfiguration.notifyExpectedPresentConfig และหากเกิดเงื่อนไขเวลาข้อใดข้อหนึ่งต่อไปนี้
- เวลาปัจจุบันที่ไม่อยู่ในจังหวะ: เวลาการนำเสนอที่คาดไว้ของเฟรมถัดไป
เบี่ยงเบนจากอัตราการรีเฟรชปกติของจอแสดงผลที่กำหนดโดย
frameIntervalNs - หมดเวลา: ช่วงเวลาระหว่างเฟรมก่อนหน้ามากกว่าหรือเท่ากับ
notifyExpectedPresentConfig.timeoutNs
DisplayCommand.frameIntervalNs
DisplayCommand.frameIntervalNs
ให้คำแนะนำเกี่ยวกับจังหวะของเฟรมที่กำลังจะมาถึงในหน่วยนาโนวินาที
การทดสอบ
ใช้
onRefreshRateChangedDebug
สำหรับการแก้ไขข้อบกพร่อง เมธอดนี้จะแจ้งให้ไคลเอ็นต์ทราบว่าอัตราการรีเฟรชของ
จอแสดงผลมีการเปลี่ยนแปลง
ใช้แอปทดสอบ
TouchLatency
สำหรับการทดสอบด้วยตนเองตามที่แสดงในรูปที่ 2
รูปที่ 2 แอปทดสอบ TouchLatency
ในแอปทดสอบ ให้ใช้แถบเลื่อนเพื่อปรับอัตราการแสดงผลเป็นค่าต่างๆ ของ ตัวหารอัตราการรีเฟรชของอัตราการรีเฟรชของจอแสดงผล สังเกตว่าอัตราเฟรม เปลี่ยนแปลงอย่างไรตามอัตราที่ขอ