החל מ-Android 13, Hardware Composer (HWC) HAL מוגדר ב-AIDL. הגרסאות של HIDL שנעות בין android.hardware.graphics.composer@2.1 לבין android.hardware.graphics.composer@2.4 הוצאו משימוש.
בדף הזה מוסבר על ההבדלים בין AIDL ל-HIDL HALs עבור HWC, ואיך מטמיעים ובודקים את AIDL HAL.
מכיוון ש-AIDL מציע יתרונות, ספקים יכולים להטמיע את AIDL composer HAL החל מ-Android 13 במקום גרסת HIDL. מידע נוסף זמין בקטע הטמעה.
ההבדלים בין AIDL לבין HIDL HALs
ה-HAL החדש של AIDL Composer, שנקרא android.hardware.graphics.composer3, מוגדר ב-IComposer.aidl. ה-API דומה ל-HIDL HAL android.hardware.graphics.composer@2.4, אבל כולל את השינויים הבאים:
הסרה של תור הודעות מהיר (FMQ) לטובת פקודות שניתנות להעברה.
AIDL HAL מגדיר את ממשק הפקודות על סמך סוגים חזקים של parcelable במקום הפקודות שעברו סריאליזציה ב-FMQ ב-HIDL. כך נוצר ממשק יציב לפקודות והגדרה קריאה יותר של האופן שבו המערכת מפרשת את מטען הפקודה.
השיטה
executeCommands5 מוגדרת ב-IComposerClient.aidl:CommandResultPayload[] executeCommands(in DisplayCommand[] commands);כל פקודה היא סוג חבילה עם הקלדה חזקה שמוגדרת ב-
DisplayCommand.aidl. תשובות לפקודות הן אובייקטים מסוג Parcelable עם הקלדה חזקה, שמוגדרים ב-CommandResultPayload.aidl.הסרה של
IComposerClient.getClientTargetSupportכי אף לקוח פעיל לא משתמש בשיטה הזו.הצגה של צבעים כמספרים ממשיים במקום כבייטים, כדי להתאים למערך הגרפיקה העליון ב-Android, כפי שמוגדר ב-
ASurfaceTransaction_setColor.הוספה של שדות חדשים לשליטה בתוכן HDR.
ב-AIDL HAL, מחסניות של שכבות SDR/HDR מעורבות תומכות בהנמכה חלקה של שכבות SDR כששכבת HDR מוצגת במסך בו-זמנית.
השדה
brightnessב-LayerCommandמאפשר ל-SurfaceFlinger לציין בהירות לכל שכבה. ההגדרה הזו מאפשרת ל-HWC לעמעם את התוכן של השכבה במרחב אור לינארי במקום במרחב גמא.השדה
brightnessב-ClientTargetPropertyWithBrightnessמאפשר ל-HWC לציין את מרחב הבהירות להרכבת הלקוח, ומורה ל-RenderEngineאם לעמעם שכבות SDR בהרכבת הלקוח.בשדה
dimmingStageאפשר להגדיר מתיRenderEngineיחליש את התוכן. ההגדרה הזו מתאימה לספקים שמגדיריםColorModesשעשויים להעדיף להחשיך במרחב גמא כדי להפעיל שיפורים בניגודיות שהוגדרו על ידי הספק בצינורות הצבע שלהם.הוספה של סוג יצירה,
DISPLAY_DECORATION, ב-Composition.aidlלקישוטים במסך.במכשירים מסוימים יש רכיבי חומרה ייעודיים לאופטימיזציה של ציור מסכת האלפא, שמחליקה פינות מעוגלות וחיתוכים במסכים. במכשירים עם חומרה כזו צריך להטמיע את
IComposerClient.getDisplayDecorationSupportולהחזיר מבנהDisplayDecorationSupportכפי שמוגדר ב-DisplayDecorationSupport.aidl. המבנה הזה מתאר את סוגי ה-enumPixelFormatו-AlphaInterpretationשנדרשים במכשיר. אחרי ההטמעה הזו, ממשק המשתמש של המערכת מסמן את שכבת מסכת האלפא כ-DISPLAY_DECORATION, סוג קומפוזיציה שמנצל את החומרה הייעודית.נוסף שדה
expectedPresentTimeאלDisplayCommand.aidl.השדה
expectedPresentTimeמאפשר ל-SurfaceFlinger להגדיר את זמן ההצגה הצפוי שבו התוכן הנוכחי צריך להיות מוצג במסך. באמצעות התכונה הזו, SurfaceFlinger שולח פקודת הצגה להטמעה מראש, מה שמאפשר לה להעביר יותר מעבודת הקומפוזיציה דרך צינור.נוספו ממשקי API חדשים לשליטה בהגדרת התצוגה של האתחול.
ספקים יכולים לציין באמצעות
BOOT_DISPLAY_CONFIGשהגדרת התצוגה של האתחול נתמכת. השיטותsetBootDisplayConfig,clearBootDisplayConfigו-getPreferredBootDisplayConfigמשתמשות ב-BOOT_DISPLAY_CONFIGבאופן הבא:באמצעות
setBootDisplayConfig, המסגרת מודיעה לספקים על הגדרת התצוגה של זמן האתחול. הספקים צריכים לשמור במטמון את הגדרות התצוגה של האתחול, ולבצע את האתחול עם ההגדרות האלה בפעם הבאה שמבצעים הפעלה מחדש. אם המכשיר לא מצליח לאתחל בהגדרה הזו, הספק צריך למצוא הגדרה שתואמת לרזולוציה ולקצב הרענון של ההגדרה הזו. אם אין הגדרה כזו, הספק צריך להשתמש בהגדרת התצוגה המועדפת שלו.כשמשתמשים ב-
clearBootDisplayConfig, המסגרת מודיעה לספקים לנקות את הגדרת התצוגה של האתחול, ולבצע אתחול בהגדרת התצוגה המועדפת שלהם במהלך ההפעלה מחדש הבאה.באמצעות
getPreferredBootDisplayConfig, ה-framework שולח שאילתה למצב האתחול המועדף של הספק.
אם אין תמיכה בהגדרת תצוגת האתחול, הפונקציות האלה מחזירות את הערך
UNSUPPORTED.הוספנו ממשקי API חדשים לשליטה בטיימר של חוסר פעילות בתצוגה:
באמצעות
DISPLAY_IDLE_TIMER, ספקים יכולים לציין שהספק מטמיע טיימר של חוסר פעילות בתצוגה הזו. כשהמכשיר לא פעיל, היכולת הזו משנה את קצב הרענון להגדרה נמוכה יותר כדי לחסוך בחשמל. הפלטפורמה משתמשת ב-setIdleTimerEnabledכדי לשלוט בזמן הקצוב לתפוגה של הטיימר, ובמקרים מסוימים, כדי להשבית אותו כדי למנוע מעברים לא רצויים בין קצבי רענון כשהמכשיר לא פעיל.השימוש בקריאה החוזרת
IComposerCallback.onVsyncIdleמציין לפלטפורמה שהתצוגה לא פעילה ושהקצבvsyncהשתנה. הפלטפורמה מגיבה לקריאה החוזרת הזו על ידי איפוס המודלvsyncשלה. היא מאלצתvsyncסנכרון מחדש בפריים הבא, ולומדת את קצבvsyncחדש.
הטמעה
ספקים לא נדרשים להטמיע את AIDL HAL ב-Android 13. עם זאת, מומלץ לספקים להטמיע את AIDL composer HAL במקום את גרסת ה-HIDL, כדי להשתמש בפונקציונליות ובממשקי ה-API של AIDL composer HAL.
אמולטורים של Android כוללים הטמעה לדוגמה של AIDL HWC HAL.
בדיקה
כדי לבדוק את ההטמעה, מריצים את הפקודה VtsHalGraphicsComposer3_TargetTest.