Android 13 menambahkan konfigurasi baru yang disebut
AutoSingleLayer
untuk mengunci
buffer yang tidak diberi sinyal. Konfigurasi ini memungkinkan SurfaceFlinger mengunci buffer
tanpa sinyal saat hanya satu lapisan yang diperbarui, dan bukan 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 buffering yang tidak diberi sinyal, terlepas dari kasus
penggunaannya. Jika konfigurasi ini diaktifkan, akan ada efek samping yang tidak diinginkan, seperti
memecah transaksi sinkronisasi dan membekukan seluruh tampilan saat menunggu
buffer yang tidak lengkap.
Dengan mode AutoSingleLayer
, hanya buffer dari satu platform yang diperbarui
dalam frame. Mode ini memungkinkan game dan aplikasi layar penuh lainnya mendapatkan manfaat
dari buffering yang tidak diberi sinyal dan mengurangi jank aplikasi tanpa terpengaruh
oleh pembekuan layar.
Setelan mode AutoSingleLayer
Di Android 13,
AutoSingleLayer
adalah mode
default untuk fitur latch buffer tanpa sinyal. Mode ini dikontrol oleh
properti sistem debug.sf.auto_latch_unsignaled
.
SurfaceFlinger membaca LatchUnsignaledConfig
saat booting.
Berikut adalah kemungkinan konfigurasinya:
LatchUnsignaledConfig::AutoSingleLayer
Dalam mode default AOSP ini, buffering yang tidak diberi sinyal diizinkan saat satu lapisan diperbarui dalam frame, dan update hanya menyertakan update buffer tanpa transaksi sinkronisasi atau perubahan geometri. Dalam mode ini,
debug.sf.auto_latch_unsignaled
ditetapkan ketrue
secara default.LatchUnsignaledConfig::Disabled
Mode ini menonaktifkan perilaku latch yang tidak diberi sinyal dan hanya mengunci transaksi yang diberi sinyal. Mode ini juga menonaktifkan mode
AutoSingleLayer
. Untuk mengonfigurasi mode ini, seteldebug.sf.latch_unsignaled
dandebug.sf.auto_latch_unsignaled
kefalse
.LatchUnsignaledConfig::Always
Dalam mode ini, semua buffering tidak diberi sinyal. Untuk mengonfigurasi mode ini, setel
debug.sf.latch_unsignaled
ketrue
.
Menguji AutoSingleLayer
Untuk menguji apakah buffering tidak diberi sinyal, cari rekaman aktivitas berikut dari SurfaceFlinger di Perfetto:
Gambar 1. Rekaman aktivitas buffering tanpa sinyal di Perfetto