ตั้งแต่ 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 ด้วย HAL API ของเครื่องมือแต่งภาพฮาร์ดแวร์ (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 ได้ แต่ต้องเลือกอย่างใดอย่างหนึ่ง 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 มิลลิวินาที เฟรมถัดไปจะอยู่ที่ N + 16.6 มิลลิวินาทีหลังจากเวลาปัจจุบัน N หลังจากเวลาปัจจุบัน N อัตราเฟรมจะเท่ากับ 16.6 ms จนกว่าจะมีการเปลี่ยนแปลงเพิ่มเติม
IComposerClient.notifyExpectedPresent
จะเรียกใช้ก็ต่อเมื่อมีการตั้งค่า DisplayConfiguration.notifyExpectedPresentConfig
และเงื่อนไขการกำหนดเวลาข้อใดข้อหนึ่งต่อไปนี้เกิดขึ้น
- เวลาปัจจุบันที่ไม่เป็นไปตามจังหวะ: เวลาแสดงผลที่คาดไว้ของเฟรมถัดไปแตกต่างจากอัตราการรีเฟรชปกติของจอแสดงผลที่กําหนดโดย
frameIntervalNs
- หมดเวลา: ช่วงเวลาระหว่างเฟรมก่อนหน้ามากกว่าหรือเท่ากับ
notifyExpectedPresentConfig.timeoutNs
DisplayCommand.frameIntervalNs
DisplayCommand.frameIntervalNs
ให้คำแนะนำเกี่ยวกับความถี่ของเฟรมที่กําลังจะมาถึงเป็นนาโนวินาที
การทดสอบ
ใช้ onRefreshRateChangedDebug
เพื่อแก้ไขข้อบกพร่อง วิธีนี้จะแจ้งไคลเอ็นต์ว่าอัตราการรีเฟรชของจอแสดงผลมีการเปลี่ยนแปลง
ใช้แอปทดสอบ TouchLatency
เพื่อทดสอบด้วยตนเองดังที่แสดงในรูปที่ 2
รูปที่ 2 แอปทดสอบ TouchLatency
ในแอปทดสอบ ให้ใช้แถบเลื่อนเพื่อปรับอัตราการแสดงผลเป็นค่าต่างๆ ของอัตราการรีเฟรชตัวหารของอัตราการรีเฟรชของจอแสดงผล สังเกตการเปลี่ยนแปลงอัตราเฟรม ที่เกี่ยวข้องกับอัตราที่ขอ