Android 13, sinyal verilmeyen arabelleklerin kilitlenmesi için AutoSingleLayer
adlı yeni bir yapılandırma ekler. Bu yapılandırma, yalnızca tek bir katman güncellenirken SurfaceFlinger'in sinyalsiz bir arabelleği kilitlemesine olanak tanır. Geometri değişiklikleri veya senkronizasyon işlemleri gibi katmanlar arasında gerçekleşen durumlar için geçerli değildir.
Android 13'ten önce, AOSP'deki debug.sf.latch_unsignaled
işareti, kullanım alanından bağımsız olarak SurfaceFlinger'ın işaretlenmemiş tüm arabellekleri kilitlemesine olanak tanıyordu. Bu yapılandırma etkinleştirildiğinde, senkronizasyon işlemlerinin bozulması ve eksik arabellekler beklenirken ekranın tamamen donması gibi istenmeyen yan etkiler oluşur.
AutoSingleLayer
modunda, bir karede yalnızca tek bir yüzeyin arabelleği güncellenir. Bu mod, oyunların ve diğer tam ekran uygulamaların, sinyalsiz arabellekleri kilitleme ve uygulama takılmasını azaltma avantajlarından yararlanmasını sağlar. Bu sırada ekran donmalarından etkilenmezler.
AutoSingleLayer modu ayarları
Android 13'te, mandal sinyalsiz arabellek özelliği için varsayılan mod AutoSingleLayer
'dir. Bu mod, debug.sf.auto_latch_unsignaled
sistem özelliği tarafından kontrol edilir.
SurfaceFlinger, başlatma sırasında LatchUnsignaledConfig
dosyasını okur.
Olası yapılandırmalar şunlardır:
LatchUnsignaledConfig::AutoSingleLayer
Bu AOSP varsayılan modunda, bir karede tek bir katman güncellendiğinde ve güncelleme yalnızca senkronizasyon işlemleri veya geometri değişiklikleri içermeyen bir arabellek güncellemesi olduğunda sinyalsiz arabelleklerin kilitlenmesine izin verilir. Bu modda,
debug.sf.auto_latch_unsignaled
varsayılan olaraktrue
olarak ayarlanır.LatchUnsignaledConfig::Disabled
Bu mod, sinyal verilmeyen mandal davranışını devre dışı bırakır ve yalnızca sinyal verilen işlemleri kilitler. Bu mod,
AutoSingleLayer
modunu da devre dışı bırakır. Bu modu yapılandırmak içindebug.sf.latch_unsignaled
vedebug.sf.auto_latch_unsignaled
değerlerinifalse
olarak ayarlayın.LatchUnsignaledConfig::Always
Bu modda tüm arabellekler sinyal verilmeden kilitlenir. Bu modu yapılandırmak için
debug.sf.latch_unsignaled
ayarınıtrue
olarak belirleyin.
Test AutoSingleLayer
Bir arabelleğin sinyal verilmeden kilitlenip kilitlenmediğini test etmek için Perfetto'da SurfaceFlinger'dan gelen aşağıdaki izleri arayın:
1. şekil. Perfetto'da kilitlenmiş sinyalsiz bir arabelleğin izi