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 ומדיאו-שרת.

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

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

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

מלחין חומרה

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

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

גרלוק

מקצה הזיכרון הגרפי (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.