HAL של Hardware Composer

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

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

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

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

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

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

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

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

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