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
ในแอปทดสอบ ให้ใช้แถบเลื่อนเพื่อปรับอัตราการแสดงผลเป็นค่าต่างๆ ของ อัตราการรีเฟรชตัวหารของอัตราการรีเฟรชของจอแสดงผล สังเกตว่าอัตราเฟรม เปลี่ยนแปลงอย่างไรตามอัตราที่ขอ