AIDL למלחין לחומרה עם HAL

החל מגרסה 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.