قفل بافر بدون علامت با AutoSingleLayer

اندروید 13 پیکربندی جدیدی به نام AutoSingleLayer برای بستن بافرهای بدون علامت اضافه می کند. این پیکربندی به SurfaceFlinger اجازه می‌دهد زمانی که تنها یک لایه در حال به‌روزرسانی است، یک بافر بدون علامت را ببندد، و نه برای مواردی که در بین لایه‌ها رخ می‌دهد، مانند تغییرات هندسی یا همگام‌سازی تراکنش‌ها.

قبل از اندروید 13، پرچم debug.sf.latch_unsignaled در AOSP به SurfaceFlinger این امکان را می‌دهد که بدون در نظر گرفتن موارد استفاده، تمام بافرهای بدون علامت را ببندد. هنگامی که این پیکربندی فعال است، عوارض جانبی ناخواسته ای مانند شکستن تراکنش های همگام سازی و یخ زدن کل صفحه نمایش در حین انتظار در بافرهای ناقص وجود دارد.

با حالت AutoSingleLayer ، فقط یک بافر از یک سطح در یک قاب به روز می شود. این حالت بازی‌ها و سایر برنامه‌های تمام صفحه را قادر می‌سازد تا از مزیت قفل کردن بافرهای بدون علامت و کاهش جابجایی برنامه‌ها بهره ببرند و در عین حال تحت تأثیر ثابت ماندن نمایشگر قرار نگیرند.

تنظیمات حالت AutoSingleLayer

در اندروید 13، AutoSingleLayer حالت پیش‌فرض برای ویژگی بافر بدون علامت لچ است. این حالت توسط ویژگی سیستم debug.sf.auto_latch_unsignaled کنترل می شود.

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

،

اندروید 13 پیکربندی جدیدی به نام AutoSingleLayer برای بستن بافرهای بدون علامت اضافه می کند. این پیکربندی به SurfaceFlinger اجازه می‌دهد زمانی که تنها یک لایه در حال به‌روزرسانی است، یک بافر بدون علامت را ببندد، و نه برای مواردی که در بین لایه‌ها رخ می‌دهد، مانند تغییرات هندسی یا همگام‌سازی تراکنش‌ها.

قبل از اندروید 13، پرچم debug.sf.latch_unsignaled در AOSP به SurfaceFlinger این امکان را می‌دهد که بدون در نظر گرفتن موارد استفاده، تمام بافرهای بدون علامت را ببندد. هنگامی که این پیکربندی فعال است، عوارض جانبی ناخواسته ای مانند شکستن تراکنش های همگام سازی و یخ زدن کل صفحه نمایش در حین انتظار در بافرهای ناقص وجود دارد.

با حالت AutoSingleLayer ، فقط یک بافر از یک سطح در یک قاب به روز می شود. این حالت بازی‌ها و سایر برنامه‌های تمام صفحه را قادر می‌سازد تا از مزیت قفل کردن بافرهای بدون علامت و کاهش جابجایی برنامه‌ها بهره ببرند و در عین حال تحت تأثیر ثابت ماندن نمایشگر قرار نگیرند.

تنظیمات حالت AutoSingleLayer

در اندروید 13، AutoSingleLayer حالت پیش‌فرض برای ویژگی بافر بدون علامت لچ است. این حالت توسط ویژگی سیستم debug.sf.auto_latch_unsignaled کنترل می شود.

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

،

اندروید 13 پیکربندی جدیدی به نام AutoSingleLayer برای بستن بافرهای بدون علامت اضافه می کند. این پیکربندی به SurfaceFlinger اجازه می‌دهد زمانی که تنها یک لایه در حال به‌روزرسانی است، یک بافر بدون علامت را ببندد، و نه برای مواردی که در بین لایه‌ها رخ می‌دهد، مانند تغییرات هندسی یا همگام‌سازی تراکنش‌ها.

قبل از اندروید 13، پرچم debug.sf.latch_unsignaled در AOSP به SurfaceFlinger این امکان را می‌دهد که بدون در نظر گرفتن موارد استفاده، تمام بافرهای بدون علامت را ببندد. هنگامی که این پیکربندی فعال است، عوارض جانبی ناخواسته ای مانند شکستن تراکنش های همگام سازی و یخ زدن کل صفحه نمایش در حین انتظار در بافرهای ناقص وجود دارد.

با حالت AutoSingleLayer ، فقط یک بافر از یک سطح در یک قاب به روز می شود. این حالت بازی‌ها و سایر برنامه‌های تمام صفحه را قادر می‌سازد تا از مزیت قفل کردن بافرهای بدون علامت و کاهش جابجایی برنامه‌ها بهره ببرند و در عین حال تحت تأثیر ثابت ماندن نمایشگر قرار نگیرند.

تنظیمات حالت AutoSingleLayer

در اندروید 13، AutoSingleLayer حالت پیش‌فرض برای ویژگی بافر بدون علامت لچ است. این حالت توسط ویژگی سیستم debug.sf.auto_latch_unsignaled کنترل می شود.

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