AIDL for Hardware Composer HAL

החל ב-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 HAL החל ב-Android 13 במקום בגרסת HIDL. עיין בסעיף יישום למידע נוסף.

הבדלים בין AIDL ו-HIDL HALs

המלחין החדש של AIDL HAL, בשם android.hardware.graphics.composer3 , מוגדר ב- IComposer.aidl . הוא חושף API דומה ל-HIDL HAL android.hardware.graphics.composer@2.4 עם השינויים הבאים:

  • הסרת ה- Fast Message Queue (FMQ) לטובת פקודות הניתנות לחלוקה.

    ה-AIDL HAL מגדיר את ממשק הפקודות בהתבסס על טיפוסים הניתנים לחלקים מוקלדים, בניגוד לפקודות הסדרתיות על FMQ ב-HIDL. זה מספק ממשק יציב לפקודות והגדרה קריאה יותר של אופן הפירוש של עומס הפקודות.

    שיטת executeCommands מוגדרת ב- IComposerClient.aidl כ

    CommandResultPayload[] executeCommands(in DisplayCommand[] commands);
    

    כאשר כל פקודה היא סוג הניתן לחלוקה חזקה שהוגדר ב- DisplayCommand.aidl . תגובות הפקודה הן רכיבי חיבור עם הקלדה חזקה המוגדרים ב- CommandResultPayload.aidl .

  • הסרה של IComposerClient.getClientTargetSupport מכיוון שאין לקוחות פעילים לשיטה זו.

  • ייצוג של צבעים כצפים במקום בתים כדי ליישר טוב יותר עם ערימת הגרפיקה העליונה באנדרואיד כפי שהוגדר ב- 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 החדש. מבנה זה מתאר את הערכים PixelFormat ו- AlphaInterpretation הנדרשים על ידי המכשיר. ביישום זה, ממשק המשתמש של המערכת מסמן את שכבת מסיכת האלפא כ- DISPLAY_DECORATION , סוג קומפוזיציה חדש המנצל את החומרה הייעודית.

  • הוספת שדה expectedPresentTime חדש ל- DisplayCommand.aidl .

    השדה expectedPresentTime מאפשר ל-SurfaceFlinger להגדיר את זמן ההווה הצפוי שבו התוכן הנוכחי חייב להיות מוצג על המסך. עם תכונה זו, SurfaceFlinger שולח פקודה נוכחת למימוש מבעוד מועד, מה שמאפשר לו להעביר יותר מעבודת הקומפוזיציה.

  • הוספת ממשקי API חדשים לשלוט בתצורת תצוגת האתחול.

    באמצעות BOOT_DISPLAY_CONFIG , הספקים יכולים לציין שתצורת תצוגת האתחול נתמכת. השיטות setBootDisplayConfig , clearBootDisplayConfig ו- getPreferredBootDisplayConfig משתמשות BOOT_DISPLAY_CONFIG באופן הבא:

    • באמצעות setBootDisplayConfig , המסגרת מיידעת את הספקים על תצורת תצוגת זמן האתחול. על הספקים לשמור במטמון בתצורת תצוגת האתחול, ולאתחל בתצורה זו באתחול מחדש הבא. אם ההתקן לא מצליח לאתחל בתצורה זו, על הספק למצוא תצורה שתואמת את הרזולוציה וקצב הרענון של תצורה זו. אם לא קיימת תצורה כזו, על הספק להשתמש בתצורת התצוגה המועדפת עליו.

    • באמצעות clearBootDisplayConfig , המסגרת מיידעת את הספקים לנקות את תצורת תצוגת האתחול, ולאתחל בתצורת התצוגה המועדפת עליהם במהלך האתחול הבא.

    • באמצעות getPreferredBootDisplayConfig , המסגרת שוללת את מצב האתחול המועדף על הספק.

    כאשר תצורת תצוגת האתחול אינה נתמכת, שיטות אלה מחזירות ערך של UNSUPPORTED .

  • הוספה של ממשקי API חדשים לשליטה בטיימר סרק התצוגה.

    • באמצעות DISPLAY_IDLE_TIMER , הספקים יכולים לציין כי טיימר חוסר פעילות מיושם על ידי הספק עבור תצוגה זו. במצב סרק, יכולת זו משנה את קצב הרענון להגדרה נמוכה יותר כדי לשמר את הכוח. הפלטפורמה משתמשת setIdleTimerEnabled כדי לשלוט על הזמן הקצוב של הטיימר, ובמקרים מסוימים, כדי להשבית אותו על מנת למנוע מתגי קצב רענון לא רצויים כשהם לא פעילים.

    • שימוש בהתקשרות חוזרת IComposerCallback.onVsyncIdle מציין לפלטפורמה שהתצוגה לא פעילה ושקצב vsync השתנה. הפלטפורמה מגיבה להתקשרות חוזרת זו על ידי איפוס מודל vsync שלה. הוא מאלץ סינכרון מחדש vsync על המסגרת הבאה, ולומד את קצב vsync החדש.

יישום

ספקים אינם נדרשים ליישם את AIDL HAL עבור אנדרואיד 13. עם זאת, הם מוזמנים ליישם את ה-AIDL composer HAL במקום את גרסת HIDL כדי להשתמש בפונקציונליות ובממשקי ה-API החדשים.

יישום ייחוס עבור AIDL HWC HAL מיושם באמולטורים של אנדרואיד.

בדיקה

כדי לבדוק את היישום שלך, הפעל את VtsHalGraphicsComposer3_TargetTest .