החל מ-Android 13, שכבת הפשטת החומרה (HAL) של Hardware Composer (HWC) מוגדרת ב-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. כך מסופק ממשק יציב לפקודות והגדרה קריאה יותר של האופן שבו המערכת מפרשת את מטען הפקודה.
השיטה
executeCommands
5 מוגדרת ב-IComposerClient.aidl
:CommandResultPayload[] executeCommands(in DisplayCommand[] commands);
כל פקודה היא סוג ניתן להעברה (parcelable) עם הקלדה חזקה שמוגדר ב-
DisplayCommand.aidl
. תשובות לפקודות הן אובייקטים מסוג Parcelable עם הקלדה חזקה, שמוגדרים ב-CommandResultPayload.aidl
.הסרת
IComposerClient.getClientTargetSupport
כי אף לקוח פעיל לא משתמש בשיטה הזו.הצגה של צבעים כערכים מסוג float במקום כבייטים, כדי להתאים למערך הגרפיקה העליון ב-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
שהגדרת התצוגה של האתחול נתמכת. ה-methodssetBootDisplayConfig
,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
.