HAL של Hardware Composer

שכבת ה-HAL של Hardware Composer ‏ (HWC) קובעת את הדרך היעילה ביותר ליצור קומפוזיציה של מאגרי נתונים באמצעות החומרה הזמינה. כ-HAL, ההטמעה שלו ספציפית למכשיר ובדרך כלל מתבצעת על ידי יצרן ציוד מקורי (OEM) של חומרת התצוגה.

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

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

הגישה השנייה יכולה להיות יעילה הרבה יותר.

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

  1. ‫SurfaceFlinger מספק ל-HWC רשימה מלאה של שכבות ושואל: "איך אתה רוצה לטפל בזה?"
  2. מערכת HWC מגיבה על ידי סימון כל שכבה כהרכב של מכשיר או לקוח.
  3. ‫SurfaceFlinger מטפל בכל לקוח, מעביר את מאגר הפלט ל-HWC ומאפשר ל-HWC לטפל בכל השאר.

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

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

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