À partir du 27 mars 2025, nous vous recommandons d'utiliser android-latest-release au lieu de aosp-main pour créer et contribuer à AOSP. Pour en savoir plus, consultez la section Modifications apportées à AOSP.
Verrouillage de tampon non signalé avec AutoSingleLayer
Restez organisé à l'aide des collections
Enregistrez et classez les contenus selon vos préférences.
Android 13 ajoute 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 mise à jour, et non pour les cas qui se produisent entre les couches, tels que les modifications de géométrie ou les transactions de synchronisation.
Avant Android 13, l'indicateur debug.sf.latch_unsignaled dans AOSP permet à SurfaceFlinger de verrouiller tous les tampons non signalés, quel que soit le cas d'utilisation. Lorsque cette configuration est activée, des effets secondaires indésirables se produisent, tels que la rupture des transactions de synchronisation et le blocage de l'ensemble de l'écran en attendant des tampons incomplets.
Avec le mode AutoSingleLayer, seul un tampon d'une seule surface est mis à jour dans un frame. Ce mode permet aux jeux et aux autres applications en plein écran de bénéficier du verrouillage des tampons non signalés et de réduire les à-coups de l'application, tout en restant insensible aux blocages de l'écran.
Paramètres du mode AutoSingleLayer
Dans Android 13, AutoSingleLayer est le mode par défaut de la fonctionnalité de tampon non signalé par verrouillage. Ce mode est contrôlé par la propriété système debug.sf.auto_latch_unsignaled.
SurfaceFlinger lit LatchUnsignaledConfig au démarrage.
Voici les configurations possibles:
LatchUnsignaledConfig::AutoSingleLayer
Dans ce mode par défaut d'AOSP, le verrouillage des tampons non signalés est autorisé lorsqu'une seule couche est mise à jour dans un frame, et que la mise à jour ne comprend qu'une mise à jour de tampon sans transactions de synchronisation ni modifications de géométrie. Dans ce mode, debug.sf.auto_latch_unsignaled est défini par défaut sur true.
LatchUnsignaledConfig::Disabled
Ce mode désactive le comportement non signalé du verrouillage et ne verrouille que les transactions signalées. Ce mode désactive également le mode AutoSingleLayer. Pour configurer ce mode, définissez debug.sf.latch_unsignaled et debug.sf.auto_latch_unsignaled sur false.
LatchUnsignaledConfig::Always
Dans ce mode, tous les tampons sont verrouillés sans signal. Pour configurer ce mode, définissez debug.sf.latch_unsignaled sur true.
Test 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 non signalé à verrouillage dans Perfetto
Le contenu et les exemples de code de cette page sont soumis aux licences décrites dans la Licence de contenu. Java et OpenJDK sont des marques ou des marques déposées d'Oracle et/ou de ses sociétés affiliées.
Dernière mise à jour le 2025/07/27 (UTC).
[[["Facile à comprendre","easyToUnderstand","thumb-up"],["J'ai pu résoudre mon problème","solvedMyProblem","thumb-up"],["Autre","otherUp","thumb-up"]],[["Il n'y a pas l'information dont j'ai besoin","missingTheInformationINeed","thumb-down"],["Trop compliqué/Trop d'étapes","tooComplicatedTooManySteps","thumb-down"],["Obsolète","outOfDate","thumb-down"],["Problème de traduction","translationIssue","thumb-down"],["Mauvais exemple/Erreur de code","samplesCodeIssue","thumb-down"],["Autre","otherDown","thumb-down"]],["Dernière mise à jour le 2025/07/27 (UTC)."],[],[],null,["# Unsignaled buffer latching with AutoSingleLayer\n\nAndroid 13 adds a new configuration called\n[`AutoSingleLayer`](https://android.googlesource.com/platform/frameworks/native/+/refs/heads/android16-release/services/surfaceflinger/SurfaceFlinger.h#160) for latching\nunsignaled buffers. This configuration lets SurfaceFlinger latch an unsignaled\nbuffer when only a single layer is updating, and not for the cases that occur\nacross layers, such as geometry changes or sync transactions.\n\nBefore Android 13, the `debug.sf.latch_unsignaled` flag\nin AOSP lets SurfaceFlinger latch all unsignaled buffers, regardless of the use\ncase. When this configuration is enabled, there are undesired side effects, such\nas breaking sync transactions and freezing the entire display while waiting on\nincomplete buffers.\n\nWith the `AutoSingleLayer` mode, only a buffer of a single surface is updated\nin a frame. This mode enables games and other fullscreen apps to get the benefit\nof latching unsignaled buffers and reducing app jank while remaining unaffected\nby display freezes.\n\nAutoSingleLayer mode settings\n-----------------------------\n\nIn Android 13,\n[`AutoSingleLayer`](https://android.googlesource.com/platform/frameworks/native/+/refs/heads/android16-release/services/surfaceflinger/SurfaceFlinger.h#160) is the default\nmode for the latch unsignaled buffer feature. This mode is controlled by the\nsystem property [`debug.sf.auto_latch_unsignaled`](https://android.googlesource.com/platform/frameworks/native/+/refs/heads/android16-release/services/surfaceflinger/SurfaceFlinger.cpp#454).\n\nSurfaceFlinger reads [`LatchUnsignaledConfig`](https://android.googlesource.com/platform/frameworks/native/+/refs/heads/android16-release/services/surfaceflinger/SurfaceFlinger.cpp#449) on boot.\nHere are the possible configurations:\n\n- `LatchUnsignaledConfig::AutoSingleLayer`\n\n In this AOSP default mode, latching unsignaled buffers is permitted when a\n single layer is updated in a frame, and the update includes just a buffer\n update with no sync transactions or geometry changes. In this mode, [`debug.sf.auto_latch_unsignaled`](https://android.googlesource.com/platform/frameworks/native/+/refs/heads/android16-release/services/surfaceflinger/SurfaceFlinger.cpp#454)\n is set to `true` by default.\n- `LatchUnsignaledConfig::Disabled`\n\n This mode disables the latch unsignaled behavior and latches only signaled\n transactions. This mode also disables the `AutoSingleLayer` mode. To\n configure this mode, set [`debug.sf.latch_unsignaled`](https://android.googlesource.com/platform/frameworks/native/+/refs/heads/android16-release/services/surfaceflinger/SurfaceFlinger.cpp#450) and\n [`debug.sf.auto_latch_unsignaled`](https://android.googlesource.com/platform/frameworks/native/+/refs/heads/android16-release/services/surfaceflinger/SurfaceFlinger.cpp#454) to `false`.\n- `LatchUnsignaledConfig::Always`\n\n In this mode, all buffers are latched unsignaled. To configure this mode, set\n [`debug.sf.latch_unsignaled`](https://android.googlesource.com/platform/frameworks/native/+/refs/heads/android16-release/services/surfaceflinger/SurfaceFlinger.cpp#450) to `true`.\n | **Note:** This mode takes priority over setting `AutoSingleLayer` but can cause display freezing and other undesired effects. This mode might be deprecated in future releases.\n\nTest `AutoSingleLayer`\n----------------------\n\nTo test whether a buffer is latched unsignaled, look for the following traces\nfrom SurfaceFlinger in [Perfetto](https://developer.android.com/topic/performance/tracing):\n\n**Figure 1.** Trace of a latched unsignaled buffer in Perfetto"]]