החל מ-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, מומלץ לספקים להטמיע את HAL של המלחין AIDL החל מ-Android 13 במקום את גרסת HIDL. מידע נוסף זמין בקטע הטמעה.
ההבדלים בין ממשקי HAL של AIDL לבין ממשקי HAL של HIDL
ה-HAL החדש של AIDL composer, שנקרא android.hardware.graphics.composer3
, מוגדר ב-IComposer.aidl
.
הוא חושף ממשק API שדומה ל-HIDL HALandroid.hardware.graphics.composer@2.4
עם השינויים הבאים:
הסרת Fast Message Queue (FMQ) לטובת פקודות שניתן לחלק.
ממשק ה-HAL של AIDL מגדיר את ממשק הפקודות על סמך סוגי נתונים שניתנים לחלוקה (parcelable) עם טיפוס חזק, בניגוד לפקודות בסדרה (serialized) דרך FMQ ב-HIDL. כך אפשר ליצור ממשק יציב לפקודות ולהגדיר בצורה קריאה יותר את האופן שבו מתבצע הפירוש של עומס העבודה של הפקודה.
השיטה
executeCommands
מוגדרת ב-IComposerClient.aidl
בתורCommandResultPayload[] executeCommands(in DisplayCommand[] commands);
כאשר כל פקודה היא טיפוס parcelable עם סוג מוגדר ב-
DisplayCommand.aidl
. תגובות לפקודות הן רכיבי Parcelable עם טיפוס מוגדר, שמוגדרים ב-CommandResultPayload.aidl
.הסרת
IComposerClient.getClientTargetSupport
כי אין לקוחות פעילים בשיטה הזו.ייצוג צבעים כ-float במקום כ-byte, כדי להתאים טוב יותר למחסנית הגרפיקה העליונה ב-Android כפי שמוגדרת ב-
ASurfaceTransaction_setColor
.הוספת שדות חדשים לצורך בקרה על תוכן HDR.
ב-HAL של AIDL, סטאקים מעורבים של שכבות 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
החדש. המבנה הזה מתאר את המאפיינים שלPixelFormat
ו-AlphaInterpretation
שנדרשים למכשיר. לאחר ההטמעה הזו, ממשק המשתמש של המערכת מסמנים את שכבת המסכה של האלפא בתורDISPLAY_DECORATION
, סוג חדש של קומפוזיציה שמנצל את החומרה הייעודית.הוספה של שדה
expectedPresentTime
חדש ל-DisplayCommand.aidl
.השדה
expectedPresentTime
מאפשר ל-SurfaceFlinger להגדיר את השעה הנוכחית הצפויה, שבה התוכן הנוכחי צריך להופיע במסך. התכונה הזו מאפשרת ל-SurfaceFlinger לשלוח פקודת הצגה מראש להטמעה, וכך להעביר לצינור עיבוד נתונים (pipeline) יותר מעבודת העריכה.הוספה של ממשקי API חדשים לצורך בקרה על הגדרות התצוגה בזמן האתחול.
באמצעות
BOOT_DISPLAY_CONFIG
, היצרנים יכולים לציין שהם תומכים בהגדרת תצוגת האתחול. ב-methodssetBootDisplayConfig
,clearBootDisplayConfig
ו-getPreferredBootDisplayConfig
נעשה שימוש ב-BOOT_DISPLAY_CONFIG
באופן הבא:באמצעות
setBootDisplayConfig
, המסגרת מעדכנת את הספקים לגבי הגדרת התצוגה בזמן האתחול. הספקים חייבים לשמור במטמון את הגדרות תצוגת האתחול, ולהפעיל את המכשיר בהגדרות האלה בהפעלה מחדש הבאה. אם המכשיר לא מצליח להפעיל את ההגדרה הזו, הספק צריך למצוא הגדרה שתואמת לרזולוציה ולתדירות הרענון של ההגדרה הזו. אם אין הגדרה כזו, הספק צריך להשתמש בהגדרת התצוגה המועדפת עליו.באמצעות
clearBootDisplayConfig
, המסגרת מעדכנת את הספקים לנקות את הגדרות תצוגת האתחול, ולהפעיל את ההגדרות המועדפות שלהם לתצוגה במהלך ההפעלה מחדש הבאה.באמצעות
getPreferredBootDisplayConfig
, המסגרת שולחת שאילתה לגבי מצב האתחול המועדף של הספק.
אם אין תמיכה בהגדרת תצוגת האתחול, השיטות האלה מחזירות את הערך
UNSUPPORTED
.הוספת ממשקי API חדשים לצורך בקרה על טיימר ההשבתה של המסך.
באמצעות
DISPLAY_IDLE_TIMER
, הספקים יכולים לציין שהם מטמיעים טיימר של חוסר פעילות במסך הזה. כשהמכשיר במצב חוסר פעילות, היכולת הזו משנה את קצב הרענון להגדרה נמוכה יותר כדי לחסוך באנרגיה. הפלטפורמה משתמשת ב-setIdleTimerEnabled
כדי לשלוט בזמן הקצוב לתפוגה של הטיימר, ובמקרים מסוימים כדי להשבית אותו כדי למנוע מעבר לא רצוי לשיעור רענון אחר במצב חוסר פעילות.שימוש ב-callback
IComposerCallback.onVsyncIdle
מציין לפלטפורמה שהמסך לא פעיל ושקצב הקריאה החוזרתvsync
השתנה. התגובה של הפלטפורמה להתקשרות החוזרת הזו היא איפוס המודלvsync
. הוא מאלץ סנכרון מחדש שלvsync
בפריים הבא, ומלמד את הקצב החדש שלvsync
.
הטמעה
ספקים לא נדרשים להטמיע את AIDL HAL ב-Android 13. עם זאת, מומלץ להטמיע את ה-HAL של ה-composer של AIDL במקום את הגרסה של HIDL כדי להשתמש בפונקציונליות ובממשקי ה-API החדשים.
הטמעת עזר של AIDL HWC HAL מוטמעת באמולטורים של Android.
בדיקה
כדי לבדוק את ההטמעה, מריצים את הפקודה VtsHalGraphicsComposer3_TargetTest
.