از 27 مارس 2025، توصیه می کنیم از android-latest-release به جای aosp-main برای ساختن و کمک به AOSP استفاده کنید. برای اطلاعات بیشتر، به تغییرات AOSP مراجعه کنید.
با مجموعهها، منظم بمانید
ذخیره و طبقهبندی محتوا براساس اولویتهای شما.
اندروید 13 پیکربندی جدیدی به نام AutoSingleLayer برای بستن بافرهای بدون علامت اضافه می کند. این پیکربندی به SurfaceFlinger اجازه میدهد زمانی که تنها یک لایه در حال بهروزرسانی است، یک بافر بدون علامت را ببندد، و نه برای مواردی که در بین لایهها رخ میدهد، مانند تغییرات هندسی یا همگامسازی تراکنشها.
قبل از اندروید 13، پرچم debug.sf.latch_unsignaled در AOSP به SurfaceFlinger این امکان را میدهد که بدون در نظر گرفتن موارد استفاده، تمام بافرهای بدون علامت را ببندد. هنگامی که این پیکربندی فعال است، عوارض جانبی ناخواسته ای مانند شکستن تراکنش های همگام سازی و یخ زدن کل صفحه نمایش در حین انتظار در بافرهای ناقص وجود دارد.
با حالت AutoSingleLayer ، فقط یک بافر از یک سطح در یک قاب به روز می شود. این حالت بازیها و سایر برنامههای تمام صفحه را قادر میسازد تا از مزیت قفل کردن بافرهای بدون علامت و کاهش جابجایی برنامهها بهره ببرند و در عین حال تحت تأثیر ثابت ماندن نمایشگر قرار نگیرند.
SurfaceFlinger LatchUnsignaledConfig هنگام بوت می خواند. در اینجا تنظیمات احتمالی وجود دارد:
LatchUnsignaledConfig::AutoSingleLayer
در این حالت پیشفرض AOSP، زمانی که یک لایه در یک فریم بهروزرسانی میشود، بافرهای بدون علامت را چسباند و این بهروزرسانی فقط شامل یک بهروزرسانی بافر بدون تراکنشهای همگامسازی یا تغییرات هندسی است. در این حالت، debug.sf.auto_latch_unsignaled به طور پیش فرض روی true تنظیم شده است.
LatchUnsignaledConfig::Disabled
این حالت رفتار بدون علامت قفل را غیرفعال می کند و فقط تراکنش های علامت دار را قفل می کند. این حالت حالت AutoSingleLayer نیز غیرفعال می کند. برای پیکربندی این حالت، debug.sf.latch_unsignaled و debug.sf.auto_latch_unsignaled را روی false تنظیم کنید.
LatchUnsignaledConfig::Always
در این حالت، تمام بافرها بدون علامت قفل می شوند. برای پیکربندی این حالت، debug.sf.latch_unsignaled روی true تنظیم کنید.
AutoSingleLayer را تست کنید
برای آزمایش اینکه آیا بافر بدون علامت قفل شده است، به دنبال ردپای زیر از SurfaceFlinger در Perfetto باشید:
شکل 1. ردیابی بافر بدون علامت قفل شده در Perfetto
محتوا و نمونه کدها در این صفحه مشمول پروانههای توصیفشده در پروانه محتوا هستند. جاوا و OpenJDK علامتهای تجاری یا علامتهای تجاری ثبتشده Oracle و/یا وابستههای آن هستند.
تاریخ آخرین بهروزرسانی 2025-07-29 بهوقت ساعت هماهنگ جهانی.
[[["درک آسان","easyToUnderstand","thumb-up"],["مشکلم را برطرف کرد","solvedMyProblem","thumb-up"],["غیره","otherUp","thumb-up"]],[["اطلاعاتی که نیاز دارم وجود ندارد","missingTheInformationINeed","thumb-down"],["بیشازحد پیچیده/ مراحل بسیار زیاد","tooComplicatedTooManySteps","thumb-down"],["قدیمی","outOfDate","thumb-down"],["مشکل ترجمه","translationIssue","thumb-down"],["مشکل کد / نمونهها","samplesCodeIssue","thumb-down"],["غیره","otherDown","thumb-down"]],["تاریخ آخرین بهروزرسانی 2025-07-29 بهوقت ساعت هماهنگ جهانی."],[],[],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"]]