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::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, sinyal verilmeyen mandal davranışını devre dışı bırakır ve yalnızca sinyal verilen 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, sinyal verilmeyen tüm arabellekleri kilitler. Bu modu yapılandırmak için
debug.sf.latch_unsignaleddeğerinitrueolarak 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