Android 13 introduit une nouvelle configuration appelée
AutoSingleLayer pour verrouiller les tampons non signalés. Cette configuration permet à SurfaceFlinger de verrouiller un tampon non signalé lorsqu'une seule couche est en cours de mise à jour.
Elle ne s'applique pas aux cas qui se produisent sur plusieurs couches, par exemple les modifications de géométrie ou les transactions de synchronisation.
Auparavant, l'indicateur debug.sf.latch_unsignaled dans l'Android Open Source Project (AOSP) permettait à SurfaceFlinger de verrouiller tous les tampons non signalés, quel que soit le cas d'utilisation. Lorsque vous activez cette configuration, elle peut entraîner des effets secondaires indésirables, par exemple en interrompant les transactions de synchronisation et en bloquant l'ensemble de l'écran lors de l'attente de tampons incomplets.
En mode AutoSingleLayer, SurfaceFlinger ne met à jour qu'un tampon d'une seule surface dans une frame. Ce mode permet aux jeux et autres applications en plein écran de bénéficier du verrouillage des tampons non signalés et de réduire les à-coups des applications tout en restant insensibles aux blocages de l'écran.
Paramètres du mode AutoSingleLayer
Pour Android 13, AutoSingleLayer est le mode par défaut
de la fonctionnalité de verrouillage des tampons non signalés. Ce mode est contrôlé par la
propriété système debug.sf.auto_latch_unsignaled.
SurfaceFlinger lit LatchUnsignaledConfig au démarrage. Les configurations possibles sont les suivantes :
LatchUnsignaledConfig::AutoSingleLayerDans ce mode par défaut AOSP, SurfaceFlinger autorise le verrouillage des tampons non signalés lorsqu'une seule couche est mise à jour dans une frame. La mise à jour ne doit inclure qu'une mise à jour du tampon sans transactions de synchronisation ni modifications de géométrie. Par défaut, ce mode définit
debug.sf.auto_latch_unsignaledsurtrue.LatchUnsignaledConfig::DisabledCe mode désactive le comportement de verrouillage non signalé et ne verrouille que les transactions signalées. Ce mode désactive également le mode
AutoSingleLayer. Pour configurer ce mode, définissezdebug.sf.latch_unsignaledetdebug.sf.auto_latch_unsignaledsurfalse.LatchUnsignaledConfig::AlwaysDans ce mode, SurfaceFlinger verrouille tous les tampons non signalés. Pour configurer ce mode, définissez
debug.sf.latch_unsignaledsurtrue.
Tester AutoSingleLayer
Pour vérifier si un tampon est verrouillé sans signal, recherchez les traces suivantes de SurfaceFlinger dans Perfetto :
Figure 1. Trace d'un tampon verrouillé sans signal dans Perfetto