החל מ-Android 13, HAL של Hardware Composer (HWC) מוגדר ב-AIDL, והגרסאות של HIDL מ-android.hardware.graphics.composer@2.1
עד android.hardware.graphics.composer@2.4
הוצאו משימוש.
בדף הזה מתוארים ההבדלים בין AIDL לבין HIDL HAL עבור 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) לטובת פקודות שניתנות להעברה.
שכבת ה-HAL של AIDL מגדירה את ממשק הפקודות על סמך סוגים של חבילות שניתנות להעברה עם הקלדה חזקה, בניגוד לפקודות שעברו סריאליזציה ב-FMQ ב-HIDL. כך מסופק ממשק יציב לפקודות והגדרה קריאה יותר של האופן שבו מטען הנתונים של הפקודה מפורש.
השיטה
executeCommands
מוגדרת ב-IComposerClient.aidl
באופן הבא:CommandResultPayload[] executeCommands(in DisplayCommand[] commands);
כאשר כל פקודה היא סוג ניתן להעברה (parcelable) עם הקלדה חזקה שמוגדר ב-
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
מאפשר ל-HWC להגדיר מתי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
, ה-framework מודיע לספקים על הגדרת התצוגה של זמן האתחול. הספקים צריכים לשמור במטמון את הגדרת התצוגה של האתחול, ולאתחל את המחשב עם ההגדרה הזו בפעם הבאה שמבצעים אתחול מחדש. אם המכשיר לא מצליח לאתחל בהגדרה הזו, הספק צריך למצוא הגדרה שתואמת לרזולוציה ולקצב הרענון של ההגדרה הזו. אם אין הגדרה כזו, הספק צריך להשתמש בהגדרת התצוגה המועדפת שלו.כשמשתמשים ב-
clearBootDisplayConfig
, המסגרת מודיעה לספקים לנקות את הגדרות התצוגה של האתחול, ולאתחל בהגדרות התצוגה המועדפות שלהם במהלך האתחול הבא.כשמשתמשים ב-
getPreferredBootDisplayConfig
, ה-framework שולח שאילתה לגבי מצב האתחול המועדף של הספק.
אם הגדרת התצוגה של האתחול לא נתמכת, השיטות האלה מחזירות ערך של
UNSUPPORTED
.הוספה של ממשקי API חדשים לשליטה בטיימר של חוסר פעילות בצג.
באמצעות
DISPLAY_IDLE_TIMER
, ספקים יכולים לציין שהם מטמיעים טיימר של חוסר פעילות במודעה הזו. במצב לא פעיל, היכולת הזו משנה את קצב הרענון להגדרה נמוכה יותר כדי לחסוך בצריכת החשמל. הפלטפורמה משתמשת ב-setIdleTimerEnabled
כדי לשלוט בערך הזמן הקצוב לתפוגה של הטיימר, ובמקרים מסוימים, כדי להשבית אותו כדי למנוע מעברים לא רצויים בין קצבי רענון כשהמכשיר לא פעיל.השימוש בקריאה חוזרת (callback) של
IComposerCallback.onVsyncIdle
מציין לפלטפורמה שהתצוגה לא פעילה ושהקצב שלvsync
השתנה. הפלטפורמה מגיבה לקריאה החוזרת הזו על ידי איפוס המודלvsync
שלה. היא מאלצתvsync
סנכרון מחדש בפריים הבא, ולומדת את קצבvsync
חדש.
הטמעה
ספקים לא נדרשים להטמיע את AIDL HAL ב-Android מגרסה 13. עם זאת, מומלץ להם להטמיע את AIDL composer HAL במקום את גרסת ה-HIDL כדי להשתמש בפונקציונליות ובממשקי ה-API החדשים.
הטמעה לדוגמה של AIDL HWC HAL מיושמת באמולטורים של Android.
בדיקה
כדי לבדוק את ההטמעה, מריצים את הפקודה VtsHalGraphicsComposer3_TargetTest
.