החל מגרסה 13 ב-Android, 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. לצפייה מידע נוסף זמין בקטע הטמעה.
ההבדלים בין AIDL לבין HIDL HALs
מלחין ה-AIDL החדש HAL בשם android.hardware.graphics.composer3
מוגדר ב-IComposer.aidl
.
היא חושפת ממשק API שדומה ל-HIDL HAL
android.hardware.graphics.composer@2.4
עם השינויים הבאים:
תור ההודעות המהירות (FMQ) יוסר מהמצב הזה לטובת פקודות שניתן לפרט.
ה-AIDL HAL מגדיר את ממשק הפקודות על סמך סוגים של מגרשים, בניגוד לפקודות טוריות ב-FMQ ב-HIDL. הזה מספקת ממשק יציב לפקודות והגדרה קריאה יותר המטען הייעודי של הפקודה מפורש.
executeCommands
ה-method מוגדרת ב-IComposerClient.aidl
בתורCommandResultPayload[] executeCommands(in DisplayCommand[] commands);
שבו כל פקודה היא סוג של קובץ parcelable בהקלדה חזקה,
DisplayCommand.aidl
התשובות של הפקודות הן מחלקות מוקלדות מאוד שמוגדרות ב-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
שהוגדרו על ידי הספק, ויכול להיות שתעדיפו לעמעם ב-gamma כדי לאפשר שיפורי ניגודיות שהוגדרו על ידי הספק בצינורות עיבוד הנתונים של הצבעים.תוספת מסוג יצירה חדשה
DISPLAY_DECORATION
ב-Composition.aidl
לקישוטי מסך.לחלק מהמכשירים יש חומרה ייעודית לאופטימיזציה של מסכת האלפא מחליק פינות מעוגלות וגזירים במסכים. מכשירים עם חומרה כזו חייבים הטמעת
IComposerClient.getDisplayDecorationSupport
כדי להחזיר את המבנהDisplayDecorationSupport
כמו שהוא מוגדרDisplayDecorationSupport.aidl
. המבנה הזה מתאר אתPixelFormat
ו-AlphaInterpretation
enums שנדרשים על ידי המכשיר. לאחר ההטמעה, ממשק המשתמש של המערכת מסמן את alpha masklayer בתורDISPLAY_DECORATION
, סוג קומפוזיציה חדש שמנצל את החומרה הייעודית.הוספה של
expectedPresentTime
חדש לשדהDisplayCommand.aidl
.השדה
expectedPresentTime
מאפשר ל-SurfaceFlinger להגדיר את הערך הצפוי את השעה שבה התוכן הנוכחי צריך להיות מוצג על המסך. עכשיו אפשר התכונה SurfaceFlinger שולחת פקודת הצגה ליישום לפני וכך לאפשר עיבוד של חלק גדול יותר מעבודת ההרכבה.הוספה של ממשקי API חדשים לשליטה בתצורת תצוגת האתחול.
באמצעות
BOOT_DISPLAY_CONFIG
, הספקים יכולים לציין שיש תמיכה בהגדרות של תצוגת האתחול.setBootDisplayConfig
,clearBootDisplayConfig
, ו-getPreferredBootDisplayConfig
שיטות שמבוססות עלBOOT_DISPLAY_CONFIG
ככה:באמצעות
setBootDisplayConfig
, ה-framework מודיע לספקים לגבי תצורת התצוגה של זמן האתחול. ספקים חייבים לשמור במטמון את ההגדרות של מסך האתחול, ולהפעיל את התצורה הזו בהגדרה הבאה להפעיל מחדש. אם לא ניתן לאתחל את המכשיר בהגדרה הזו, הספק צריך למצוא הגדרה שתואמת לרזולוציה ולקצב הרענון של ההגדרה הזו. אם לא, הערך הזה קיימת, הספק צריך להשתמש בהגדרת התצוגה המועדפת עליו.באמצעות
clearBootDisplayConfig
, ה-framework מודיע לספקים לנקות את התצורה של מסך ההפעלה, יופעלו בהגדרות התצוגה המועדפת עליהם במהלך ההפעלה מחדש הבאה.באמצעות
getPreferredBootDisplayConfig
, ה-framework שולח שאילתה לגבי מצב ההפעלה המועדף של הספק.
כשאין תמיכה בתצורת מסך ההפעלה, השיטות האלה מחזירות של
UNSUPPORTED
.הוספה של ממשקי API חדשים כדי לשלוט בטיימר לא פעיל של הצגת המסך.
באמצעות
DISPLAY_IDLE_TIMER
, ספקים יכולים לציין שטיימר של חוסר פעילות מוטמע על ידי הספק עבור המסך הזה. כשהיכולת הזו לא פעילה, קצב הרענון משתנה ל כדי לחסוך בצריכת החשמל. הפלטפורמה משתמשת ב-setIdleTimerEnabled
כדי לשלוט על הזמן הקצוב לתפוגה של הטיימר, ובמקרים מסוימים להשבית אותו לפי כדי למנוע החלפה של קצב רענון לא רצוי במצב של חוסר פעילות.באמצעות
IComposerCallback.onVsyncIdle
קריאה חוזרת (callback) מציינת לפלטפורמה שהמסך לא פעיל והvsync
הקצב השתנה. הפלטפורמה מגיבה לקריאה החוזרת הזו על ידי איפוס מודלvsync
. הוא מאלץ סנכרון מחדש שלvsync
בפריים הבא, ולומדvsync
קצב.
הטמעה
ספקים לא נדרשים להטמיע את AIDL HAL ל-Android 13. אבל, לפעמים אנחנו ממליצים להם להטמיע את מודל ה-AIDL מחבר HAL במקום בגרסת HIDL כדי להשתמש בפונקציונליות החדשה ובממשקי ה-API החדשים.
הטמעה של קובצי עזר של AIDL HWC HAL מוטמע באמולטורים של Android.
בדיקה
כדי לבדוק את ההטמעה, מריצים את VtsHalGraphicsComposer3_TargetTest
.