A partire dal 27 marzo 2025, ti consigliamo di utilizzare android-latest-release anziché aosp-main per compilare e contribuire ad AOSP. Per ulteriori informazioni, vedi Modifiche ad AOSP.
Latch del buffer non segnalato con AutoSingleLayer
Mantieni tutto organizzato con le raccolte
Salva e classifica i contenuti in base alle tue preferenze.
Android 13 aggiunge una nuova configurazione chiamata
AutoSingleLayer per bloccare
i buffer non segnalati. Questa configurazione consente a SurfaceFlinger di bloccare un buffer non segnalato quando viene aggiornato un solo livello e non per i casi che si verificano tra i livelli, come le modifiche alla geometria o le transazioni di sincronizzazione.
Prima di Android 13, il flag debug.sf.latch_unsignaled in AOSP consentiva a SurfaceFlinger di bloccare tutti i buffer non segnalati, indipendentemente dal caso d'uso. Quando questa configurazione è attivata, si verificano effetti collaterali indesiderati, come la rottura delle transazioni di sincronizzazione e il blocco dell'intero display in attesa di buffer incompleti.
Con la modalità AutoSingleLayer, viene aggiornato solo un buffer di una singola superficie
in un frame. Questa modalità consente a giochi e altre app a schermo intero di usufruire del vantaggio di bloccare i buffer non segnalati e di ridurre il jitter dell'app, rimanendo inalterata dai blocchi del display.
Impostazioni della modalità AutoSingleLayer
In Android 13,
AutoSingleLayer è la modalità predefinita per la funzionalità del buffer non segnalato con latch. Questa modalità è controllata dalla proprietà di sistema debug.sf.auto_latch_unsignaled.
SurfaceFlinger legge LatchUnsignaledConfig all'avvio.
Ecco le possibili configurazioni:
LatchUnsignaledConfig::AutoSingleLayer
In questa modalità predefinita AOSP, il blocco dei buffer non segnalati è consentito quando un singolo livello viene aggiornato in un frame e l'aggiornamento include solo un aggiornamento del buffer senza transazioni di sincronizzazione o modifiche alla geometria. In questa modalità, debug.sf.auto_latch_unsignaled è impostato su true per impostazione predefinita.
LatchUnsignaledConfig::Disabled
Questa modalità disattiva il comportamento di latch non segnalato e blocca solo le transazioni segnalate. Questa modalità disattiva anche la modalità AutoSingleLayer. Per
configurare questa modalità, imposta debug.sf.latch_unsignaled e
debug.sf.auto_latch_unsignaled su false.
LatchUnsignaledConfig::Always
In questa modalità, tutti i buffer sono latched senza segnalazione. Per configurare questa modalità, imposta
debug.sf.latch_unsignaled su true.
Test AutoSingleLayer
Per verificare se un buffer è latched senza segnalazione, cerca le seguenti tracce
da SurfaceFlinger in Perfetto:
Figura 1. Traccia di un buffer non segnalato latched in Perfetto
I campioni di contenuti e codice in questa pagina sono soggetti alle licenze descritte nella Licenza per i contenuti. Java e OpenJDK sono marchi o marchi registrati di Oracle e/o delle sue società consociate.
Ultimo aggiornamento 2025-07-27 UTC.
[[["Facile da capire","easyToUnderstand","thumb-up"],["Il problema è stato risolto","solvedMyProblem","thumb-up"],["Altra","otherUp","thumb-up"]],[["Mancano le informazioni di cui ho bisogno","missingTheInformationINeed","thumb-down"],["Troppo complicato/troppi passaggi","tooComplicatedTooManySteps","thumb-down"],["Obsoleti","outOfDate","thumb-down"],["Problema di traduzione","translationIssue","thumb-down"],["Problema relativo a esempi/codice","samplesCodeIssue","thumb-down"],["Altra","otherDown","thumb-down"]],["Ultimo aggiornamento 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"]]