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 ketika hanya satu lapisan yang diperbarui, dan bukan untuk kasus yang terjadi di seluruh lapisan, seperti perubahan geometri atau transaksi sinkronisasi.
Sebelum Android 13, flag debug.sf.latch_unsignaled
di AOSP memungkinkan SurfaceFlinger mengunci semua buffer yang tidak diberi sinyal, apa pun kasus penggunaannya. Ketika konfigurasi ini diaktifkan, terdapat efek samping yang tidak diinginkan, seperti terputusnya transaksi sinkronisasi dan membekukan seluruh tampilan saat menunggu buffer yang tidak lengkap.
Dengan mode AutoSingleLayer
, hanya buffer dari satu permukaan yang diperbarui dalam satu bingkai. Mode ini memungkinkan game dan aplikasi layar penuh lainnya mendapatkan manfaat dari mengunci buffer yang tidak diberi sinyal dan mengurangi jank aplikasi namun tetap tidak terpengaruh oleh tampilan yang macet.
Pengaturan mode AutoSingleLayer
Di Android 13, AutoSingleLayer
adalah mode default untuk fitur latch unsignaled buffer. Mode ini dikendalikan oleh properti sistem debug.sf.auto_latch_unsignaled
.
SurfaceFlinger membaca LatchUnsignaledConfig
saat boot. Berikut adalah konfigurasi yang mungkin:
LatchUnsignaledConfig::AutoSingleLayer
Dalam mode default AOSP ini, penguncian buffer yang tidak diberi sinyal diizinkan ketika satu lapisan diperbarui dalam sebuah bingkai, dan pembaruan hanya mencakup pembaruan 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 latch unsignaled 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 buffer terkunci tanpa sinyal. Untuk mengonfigurasi mode ini, setel
debug.sf.latch_unsignaled
ketrue
.
Uji AutoSingleLayer
Untuk menguji apakah buffer terkunci tanpa sinyal, cari jejak berikut dari SurfaceFlinger di Perfetto :
Gambar 1. Jejak buffer tak sinyal yang terkunci di Perfetto