Ab dem 27. März 2025 empfehlen wir, android-latest-release anstelle von aosp-main zu verwenden, um AOSP zu erstellen und Beiträge dazu zu leisten. Weitere Informationen finden Sie unter Änderungen am AOSP.
Mit Sammlungen den Überblick behalten
Sie können Inhalte basierend auf Ihren Einstellungen speichern und kategorisieren.
In Android 13 wird eine neue Konfiguration namens AutoSingleLayer zum Laschen nicht signalisierter Puffer hinzugefügt. Mit dieser Konfiguration kann SurfaceFlinger einen nicht signalisierten Puffer sperren, wenn nur eine einzelne Ebene aktualisiert wird, und nicht für Fälle, die sich über mehrere Ebenen erstrecken, z. B. Geometrieänderungen oder Synchronisationstransaktionen.
Vor Android 13 konnte SurfaceFlinger mit dem Flag debug.sf.latch_unsignaled in AOSP alle nicht signalisierten Puffer unabhängig vom Anwendungsfall sperren. Wenn diese Konfiguration aktiviert ist, kann es zu unerwünschten Nebenwirkungen kommen, z. B. zu unterbrochenen Synchronisationstransaktionen und zum Einfrieren des gesamten Displays, während auf unvollständige Puffer gewartet wird.
Im AutoSingleLayer-Modus wird in einem Frame nur ein Puffer einer einzelnen Oberfläche aktualisiert. In diesem Modus können Spiele und andere Vollbild-Apps von nicht signalisierten Puffern profitieren und Ruckler reduzieren, ohne dass es zu Bildschirmfrieren kommt.
Einstellungen für den Modus „AutoSingleLayer“
In Android 13 ist AutoSingleLayer der Standardmodus für die Funktion „Latch unsignaled buffer“. Dieser Modus wird über die Systemeigenschaft debug.sf.auto_latch_unsignaled gesteuert.
SurfaceFlinger liest LatchUnsignaledConfig beim Starten.
Folgende Konfigurationen sind möglich:
LatchUnsignaledConfig::AutoSingleLayer
In diesem AOSP-Standardmodus ist das Laschen nicht signalisierter Puffer zulässig, wenn eine einzelne Ebene in einem Frame aktualisiert wird und das Update nur eine Pufferaktualisierung ohne Synchronisationstransaktionen oder Geometrieänderungen umfasst. In diesem Modus ist debug.sf.auto_latch_unsignaled standardmäßig auf true festgelegt.
LatchUnsignaledConfig::Disabled
In diesem Modus wird das Verhalten der Lasche ohne Signal deaktiviert und nur Transaktionen mit Signal laschen. In diesem Modus wird auch der AutoSingleLayer-Modus deaktiviert. Wenn Sie diesen Modus konfigurieren möchten, legen Sie für debug.sf.latch_unsignaled und debug.sf.auto_latch_unsignaled den Wert false fest.
LatchUnsignaledConfig::Always
In diesem Modus werden alle Puffer ohne Signal latched. Wenn Sie diesen Modus konfigurieren möchten, legen Sie für debug.sf.latch_unsignaled den Wert true fest.
Test AutoSingleLayer
Wenn Sie prüfen möchten, ob ein Puffer ohne Signal latched ist, suchen Sie in Perfetto nach den folgenden Spuren von SurfaceFlinger:
Abbildung 1: Trace eines ladbaren, nicht signalisierten Buffers in Perfetto
Alle Inhalte und Codebeispiele auf dieser Seite unterliegen den Lizenzen wie im Abschnitt Inhaltslizenz beschrieben. Java und OpenJDK sind Marken oder eingetragene Marken von Oracle und/oder seinen Tochtergesellschaften.
Zuletzt aktualisiert: 2025-07-27 (UTC).
[[["Leicht verständlich","easyToUnderstand","thumb-up"],["Mein Problem wurde gelöst","solvedMyProblem","thumb-up"],["Sonstiges","otherUp","thumb-up"]],[["Benötigte Informationen nicht gefunden","missingTheInformationINeed","thumb-down"],["Zu umständlich/zu viele Schritte","tooComplicatedTooManySteps","thumb-down"],["Nicht mehr aktuell","outOfDate","thumb-down"],["Problem mit der Übersetzung","translationIssue","thumb-down"],["Problem mit Beispielen/Code","samplesCodeIssue","thumb-down"],["Sonstiges","otherDown","thumb-down"]],["Zuletzt aktualisiert: 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"]]