Android 13, sinyalsiz arabellekleri kilitlemek 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 tüm sinyalsiz arabellekleri kilitlemesine izin veriyordu. Bu yapılandırmayı etkinleştirdiğinizde, istenmeyen yan etkilere neden olabilir. Örneğin, senkronizasyon işlemlerini bozabilir ve eksik arabellekler beklenirken ekranın tamamını dondurabilir.
AutoSingleLayer
modunda SurfaceFlinger, bir karede yalnızca 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
, kilitlenmemiş 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::AutoSingleLayer
Bu 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_unsignaled
değerinitrue
olarak ayarlar.LatchUnsignaledConfig::Disabled
Bu mod, sinyal verilmeyen mandal davranışını devre dışı bırakır ve yalnızca sinyal verilen işlemleri kilitler. Bu modda
AutoSingleLayer
modu da devre dışı bırakılı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 SurfaceFlinger, sinyal verilmeyen tüm arabellekleri kilitler. Bu modu yapılandırmak için
debug.sf.latch_unsignaled
değerinitrue
olarak 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ş sinyalsiz bir arabelleğin izi