Android 13, sinyalsiz arabellekleri kilitlemek için AutoSingleLayer
adlı yeni bir yapılandırma ekler. Bu yapılandırma, SurfaceFlinger'ın yalnızca tek bir katman güncellenirken sinyalsiz bir arabellek kilitlemesine olanak tanır. Katmanlar arasında gerçekleşen geometri değişiklikleri veya senkronizasyon işlemleri gibi durumlar için bu yapılandırma geçerli değildir.
Android 13'ten önce AOSP'deki debug.sf.latch_unsignaled
işaretçisi, kullanım alanından bağımsız olarak SurfaceFlinger'ın tüm sinyalsiz arabellekleri kilitlemesine olanak tanır. Bu yapılandırma etkinleştirildiğinde, senkronizasyon işlemlerinin kesilmesi ve tamamlanmamış arabellekler beklenirken ekranın tamamının donması gibi istenmeyen yan etkiler ortaya çıkar.
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 arabelleklerin kilitlenmesi ve uygulamadaki takılmaların azaltılması avantajlarından yararlanmasına olanak tanır.
AutoSingleLayer modu ayarları
Android 13'te, AutoSingleLayer
, mandallı sinyalsiz arabellek özelliğinin varsayılan modudur. Bu mod, debug.sf.auto_latch_unsignaled
sistem mülkü tarafından kontrol edilir.
SurfaceFlinger, önyükleme 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 içerdiğinde sinyalsiz arabelleklerin kilitlenmesine izin verilir. Bu modda
debug.sf.auto_latch_unsignaled
, varsayılan olaraktrue
olarak ayarlanır.LatchUnsignaledConfig::Disabled
Bu mod, sinyalsiz mandallama davranışını devre dışı bırakır ve yalnızca sinyal verilen işlemleri mandallar. 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
'ifalse
olarak ayarlayın.LatchUnsignaledConfig::Always
Bu modda, tüm tamponlar sinyalsiz olarak kilitlenir. Bu modu yapılandırmak için
debug.sf.latch_unsignaled
değerinitrue
olarak ayarlayın.
AutoSingleLayer
testi
Bir arabelleğin sinyalsiz olarak kilitlenip kilitlenmediğini test etmek için Perfetto'da SurfaceFlinger'dan gelen aşağıdaki izleri arayın:
Şekil 1. Perfetto'da kilitli, sinyalsiz bir arabelleğin izlemesi