Android 13, sinyalsiz arabelleklerin kilitlenmesi için AutoSingleLayer adlı yeni bir yapılandırma sunar. Bu yapılandırma, yalnızca tek bir katman güncellenirken SurfaceFlinger'ın sinyalsiz bir arabelleği kilitlemesine olanak tanır.
Katmanlar arasında gerçekleşen durumlar (ör. geometri değişiklikleri veya senkronizasyon işlemleri) için geçerli değildir.
Daha önce Android Açık Kaynak Projesi'ndeki (AOSP) debug.sf.latch_unsignaled işareti, kullanım alanından bağımsız olarak SurfaceFlinger'in sinyal verilmeyen tüm arabellekleri kilitlemesine izin veriyordu. Bu yapılandırmayı etkinleştirdiğinizde istenmeyen yan etkiler (ör. senkronizasyon işlemlerinin bozulması ve eksik arabellekler beklenirken ekranın donması) oluşabilir.
AutoSingleLayer modunda SurfaceFlinger, bir karedeki tek bir yüzeyin arabelleğini günceller. Bu mod, oyunların ve diğer tam ekran uygulamaların, sinyalsiz arabellekleri kilitleyip uygulama takılmasını azaltarak ekran donmalarından etkilenmeden yararlanmasını sağlar.
AutoSingleLayer modu ayarları
Android 13'te AutoSingleLayer, kilitlenmiş sinyalsiz arabellek özelliği için varsayılan moddur. 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::AutoSingleLayerBu AOSP varsayılan modunda SurfaceFlinger, bir karede tek bir katman güncellendiğinde sinyalsiz arabelleklerin kilitlenmesine izin verir. Güncelleme yalnızca senkronizasyon işlemleri veya geometri değişiklikleri içermeyen bir arabellek güncellemesi olmalıdır. Bu mod, varsayılan olarak
debug.sf.auto_latch_unsignaleddeğerinitrueolarak ayarlar.LatchUnsignaledConfig::DisabledBu mod, kilitlenmenin sinyalsiz davranışını devre dışı bırakır ve yalnızca sinyalli işlemleri kilitler. Bu modda
AutoSingleLayermodu da devre dışı bırakılır. Bu modu yapılandırmak içindebug.sf.latch_unsignaledvedebug.sf.auto_latch_unsignaleddeğerlerinifalseolarak ayarlayın.LatchUnsignaledConfig::AlwaysBu modda SurfaceFlinger, sinyalsiz tüm arabellekleri kilitler. Bu modu yapılandırmak için
debug.sf.latch_unsignaledseçeneğinitrueolarak ayarlayın.
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:
Şekil 1. Perfetto'da kilitlenmiş, sinyal verilmeyen bir arabelleğin izi