Mulai 27 Maret 2025, sebaiknya gunakan android-latest-release, bukan aosp-main, untuk mem-build dan berkontribusi pada AOSP. Untuk mengetahui informasi selengkapnya, lihat Perubahan pada AOSP.
Latching buffer tanpa sinyal dengan AutoSingleLayer
Tetap teratur dengan koleksi
Simpan dan kategorikan konten berdasarkan preferensi Anda.
Android 13 menambahkan konfigurasi baru yang disebut
AutoSingleLayer untuk mengunci
buffer yang tidak diberi sinyal. Konfigurasi ini memungkinkan SurfaceFlinger mengunci buffer
tanpa sinyal saat hanya satu lapisan yang diperbarui, dan bukan untuk kasus yang terjadi
di seluruh lapisan, seperti perubahan geometri atau transaksi sinkronisasi.
Sebelum Android 13, tanda debug.sf.latch_unsignaled
di AOSP memungkinkan SurfaceFlinger mengunci semua buffering yang tidak diberi sinyal, terlepas dari kasus
penggunaannya. Jika konfigurasi ini diaktifkan, akan ada efek samping yang tidak diinginkan, seperti
memecah transaksi sinkronisasi dan membekukan seluruh tampilan saat menunggu
buffer yang tidak lengkap.
Dengan mode AutoSingleLayer, hanya buffer dari satu platform yang diperbarui
dalam frame. Mode ini memungkinkan game dan aplikasi layar penuh lainnya mendapatkan manfaat
dari buffering yang tidak diberi sinyal dan mengurangi jank aplikasi tanpa terpengaruh
oleh pembekuan layar.
SurfaceFlinger membaca LatchUnsignaledConfig saat booting.
Berikut adalah kemungkinan konfigurasinya:
LatchUnsignaledConfig::AutoSingleLayer
Dalam mode default AOSP ini, buffering yang tidak diberi sinyal diizinkan saat
satu lapisan diperbarui dalam frame, dan update hanya menyertakan update
buffer tanpa transaksi sinkronisasi atau perubahan geometri. Dalam mode ini, debug.sf.auto_latch_unsignaled
ditetapkan ke true secara default.
LatchUnsignaledConfig::Disabled
Mode ini menonaktifkan perilaku latch yang tidak diberi sinyal dan hanya mengunci transaksi
yang diberi sinyal. Mode ini juga menonaktifkan mode AutoSingleLayer. Untuk
mengonfigurasi mode ini, tetapkan debug.sf.latch_unsignaled dan
debug.sf.auto_latch_unsignaled ke false.
LatchUnsignaledConfig::Always
Dalam mode ini, semua buffering tidak diberi sinyal. Untuk mengonfigurasi mode ini, tetapkan
debug.sf.latch_unsignaled ke true.
Menguji AutoSingleLayer
Untuk menguji apakah buffering di-latch tanpa sinyal, cari rekaman aktivitas berikut
dari SurfaceFlinger di Perfetto:
Gambar 1. Rekaman aktivitas buffer yang tidak diberi sinyal dan terkunci di Perfetto
Konten dan contoh kode di halaman ini tunduk kepada lisensi yang dijelaskan dalam Lisensi Konten. Java dan OpenJDK adalah merek dagang atau merek dagang terdaftar dari Oracle dan/atau afiliasinya.
Terakhir diperbarui pada 2025-07-27 UTC.
[[["Mudah dipahami","easyToUnderstand","thumb-up"],["Memecahkan masalah saya","solvedMyProblem","thumb-up"],["Lainnya","otherUp","thumb-up"]],[["Informasi yang saya butuhkan tidak ada","missingTheInformationINeed","thumb-down"],["Terlalu rumit/langkahnya terlalu banyak","tooComplicatedTooManySteps","thumb-down"],["Sudah usang","outOfDate","thumb-down"],["Masalah terjemahan","translationIssue","thumb-down"],["Masalah kode / contoh","samplesCodeIssue","thumb-down"],["Lainnya","otherDown","thumb-down"]],["Terakhir diperbarui pada 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"]]