อัตราการรีเฟรชแบบปรับอัตโนมัติ

ตั้งแต่ 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 จากเฟรมล่าสุด

arr-example

รูปที่ 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 สำหรับอุปกรณ์ทั้งหมด สําหรับจอแสดงผลที่ไม่ใช่ ARR DisplayConfiguration.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

touchlatency-app

รูปที่ 2 แอปทดสอบ TouchLatency

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