A partir del 27 de marzo de 2025, te recomendamos que uses android-latest-release en lugar de aosp-main para compilar y contribuir a AOSP. Para obtener más información, consulta Cambios en AOSP.
Cómo bloquear búferes sin indicar con AutoSingleLayer
Organiza tus páginas con colecciones
Guarda y categoriza el contenido según tus preferencias.
En Android 13, se agrega una configuración nueva llamada AutoSingleLayer para bloquear búferes sin indicar. Esta configuración permite que SurfaceFlinger bloquee un búfer sin indicar cuando se actualiza una sola capa, y no en los casos que ocurren entre capas, como cambios de geometría o transacciones de sincronización.
Antes de Android 13, la marca debug.sf.latch_unsignaled en AOSP permitía que SurfaceFlinger bloqueara todos los búferes sin señal, independientemente del caso de uso. Cuando se habilita esta configuración, se producen efectos secundarios no deseados, como la interrupción de las transacciones de sincronización y la inmovilización de toda la pantalla mientras se esperan búferes incompletos.
Con el modo AutoSingleLayer, solo se actualiza un búfer de una sola superficie en un fotograma. Este modo permite que los juegos y otras apps de pantalla completa obtengan el beneficio de bloquear los búferes sin señal y reducir el bloqueo de la app sin verse afectados por las congelaciones de la pantalla.
Configuración del modo AutoSingleLayer
En Android 13, AutoSingleLayer es el modo predeterminado para la función de búfer sin indicar de bloqueo. La propiedad del sistema debug.sf.auto_latch_unsignaled controla este modo.
SurfaceFlinger lee LatchUnsignaledConfig durante el inicio.
Estas son las configuraciones posibles:
LatchUnsignaledConfig::AutoSingleLayer
En este modo predeterminado de AOSP, se permite el bloqueo de búferes sin indicar cuando se actualiza una sola capa en un fotograma, y la actualización solo incluye una actualización de búfer sin transacciones de sincronización ni cambios de geometría. En este modo, debug.sf.auto_latch_unsignaled se establece en true de forma predeterminada.
LatchUnsignaledConfig::Disabled
Este modo inhabilita el comportamiento sin señal del seguro y solo bloquea las transacciones con señal. Este modo también inhabilita el modo AutoSingleLayer. Para
configurar este modo, establece debug.sf.latch_unsignaled y
debug.sf.auto_latch_unsignaled en false.
LatchUnsignaledConfig::Always
En este modo, todos los búferes están bloqueados sin señal. Para configurar este modo, establece debug.sf.latch_unsignaled en true.
Prueba AutoSingleLayer
Para probar si un búfer está bloqueado sin señal, busca los siguientes registros de SurfaceFlinger en Perfetto:
Figura 1: Registro de un búfer sin indicar bloqueado en Perfetto
El contenido y las muestras de código que aparecen en esta página están sujetas a las licencias que se describen en la Licencia de Contenido. Java y OpenJDK son marcas registradas de Oracle o sus afiliados.
Última actualización: 2025-07-27 (UTC)
[[["Fácil de comprender","easyToUnderstand","thumb-up"],["Resolvió mi problema","solvedMyProblem","thumb-up"],["Otro","otherUp","thumb-up"]],[["Falta la información que necesito","missingTheInformationINeed","thumb-down"],["Muy complicado o demasiados pasos","tooComplicatedTooManySteps","thumb-down"],["Desactualizado","outOfDate","thumb-down"],["Problema de traducción","translationIssue","thumb-down"],["Problema con las muestras o los códigos","samplesCodeIssue","thumb-down"],["Otro","otherDown","thumb-down"]],["Última actualización: 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"]]