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 satu layer yang diperbarui.
Konfigurasi ini tidak berlaku untuk kasus yang terjadi di seluruh layer, 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 Anda mengaktifkan konfigurasi ini, konfigurasi ini dapat menyebabkan efek samping yang tidak diinginkan, misalnya, merusak transaksi sinkronisasi dan membekukan seluruh tampilan saat menunggu buffer yang tidak lengkap.
Dalam mode AutoSingleLayer, SurfaceFlinger hanya memperbarui buffer dari satu platform dalam frame. Mode ini memungkinkan game dan aplikasi layar penuh lainnya mendapatkan manfaat dari penguncian buffer yang tidak diberi sinyal dan mengurangi jank aplikasi tanpa terpengaruh oleh pembekuan tampilan.
Setelan mode AutoSingleLayer
Untuk Android 13, AutoSingleLayer adalah mode default
untuk fitur penguncian buffer yang tidak diberi sinyal. Mode ini dikontrol oleh properti sistem
debug.sf.auto_latch_unsignaled.
SurfaceFlinger membaca LatchUnsignaledConfig saat booting. Konfigurasi yang mungkin adalah:
LatchUnsignaledConfig::AutoSingleLayerDalam mode default AOSP ini, SurfaceFlinger mengizinkan penguncian buffer yang tidak diberi sinyal saat satu layer diperbarui dalam frame. Pembaruan hanya boleh menyertakan pembaruan buffer tanpa transaksi sinkronisasi atau perubahan geometri. Secara default, mode ini menetapkan
debug.sf.auto_latch_unsignaledketrue.LatchUnsignaledConfig::DisabledMode ini menonaktifkan perilaku penguncian yang tidak diberi sinyal dan hanya mengunci transaksi yang diberi sinyal. Mode ini juga menonaktifkan mode
AutoSingleLayer. Untuk mengonfigurasi mode ini, tetapkandebug.sf.latch_unsignaleddandebug.sf.auto_latch_unsignaledkefalse.LatchUnsignaledConfig::AlwaysDalam mode ini, SurfaceFlinger mengunci semua buffer yang tidak diberi sinyal. Untuk mengonfigurasi mode ini, tetapkan
debug.sf.latch_unsignaledketrue.
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 di Perfetto