יצירת פרופיל ביצועים וכוונון הם משימה מורכבת, ולפעמים נראה שהיא יותר אומנות מאשר מדע. החלקים הרבים שצריכים להיות מסונכרנים בצורה מושלמת במשחק, בשילוב עם המורכבות בסצנה נתונה, יכולים להקשות על ההבנה והבידוד של בעיות. ב-ChromeOS, הרבה כלים מתוכננים עם ערכות שבבים של ARM. בהמשך מפורטים כמה טיפים שיעזרו לכם לזרז את התהליך.
חשוב לזכור כשמבצעים אופטימיזציה של ביצועי המשחק ב-ChromeOS, שבעיות הביצועים הבסיסיות משותפות לכל המכשירים, והשיפורים יועילו לביצועים ולחיי הסוללה של כל המשתמשים. יכול להיות שב-ChromeOS, שבו יש נטייה למסכים גדולים יותר ולמכשירי קלט למחשבים שולחניים, בעיות מסוימות יופיעו בקלות רבה יותר. לדוגמה, אלגוריתם לא יעיל לטעינת טקסטורות עשוי 'לפעול בצורה תקינה' במכשירים ניידים מתקדמים, אבל לא יוכל לעמוד בקצב ב-Chromebook עם מסך 4k. שיפור האלגוריתם ישפר את המשחק בכל המכשירים.
אם אתם חדשים בתחום של יצירת פרופילים, הגישה הכללית הטובה ביותר היא:
- בודקים אם הביצועים מוגבלים על ידי:
- CPU
- GPU
- אחר: קלט/דיסק/רשת
- מנסים לבודד את הסיבה העיקרית
- אופטימיזציה
- חזרה
ברוב המקרים, המשחקים יסווגו כמשחקים שמוגבלים על ידי CPU או כמשחקים שמוגבלים על ידי GPU. בעזרת הטיפים והכלים ליצירת פרופילים שמופיעים בהמשך, נסו לקבוע איפה המערכת 'מבזבזת את הזמן' בכל פריים. לדוגמה, אם לוקח הרבה זמן לחשב ולטעון את הקודקודים לפני שה-GPU מתחיל לעבד את התמונה, יכול להיות שהמשחק מוגבל על ידי המעבד. לעומת זאת, אם אתם משתמשים במספר גדול של מסננים מפורטים שמבוססים על GPU, סביר להניח שהמשחק שלכם מוגבל על ידי ה-GPU. חשוב לזכור שלטלפונים ניידים ולמכשירי ChromeOS רבים אין כרטיסי מסך נפרדים. משחק למחשב שמתבסס על כך שמסנני GPU מהירים, עשוי לגלות ש-GPU משולבים לוקח יותר מדי זמן לעבד כל סצנה.
לפרטים נוספים על גישות לפרופילים, אפשר לעיין במדריך של ARM בנושא 'תהליך האופטימיזציה'.
כלים
אפשר לזהות צווארי בקבוק לבד, אבל שימוש בכלים הנכונים יקל על ניתוח הביצועים של המשחק ויעזור לכם להתמקד בדברים הנכונים. יש הרבה כלים, אבל אלה כמה מהתוכנות המומלצות שלנו.
Android Studio Profiler
הדרך הקלה ביותר להתחיל ליצור פרופילים של אפליקציות ל-Android היא באמצעות כלי הפרופילים המשולב של Android Studio. ב-Android Studio, במקום ללחוץ על Run (הפעלה), פשוט בוחרים באפשרות Profile (פרופיל) כדי להפעיל את האפליקציה ולקבל תובנות בזמן אמת לגבי השימוש במעבד, בזיכרון וברשת. אפשר להשתמש במעקב פשוט של יחידת העיבוד המרכזית כדי לבודד במהירות אזורים בקוד שצריך לבדוק.
הכלי הזה לא מספק תובנות אמיתיות לגבי השימוש ב-GPU או לגבי מה שקורה בין כל סנכרון של פריימים, ולכן, למרות שהוא כלי טוב, סביר להניח שהוא לא יספיק כדי להפעיל את המשחק בביצועים אופטימליים.
Snapdragon Profiler
התנהגות המשחקים תהיה זהה בכל המכשירים, ולכן דרך טובה לקבל מידע מפורט על הביצועים היא להשתמש ב-Snapdragon Profiler בטלפון ARM מבוסס Qualcomm. למרות שלא מדובר בפרופיל ישירות במכשיר ChromeOS, תוכלו לקבל מידע על המקום שבו המשחק מבלה את רוב הזמן בכל פריים, ולקבל תובנות לגבי אילו קריאות ל-GPU נמצאות בשימוש.
לדוגמה, אם אתם רואים שהמערכת משקיעה הרבה זמן בסינון אניסוטרופי של ה-GPU, והסינון הזה תופס חלק גדול מהעבודה שמתבצעת בכל פריים, כנראה שתוכלו לשפר משמעותית את הביצועים על ידי שינוי ההגדרה הזו.
אם אתם רואים שזמני ה-GPU קצרים וקבועים, אבל זמני ה-CPU ארוכים וגורמים לכם לפספס סנכרונים של פריימים, כדאי לבדוק את האלגוריתמים של טעינת הטקסטורה או הכנת הפריימים.
מידע נוסף זמין במאמרי העזרה הרשמיים בנושא שימוש.
ARM Mobile Studio
עוד כלי שימושי ליצירת פרופיל של מכשיר ARM הוא ARM Mobile Studio. יש מפתחים שמעדיפים אותה על פני Snapdragon Profiler, אבל אפשר להשתמש בה בדרכים דומות. אפשר לעיין במאמרי העזרה הרשמיים בנושא שימוש.
Android GPU Inspector
Android GPU Inspector הוא כלי חדש שפותח על ידי Google במיוחד כדי לעזור לכם להפיק את הביצועים הטובים ביותר מהמשחק שלכם באמצעות OpenGL ו-Vulkan. התכונה הזו נמצאת כרגע במצב של תצוגה מקדימה למפתחים, ויכול להיות שיידרשו כמה פעולות כדי להגדיר אותה. בשלב הזה היא פועלת רק במספר קטן של מכשירים. הוא צפוי להיות אחד הכלים העיקריים לשימוש בפרופילים של גרפיקה בעתיד. לעיון במאמרי העזרה הרשמיים
מעקב אחר סקירה כללית של ARC
יש גם כלי כללי יותר – ARC Overview Tracing – שפועל באופן דומה לכלי ARC Graphics Tracing שצוין למעלה. כלי המעקב הזה יספק מדדים ברמה גבוהה לגבי הביצועים של אפליקציה ושל ChromeOS. הנתונים שיוצגו יכללו את קצב הפריימים לשנייה (FPS) של האפליקציה ושל Chrome עצמו, וגם את השימוש במעבד, השימוש במעבד הגרפי, צריכת החשמל ועוד. אפשר להריץ את הכלי כמה פעמים ולראות תרשימים לכל הרצה, שמוצגים אחד על גבי השני עם צבעים שונים כדי להבדיל ביניהם. כל מודל מעקב יישמר בתיקיית ההורדות, ותוכלו לייבא אותו מחדש להשוואות עתידיות. כדי לבצע בדיקות תקינות כלליות של אפליקציות, כדאי להתחיל עם מעקב אחר סקירה כללית של ARC.
כדי לגשת לכלי הזה, עוברים אל chrome://arc-overview-tracing בדפדפן ב-ChromeOS.
השלבים הבאים
יכול להיות שמצאתם צווארי בקבוק אבל אתם לא בטוחים מה לעשות לגביהם. או שמצאתם את הבעיות וטיפלתם בהן, אבל אתם לא יודעים איך להתקדם. בהמשך ריכזנו רשימה של טיפים ומשאבים כלליים ל-Android ולמנועים ספציפיים.
טיפים כלליים
בפורטל מפתחי Android יש טיפים מצוינים לשיפור הביצועים של האפליקציה. במאמר הזה מוסבר על שיקולים לגבי זמן הטעינה, איך להשתמש בריבוי תהליכים, איך לטפל בהשהיית קלט ועוד.
חשוב ליצור פרופיל מוקדם ולעדכן אותו לעיתים קרובות, במיוחד אם אתם מטargetים מכונות חלשות יותר או אם אתם מנסים להגיע לקצה גבולות הארכיטקטורה המתקדמת. מעקב אחרי נתוני הביצועים של האפליקציה יעזור לכם לזהות אילו שינויים גרמו לירידה בקצב הפריימים, ואילו שינויים עוזרים לכם לשמור על חוויה חלקה כמו שרציתם.
מנוע Unity
בנוסף למסמכי Android הכלליים, Unity מספקת מסמכים ספציפיים ל-ChromeOS שיעזרו לכם ליצור אפליקציית ChromeOS עם ביצועים טובים באמצעות המנוע שלה. אפשר לעיין במסמכי ChromeOS בנושאים תחילת העבודה, קלט, ניפוי באגים ובנייה, כולל איך ליצור גרסאות x86. תוכלו לקרוא על ביצועים במאמר הסבר על אופטימיזציה ולצפות בקורס שלהם בנושא ביצועים ואופטימיזציה.
מומלץ לקרוא את המדריך של ARM בנושא יצירת פרופילים ואופטימיזציה של משחקי Unity ואת השיטות המומלצות שקשורות לנושא. התהליך הזה ינחה אתכם בפרופיל של משחק לדוגמה ב-Unity באמצעות הכלי Streamline, שהוא חלק מ-ARM Mobile Studio.
Unreal engine
ב-Unreal יצרו מסמכים משלהם עם הנחיות לשיפור הביצועים וטיפים וטריקים שמסבירים איך להשתמש בצורה הטובה ביותר בהרבה מהאפשרויות וההגדרות שהמנוע מספק. במאמר הזה תמצאו טיפים לגבי רמת הפירוט, הסברים על שימוש יעיל בתאורה, מדריכים מפורטים להגדרות איכות החומרים ולשיידרים, והצעות נוספות.
למידע נוסף על אופטימיזציות מבוססות-גרפיקה, אפשר לעיין במדריך של ARM לאופטימיזציה של משחקים לנייד. כאן אפשר למצוא טיפים כלליים לאופטימיזציה וגם שיקולים ספציפיים לגבי גרפיקה ב-Unreal.