การล็อกบัฟเฟอร์ที่ไม่มีสัญญาณด้วย AutoSingleLayer

Android 13 เพิ่มการกำหนดค่าใหม่ที่เรียกว่า AutoSingleLayer สำหรับการล็อกบัฟเฟอร์ที่ไม่มีการแจ้งสัญญาณ การกำหนดค่านี้ช่วยให้ SurfaceFlinger สลักบัฟเฟอร์ที่ไม่มีสัญญาณเมื่อระบบอัปเดตเลเยอร์เดียวเท่านั้น ไม่ใช่สำหรับกรณีที่เกิดขึ้นข้ามเลเยอร์ เช่น การเปลี่ยนแปลงเรขาคณิตหรือการซิงค์ธุรกรรม

ก่อน Android 13 แฟล็ก debug.sf.latch_unsignaled ใน AOSP จะช่วยให้ SurfaceFlinger ล็อกบัฟเฟอร์ที่ไม่ได้ส่งสัญญาณทั้งหมดไว้ โดยไม่คำนึงถึงกรณีการใช้งาน เมื่อเปิดใช้การกำหนดค่านี้ อาจมีผลข้างเคียงที่ไม่พึงประสงค์ เช่น การหยุดธุรกรรมการซิงค์และทำให้การแสดงผลทั้งหมดค้างขณะรอบัฟเฟอร์ที่ไม่สมบูรณ์

เมื่อใช้โหมด AutoSingleLayer ระบบจะอัปเดตเฉพาะบัฟเฟอร์ของพื้นผิวเดียวในเฟรม โหมดนี้ช่วยให้เกมและแอปแบบเต็มหน้าจออื่นๆ ได้รับประโยชน์ในการเก็บบัฟเฟอร์ที่ไม่มีสัญญาณและลดความกระตุกของแอปขณะที่ยังคงไม่ได้รับผลกระทบ จากการค้างของจอแสดงผล

การตั้งค่าโหมด AutoSingleLayer

ใน Android 13 AutoSingleLayer เป็นโหมดเริ่มต้นสำหรับฟีเจอร์บัฟเฟอร์แบบไม่ส่งสัญญาณ โหมดนี้ควบคุมโดยพร็อพเพอร์ตี้ของระบบ debug.sf.auto_latch_unsignaled

SurfaceFlinger อ่าน LatchUnsignaledConfig เมื่อบูต การกำหนดค่าที่เป็นไปได้มีดังนี้

  • LatchUnsignaledConfig::AutoSingleLayer

    ในโหมดเริ่มต้นของ AOSP นี้ ระบบจะอนุญาตให้ใช้การล็อกบัฟเฟอร์ที่ไม่ได้ส่งสัญญาณเมื่อมีการอัปเดตเลเยอร์เดียวในเฟรม และการอัปเดตมีเพียงการอัปเดตบัฟเฟอร์โดยไม่มีธุรกรรมการซิงค์หรือการเปลี่ยนแปลงเรขาคณิต ในโหมดนี้ debug.sf.auto_latch_unsignaledจะตั้งค่าเป็น true โดยค่าเริ่มต้น

  • LatchUnsignaledConfig::Disabled

    โหมดนี้จะปิดใช้ลักษณะการทํางานแบบไม่ส่งสัญญาณของล็อกและจะล็อกเฉพาะธุรกรรมที่ส่งสัญญาณเท่านั้น โหมดนี้จะปิดใช้โหมด AutoSingleLayer ด้วย หากต้องการกำหนดค่าโหมดนี้ ให้ตั้งค่า debug.sf.latch_unsignaled และ debug.sf.auto_latch_unsignaled เป็น false

  • LatchUnsignaledConfig::Always

    ในโหมดนี้ บัฟเฟอร์ทั้งหมดจะล็อกไว้โดยไม่มีสัญญาณ หากต้องการกำหนดค่าโหมดนี้ ให้ตั้งค่า debug.sf.latch_unsignaled เป็น true

ทดสอบ AutoSingleLayer

หากต้องการตรวจสอบว่าบัฟเฟอร์มีการล็อกโดยไม่ส่งสัญญาณหรือไม่ ให้มองหาร่องรอยต่อไปนี้จาก SurfaceFlinger ใน Perfetto

การติดตามของบัฟเฟอร์ที่ไม่มีสัญญาณที่มีสลัก

รูปที่ 1 ร่องรอยของบัฟเฟอร์ที่ล็อกไว้ซึ่งไม่ได้ส่งสัญญาณใน Perfetto