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

ตั้งแต่ 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 ด้วย 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 สำหรับอุปกรณ์ทั้งหมด สำหรับจอแสดงผลที่ไม่ใช่ 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 มิลลิวินาที เฟรมถัดไปจะอยู่ที่ N + 16.6 มิลลิวินาทีหลังจากเวลาปัจจุบัน N หลังจากเวลาปัจจุบัน N อัตราเฟรมจะเท่ากับ 16.6 ms จนกว่าจะมีการเปลี่ยนแปลงเพิ่มเติม

IComposerClient.notifyExpectedPresent จะเรียกใช้ก็ต่อเมื่อมีการตั้งค่า DisplayConfiguration.notifyExpectedPresentConfig และเงื่อนไขการกำหนดเวลาข้อใดข้อหนึ่งต่อไปนี้เกิดขึ้น

  • เวลาปัจจุบันที่ไม่เป็นไปตามจังหวะ: เวลาแสดงผลที่คาดไว้ของเฟรมถัดไปแตกต่างจากอัตราการรีเฟรชปกติของจอแสดงผลที่กําหนดโดย frameIntervalNs
  • หมดเวลา: ช่วงเวลาระหว่างเฟรมก่อนหน้ามากกว่าหรือเท่ากับ notifyExpectedPresentConfig.timeoutNs

DisplayCommand.frameIntervalNs

DisplayCommand.frameIntervalNs ให้คำแนะนำเกี่ยวกับความถี่ของเฟรมที่กําลังจะมาถึงเป็นนาโนวินาที

การทดสอบ

ใช้ onRefreshRateChangedDebug เพื่อแก้ไขข้อบกพร่อง วิธีนี้จะแจ้งไคลเอ็นต์ว่าอัตราการรีเฟรชของจอแสดงผลมีการเปลี่ยนแปลง

ใช้แอปทดสอบ TouchLatency เพื่อทดสอบด้วยตนเองดังที่แสดงในรูปที่ 2

touchlatency-app

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

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