אנדרואיד 13 מוסיף תצורה חדשה בשם AutoSingleLayer
לנעילת מאגרים לא מאותתים. תצורה זו מאפשרת ל-SurfaceFlinger לנעוץ מאגר לא מסומן כאשר רק שכבה בודדת מתעדכנת, ולא למקרים המתרחשים על פני שכבות, כגון שינויים בגיאומטריה או עסקאות סנכרון.
לפני אנדרואיד 13, דגל debug.sf.latch_unsignaled
ב-AOSP מאפשר ל-SurfaceFlinger לנעוץ את כל המאגרים הלא-מאומנים, ללא קשר למקרה השימוש. כאשר תצורה זו מופעלת, ישנן תופעות לוואי לא רצויות, כגון שבירת עסקאות סנכרון והקפאת התצוגה כולה בזמן המתנה למאגרים לא שלמים.
במצב AutoSingleLayer
, רק חיץ של משטח בודד מתעדכן במסגרת. מצב זה מאפשר למשחקים ולאפליקציות אחרות במסך מלא ליהנות מהיתרון של נעילת מאגרים לא מאותתים והפחתת דחיסות האפליקציה, תוך שהם לא מושפעים מהקפאות התצוגה.
הגדרות מצב AutoSingleLayer
ב-Android 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. עקבות של חיץ לא מסומן ננעל בפרפטו