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