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. Geometri değişiklikleri veya senkronizasyon işlemleri gibi katmanlar arasında gerçekleşen 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 sinyal gönderilmeyen tüm 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.
Test AutoSingleLayer
Bir arabelleğin sinyalsiz olarak kilitlenip kilitlenmediğini test etmek için Perfetto'da SurfaceFlinger'dan aşağıdaki izlerini arayın:
Şekil 1. Perfetto'da kilitli, sinyalsiz bir arabelleğin izlemesi