Android 13, sinyalsiz arabellekleri kilitlemek için AutoSingleLayer
adlı yeni bir yapılandırma ekler. Bu yapılandırma, SurfaceFlinger'ın geometri değişiklikleri veya senkronizasyon işlemleri gibi katmanlar arasında meydana gelen durumlar için değil, yalnızca tek bir katman güncellenirken sinyalsiz bir arabelleği mandallamasına olanak tanır.
Android 13'ten önce, AOSP'deki debug.sf.latch_unsignaled
bayrağı, SurfaceFlinger'ın kullanım durumundan bağımsız olarak tüm sinyalsiz arabellekleri mandallamasına olanak tanıyor. Bu konfigürasyon etkinleştirildiğinde senkronizasyon işlemlerinin bozulması, eksik arabelleklerde beklerken tüm ekranın donması gibi istenmeyen yan etkiler ortaya çıkar.
AutoSingleLayer
moduyla, bir çerçevede yalnızca tek bir yüzeyin arabelleği güncellenir. Bu mod, oyunların ve diğer tam ekran uygulamaların, sinyalsiz arabellekleri kilitleme avantajından yararlanmasını ve ekran donmalarından etkilenmeden uygulama atılımını azaltmasını sağlar.
AutoSingleLayer modu ayarları
Android 13'te AutoSingleLayer
, mandal sinyalsiz arabellek özelliği için varsayılan moddur. Bu mod, debug.sf.auto_latch_unsignaled
sistem özelliği tarafından kontrol edilir.
SurfaceFlinger, önyükleme sırasında LatchUnsignaledConfig
okur. Olası yapılandırmalar şunlardır:
LatchUnsignaledConfig::AutoSingleLayer
Bu AOSP varsayılan modunda, bir çerçevede tek bir katman güncellendiğinde sinyalsiz arabelleklerin mandallanmasına izin verilir ve güncelleme, hiçbir senkronizasyon işlemi veya geometri değişikliği olmadan yalnızca bir arabellek güncellemesini içerir. Bu modda,
debug.sf.auto_latch_unsignaled
varsayılan olaraktrue
değerine ayarlıdır.LatchUnsignaledConfig::Disabled
Bu mod, sinyalsiz mandal davranışını devre dışı bırakır ve yalnızca sinyalli işlemleri kilitler. Bu mod aynı zamanda
AutoSingleLayer
modunu da devre dışı bırakır. Bu modu yapılandırmak içindebug.sf.latch_unsignaled
vedebug.sf.auto_latch_unsignaled
false
olarak ayarlayın.LatchUnsignaledConfig::Always
Bu modda, tüm arabellekler sinyalsiz olarak kilitlenir. Bu modu yapılandırmak için
debug.sf.latch_unsignaled
true
olarak ayarlayın.
AutoSingleLayer
test edin
Bir arabelleğin sinyalsiz olarak kilitlenip kilitlenmediğini test etmek için Perfetto'da SurfaceFlinger'dan aşağıdaki izleri arayın:
Şekil 1. Perfetto'da mandallı, sinyalsiz bir arabelleğin izi