Android 13 memperkenalkan konfigurasi baru yang disebut
AutoSingleLayer
untuk mengunci buffer yang tidak diberi sinyal. Konfigurasi ini memungkinkan
SurfaceFlinger mengunci buffer yang tidak diberi sinyal saat hanya ada satu lapisan yang diperbarui.
Hal ini tidak berlaku untuk kasus yang terjadi di seluruh lapisan, misalnya, perubahan geometri atau transaksi sinkronisasi.
Sebelumnya, flag debug.sf.latch_unsignaled
di Android Open Source
Project (AOSP) memungkinkan SurfaceFlinger mengunci semua buffer yang tidak diberi sinyal, terlepas dari
kasus penggunaannya. Jika diaktifkan, konfigurasi ini dapat menyebabkan efek samping yang tidak diinginkan, misalnya, mengganggu transaksi sinkronisasi dan membekukan seluruh layar saat menunggu buffer yang tidak lengkap.
Dalam mode AutoSingleLayer
, SurfaceFlinger hanya memperbarui buffer satu
permukaan dalam frame. Mode ini memungkinkan game dan aplikasi layar penuh lainnya mendapatkan manfaat dari
penguncian buffer yang tidak diberi sinyal dan mengurangi jank aplikasi sekaligus tidak terpengaruh oleh
pembekuan layar.
Setelan mode AutoSingleLayer
Untuk Android 13, AutoSingleLayer
adalah
mode default untuk fitur buffer yang tidak diberi sinyal latch. Mode ini dikontrol oleh
properti sistem debug.sf.auto_latch_unsignaled
.
SurfaceFlinger membaca LatchUnsignaledConfig
saat booting. Konfigurasi yang
mungkin adalah:
LatchUnsignaledConfig::AutoSingleLayer
Dalam mode default AOSP ini, SurfaceFlinger mengizinkan penguncian buffer yang tidak diberi sinyal saat satu lapisan diupdate dalam frame. Pembaruan hanya boleh mencakup pembaruan buffer tanpa transaksi sinkronisasi atau perubahan geometri. Secara default, mode ini menetapkan
debug.sf.auto_latch_unsignaled
ketrue
.LatchUnsignaledConfig::Disabled
Mode ini menonaktifkan perilaku tidak diberi sinyal latch dan hanya mengunci transaksi yang diberi sinyal. Mode ini juga menonaktifkan mode
AutoSingleLayer
. Untuk mengonfigurasi mode ini, tetapkandebug.sf.latch_unsignaled
dandebug.sf.auto_latch_unsignaled
kefalse
.LatchUnsignaledConfig::Always
Dalam mode ini, SurfaceFlinger mengunci semua buffer yang tidak diberi sinyal. Untuk mengonfigurasi mode ini, setel
debug.sf.latch_unsignaled
ketrue
.
Menguji AutoSingleLayer
Untuk menguji apakah buffer dikunci tanpa sinyal, cari rekaman aktivitas berikut dari SurfaceFlinger di Perfetto:
Gambar 1. Rekaman aktivitas buffer yang tidak diberi sinyal dan di-latch di Perfetto