Android 13 เพิ่มการกำหนดค่าใหม่ที่ชื่อ
AutoSingleLayer
สำหรับการล็อกบัฟเฟอร์ที่ไม่ได้ส่งสัญญาณ
การกำหนดค่านี้ช่วยให้ SurfaceFlinger ล็อกบัฟเฟอร์ที่ไม่มีการส่งสัญญาณได้เมื่อมีการอัปเดตเลเยอร์เดียวเท่านั้น และจะไม่ล็อกในกรณีที่เกิดขึ้นในเลเยอร์ต่างๆ เช่น การเปลี่ยนแปลงรูปทรงเรขาคณิตหรือธุรกรรมการซิงค์
ก่อน Android 13 แฟล็ก debug.sf.latch_unsignaled
ใน AOSP จะช่วยให้ SurfaceFlinger ล็อกบัฟเฟอร์ที่ไม่มีการส่งสัญญาณทั้งหมดได้ ไม่ว่าจะมี Use Case ใดก็ตาม เมื่อเปิดใช้การกำหนดค่านี้ จะมีผลข้างเคียงที่ไม่พึงประสงค์ เช่น
การหยุดทำธุรกรรมการซิงค์และหยุดการแสดงผลทั้งหมดชั่วคราวขณะรอ
บัฟเฟอร์ที่ไม่สมบูรณ์
ในโหมด AutoSingleLayer
ระบบจะอัปเดตเฉพาะบัฟเฟอร์ของพื้นผิวเดียว
ในเฟรม โหมดนี้ช่วยให้เกมและแอปอื่นๆ แบบเต็มหน้าจอได้รับประโยชน์
จากการล็อกบัฟเฟอร์ที่ไม่มีการส่งสัญญาณและลดการกระตุกของแอปโดยไม่ได้รับผลกระทบ
จากการหยุดทำงานของจอแสดงผล
การตั้งค่าโหมด AutoSingleLayer
ใน Android 13
AutoSingleLayer
เป็นค่าเริ่มต้น
สำหรับฟีเจอร์บัฟเฟอร์ที่ไม่ได้ส่งสัญญาณของ Latch โหมดนี้ควบคุมโดย
พร็อพเพอร์ตี้ของระบบ debug.sf.auto_latch_unsignaled
SurfaceFlinger จะอ่าน LatchUnsignaledConfig
เมื่อบูต
การกำหนดค่าที่เป็นไปได้มีดังนี้
LatchUnsignaledConfig::AutoSingleLayer
ในโหมดเริ่มต้นของ AOSP นี้ ระบบจะอนุญาตให้ล็อกบัฟเฟอร์ที่ไม่มีการส่งสัญญาณเมื่อมีการอัปเดตเลเยอร์เดียวในเฟรม และการอัปเดตมีเพียงการอัปเดตบัฟเฟอร์โดยไม่มีธุรกรรมการซิงค์หรือการเปลี่ยนแปลงเรขาคณิต ในโหมดนี้ ระบบจะตั้งค่า
debug.sf.auto_latch_unsignaled
เป็นtrue
โดยค่าเริ่มต้นLatchUnsignaledConfig::Disabled
โหมดนี้จะปิดใช้ลักษณะการทำงานของ Latch ที่ไม่มีการส่งสัญญาณและจะ Latch เฉพาะธุรกรรมที่มีการส่งสัญญาณ เท่านั้น นอกจากนี้ โหมดนี้ยังปิดใช้โหมด
AutoSingleLayer
ด้วย หากต้องการ กำหนดค่าโหมดนี้ ให้ตั้งค่าdebug.sf.latch_unsignaled
และdebug.sf.auto_latch_unsignaled
เป็นfalse
LatchUnsignaledConfig::Always
ในโหมดนี้ บัฟเฟอร์ทั้งหมดจะได้รับการล็อกโดยไม่มีการส่งสัญญาณ หากต้องการกำหนดค่าโหมดนี้ ให้ตั้งค่า
debug.sf.latch_unsignaled
เป็นtrue
ทดสอบ AutoSingleLayer
หากต้องการทดสอบว่าบัฟเฟอร์ล็อกโดยไม่มีการส่งสัญญาณหรือไม่ ให้มองหาร่องรอยต่อไปนี้ จาก SurfaceFlinger ใน Perfetto
รูปที่ 1 ร่องรอยของบัฟเฟอร์ที่ล็อกไว้ซึ่งไม่มีการส่งสัญญาณใน Perfetto