במאמר הזה נסביר איך לשלב את Android Performance Tuner, שנקרא גם ספריית Tuning Fork, כדי להקליט ולהעלות נתונים של זמן הפריימים ממנועי משחקים מקוריים (C ו-C++).
למידע על מנוע המשחק Unity, אפשר לעיין במדריך ל-Unity.
רקע
רכיב מרכזי בחוויית המשחק הוא ביצועי הרינדור. ביצועי העיבוד הם תוצאה של שני נתונים:
- קצב פריימים: באיזו תדירות מצויר פרים.
- הגדרות איכות גרפית: רמת הדיוק שבה מוצג פריים, כולל דיוק הסימולציה והגרפיקה.
במשחקים, ביצועי רינדור טובים מוגדרים כך:
- הצגת קצב פריימים יציב ועקבי (כלומר, אחוז הפריימים שמוצגים בתדירות הרצויה).
- רינדור פריימים בתדירות הגבוהה ביותר האפשרית תוך שמירה על יציבות, בדרך כלל 30 או 60 פריימים לשנייה, בהתאם לסוג המשחק.
- הגדלת רמת הפירוט למשתמש בהתאם לגודל המסך ולצפיפות הפיקסלים, תוך שמירה על קצב פריימים יציב ורצוי.
ספריית Android Frame Pacing מגבילה את רוב השינויים בזמני הרינדור של הפריים, ומספקת קצב פריימים יציב למשחקים. השונות שנותרה בזמני הפריימים נובעת מרמת הפירוט שמוצגת במהלך סצנות מסוימות במשחק ומהיכולות הגרפיות של המכשיר. באמצעות Android Performance Tuner, אפשר לזהות מקרים במהלך המשחק שבהם זמן הרינדור של הפריים איטי או מהיר יותר מהיעד, ולקשר בין הבעיות וההזדמנויות האלה לבין:
- הגדרות איכות ספציפיות
- סצנות ספציפיות במשחק
- דגמים ספציפיים של מכשירים או מפרטים של מכשירים
הקלטה והעלאה של נתונים
הספרייה Tuning Fork מסתמכת על אחת מפונקציות ה-tick שלה, שמופעלת בכל פריים על ידי הספרייה Android Frame Pacing. בספרייה, המידע הזה נצבר בהיסטוגרמות, שמועלות ל-Google Play מעת לעת דרך נקודת קצה של HTTP. כל סימון נרשם כמשויך למפתח כלי ולהערה, שההגדרות שלהם מצוינות בקובץ של מאגר פרוטוקולים.
מפתחות לציון מקום
מפתח כלי מציין את המיקום בפריים שממנו מגיע הטיק, והוא מספר שלם שצריך להעביר לכל קריאה של פונקציית טיק. ספריית Android Frame Pacing משתמשת בקבוצה מוגדרת מראש של מפתחות מכשיר, שמוגדרים ב-swappy_common.h
.
אפשר גם להגדיר מפתחות משלכם למכשיר אם לא משתמשים בספריית Frame Pacing.
הערות
ההערות מספקות מידע הקשרי על הפעולות שהמשחק מבצע כשמתועד טיק. לדוגמה, הערה יכולה לזהות כל אחד מהפריטים הבאים:
- הרמה הנוכחית במשחק
- "הבוס הגדול" מופיע על המסך
- כל מידע רלוונטי אחר על מצב המשחק
ההערות מוגדרות על ידי הודעת מאגר הפרוטוקול com.google.tuningfork.Annotation
. כדי להגדיר את ההערה הנוכחית, מעבירים סריאליזציה של ההודעה שהגדרתם אל TuningFork_setCurrentAnnotation()
.
כל נתוני הטיקים הבאים משויכים להערה הזו עד להגדרת הערה אחרת. דוגמה להגדרת פרוטו של הערות:
import "tuningfork.proto"
enum Level {
INVALID_LEVEL = 0;
Level_1 = 1;
Level_2 = 2;
Level_3 = 3;
}
message Annotation {
optional Level level = 1;
}
פרמטרים של אמינות
פרמטרים של דיוק משפיעים על הביצועים ועל הדיוק הגרפי של המשחק, כמו רמת הפירוט של הרשת, רזולוציית הטקסטורה ושיטת ההחלקה. בדומה להערות, פרמטרים של איכות מוגדרים באמצעות ההודעה com.google.tuningfork.FidelityParams
של פרוטוקול למאגר נתונים זמני. זו דוגמה להגדרת פרוטו של פרמטרים של איכות:
import "tuningfork.proto"
message FidelityParams {
int32 texture_quality_level = 1;
int32 shadow_resolution = 2;
float terrain_details_percent = 3;
int32 post_processing_effects_level = 4;
}
באתחול של Tuning Fork, מעבירים סריאליזציה של הפרמטרים שבהם המשחק משתמש. אפשר לשנות את הפרמטרים האלה אם, לדוגמה, המשתמש משנה את הגדרות העיבוד של המשחק, והנתונים שמועלים לאחר מכן משויכים לפרמטרים החדשים.
כדי שמערכת Google Play תוכל להבין את ההערות ואת פרמטרי הדיוק שאתם מגדירים, קובץ מאגר הפרוטוקולים שמכיל את ההגדרות האלה צריך להיכלל בחבילת ה-APK של המשחק, יחד עם הגדרות האתחול. כדי שהנתונים יופרדו לפי שילובים נפוצים של פרמטרים של נאמנות בממשק המשתמש של Google Play, צריך לספק ערכי ברירת מחדל לשילובים האלה ב-APK. מידע נוסף זמין במאמר בנושא הגדרת רמות איכות.
תקורה של זיכרון ומעבד
כל הזיכרון שבו נעשה שימוש בספריית Tuning Fork מוקצה בזמן האתחול כדי למנוע הפתעות במהלך המשחק. גודל הנתונים תלוי במספר מפתחות המכשירים, במספר ההערות האפשריות ובמספר הדליים בכל היסטוגרמה. הוא שווה למכפלה של כל אלה כפול ארבעה בייטים לכל דלי. יש גם שני עותקים של כל ההיסטוגרמות כדי לאפשר שליחה בשיטת באפרינג כפול.
השליחה מתבצעת בשרשור נפרד ולא חוסמת קריאות של tick. אם אין חיבור להעלאה, השליחה מתווספת לתור להעלאה מאוחר יותר.
התקורה של קריאה לפונקציית tick היא נמוכה: היא פשוט מחשבת אינדקס למערך של משבצות היסטוגרמה ומגדילה את ספירת המספרים השלמים.
שילוב ספריית מזלג הכוונון
מדריך השילוב הזה מחולק לשני חלקים. בחלק הראשון מוסבר איך מריצים בדיקה מקצה לקצה באמצעות אפליקציית הדגמה ו-Google Play Console. בחלק השני מוסבר איך לשלב את ספריית Tuning Fork בשרשרת הכלים ואיך להשתמש בפונקציות שהספרייה מספקת. כדי להתחיל, לוחצים על הקישור הבא שבהמשך.