החל מגרסה 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. כך מתקבל ממשק יציב לפקודות והגדרה קריאה יותר לאופן הפירוש של המטען הייעודי (Payload) של הפקודה.
השיטה
executeCommands
מוגדרת ב-IComposerClient.aidl
בתורCommandResultPayload[] executeCommands(in DisplayCommand[] commands);
כאשר כל פקודה היא סוג של parcelable עם טיפוס מוגדר ב-
DisplayCommand.aidl
. התשובות של הפקודות הן מקטעים מוקלדים מאוד שמוגדרים ב-CommandResultPayload.aidl
.הסרת
IComposerClient.getClientTargetSupport
כי אין לקוחות פעילים לשיטה הזו.ייצוג של צבעים כצפים במקום בייטים, כדי ליישר קו עם סטאק הגרפיקה העליון ב-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 לשלוח פקודת present להטמעה מראש, וכך להעביר לצינור עיבוד נתונים (pipeline) יותר מעבודת ההרכבה.הוספה של ממשקי API חדשים לצורך בקרה על הגדרות התצוגה בזמן האתחול.
באמצעות
BOOT_DISPLAY_CONFIG
, הספקים יכולים לציין שיש תמיכה בהגדרות של תצוגת ההפעלה. השיטותsetBootDisplayConfig
,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 במקום את גרסת HIDL כדי להשתמש בפונקציונליות החדשה ובממשקי ה-API החדשים.
הטמעת עזר של AIDL HWC HAL מוטמעת באמולטורים של Android.
בדיקה
כדי לבדוק את ההטמעה, מריצים את VtsHalGraphicsComposer3_TargetTest
.