Android 13 menambahkan konfigurasi baru yang disebut
AutoSingleLayer
untuk mengunci
buffer yang tidak diberi sinyal. Konfigurasi ini memungkinkan SurfaceFlinger mengunci buffer yang tidak diberi sinyal saat hanya satu lapisan yang diupdate, dan tidak untuk kasus yang terjadi di seluruh lapisan, seperti perubahan geometri atau transaksi sinkronisasi.
Sebelum Android 13, tanda debug.sf.latch_unsignaled
di AOSP memungkinkan SurfaceFlinger mengunci semua buffer yang tidak diberi sinyal, terlepas dari kasus
penggunaannya. Jika konfigurasi ini diaktifkan, akan ada efek samping yang tidak diinginkan, seperti merusak transaksi sinkronisasi dan membekukan seluruh tampilan saat menunggu buffer yang tidak lengkap.
Dengan mode AutoSingleLayer
, hanya buffer satu permukaan yang diperbarui dalam frame. Mode ini memungkinkan game dan aplikasi layar penuh lainnya mendapatkan manfaat
dari penguncian buffer yang tidak diberi sinyal dan mengurangi jank aplikasi sambil tetap tidak terpengaruh
oleh pembekuan layar.
Setelan mode AutoSingleLayer
Di Android 13,
AutoSingleLayer
adalah mode
default untuk fitur buffer tidak tersinyal penguncian. Mode ini dikontrol oleh
properti sistem debug.sf.auto_latch_unsignaled
.
SurfaceFlinger membaca LatchUnsignaledConfig
saat booting.
Berikut adalah kemungkinan konfigurasi:
LatchUnsignaledConfig::AutoSingleLayer
Dalam mode default AOSP ini, buffer yang tidak diberi sinyal dapat di-latch saat satu lapisan diperbarui dalam frame, dan update hanya mencakup update buffer tanpa transaksi sinkronisasi atau perubahan geometri. Dalam mode ini,
debug.sf.auto_latch_unsignaled
disetel ketrue
secara default.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, semua buffer dikunci tanpa sinyal. Untuk mengonfigurasi mode ini, setel
debug.sf.latch_unsignaled
ketrue
.
Uji 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