Google is committed to advancing racial equity for Black communities. See how.
דף זה תורגם על ידי Cloud Translation API.
Switch to English

גרָפִיקָה

סמל HAL של Android Graphics

מסגרת האנדרואיד מציעה מגוון ממשקי API של עיבוד גרפיקה עבור דו-ממדי ותלת-ממד אשר מתקשרים עם יישומי יצרנים של מנהלי התקנים גרפיים, לכן חשוב להבין היטב כיצד ממשקי ה- API הללו פועלים ברמה גבוהה יותר. דף זה מציג את שכבת ההפשטה של ​​חומרה גרפית (HAL) שעליה נבנים נהגים אלה.

מפתחי אפליקציות מציירים תמונות למסך בשלוש דרכים: עם Canvas , OpenGL ES או Vulkan .

רכיבי גרפיקה של אנדרואיד

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

התרשים הבא מראה כיצד רכיבי המפתח עובדים יחד:

רכיבי עיבוד תמונה

איור 1. כיצד מעובדים משטחים

המרכיבים העיקריים מתוארים להלן:

מפיקי זרם תדמית

מפיק זרמי תמונות יכול להיות כל דבר שמייצר מאגרים גרפיים לצריכה. דוגמאות לכך כוללות מפענחי וידאו של OpenGL ES, Canvas 2D ומדיאסerver.

צרכני זרם תדמית

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

יישומי OpenGL ES אחרים יכולים לצרוך גם זרמי תמונות, כגון אפליקציית המצלמה הצורכת זרם תמונה מקדימה של המצלמה. יישומים שאינם GL יכולים להיות גם צרכנים, למשל בכיתה ImageReader.

מלחין חומרה

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

מלחין החומרה HAL מנצח את המחצית השנייה של העבודה ומהווה את הנקודה המרכזית בכל עיבוד הגרפיקה של Android. מלחין החומרה חייב לתמוך באירועים, אחד מהם הוא VSYNC (אחר הוא תקע חמה לתמיכה ב- HDMI ו- Plug-and-play).

גרלוק

מקצה הזיכרון הגרפי (Gralloc) נדרש לצורך הקצאת זיכרון המבוקש על ידי מפיקי התמונות. לפרטים, ראה Gralloc HAL .

זרימת נתונים

ראה את התרשים הבא לתיאור צינור הגרפיקה של Android:

זרימת נתונים גרפיים

איור 2. זרימת נתונים גרפיים דרך אנדרואיד

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

BufferQueue

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

ראה את התרשים הבא לתהליך התקשורת BufferQueue.

תהליך תקשורת BufferQueue

איור 3. תהליך תקשורת BufferQueue

BufferQueue מכיל את ההיגיון הקושר בין מפיקי זרמי תמונות לבין צרכני זרם תמונות. כמה דוגמאות ליצרני תמונות הן תצוגות מקדימות של המצלמה שהופקו על ידי משחקי המצלמה HAL או OpenGL ES. כמה דוגמאות לצרכני תמונות הן SurfaceFlinger או אפליקציה אחרת המציגה זרם OpenGL ES, כמו אפליקציית המצלמה המציגה את עינית המצלמה.

BufferQueue הוא מבנה נתונים המשלב מאגר מאגר עם תור ומשתמש ב- Binder IPC כדי להעביר מאגרים בין תהליכים. ממשק המפיק, או מה שאתה מעביר למי שרוצה ליצור מאגרים גרפיים, הוא IGraphicBufferProducer (חלק מ- SurfaceTexture ). BufferQueue משמש לעתים קרובות לעיבוד למשטח ולצרוך עם צרכן GL, בין משימות אחרות.

BufferQueue יכול לפעול בשלושה מצבים שונים:

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

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

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

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

מלחין החומרה HAL מנצח את המחצית השנייה של העבודה. HAL זה משמש כנקודה המרכזית בכל עיבוד הגרפיקה של Android.