בדרך כלל נתוני המעקב הם המקור הכי טוב לקבלת מידע כשבודקים בפעם הראשונה בעיה שקשורה לביצועים. הם מאפשרים לכם לנסח השערה לגבי הבעיה ולדעת איפה להתחיל לחפש.
ב-Android יש שתי רמות של מעקב שנתמכות: מעקב במערכת ומעקב אחר שיטות.
מאחר שמעקב המערכת עוקב רק אחרי אזורים שסומנו במיוחד לצורכי מעקב, התקורה שלו נמוכה ואין לו השפעה משמעותית על ביצועי האפליקציה. מעקב במערכת הוא כלי נהדר שעוזר לראות כמה זמן חלקים מסוימים בקוד שלכם פועלים.
כשמשתמשים במעקב אחר שיטות, המערכת עוקבת אחרי כל קריאה לפונקציה באפליקציה. הפעולה הזו יקרה מאוד, ולכן היא משפיעה מאוד על ביצועי האפליקציה, אבל היא מספקת תמונה מלאה של מה שקורה, אילו פונקציות נקראות ותדירות הקריאות שלהן.
כברירת מחדל, נתוני המעקב אחרי המערכת לא כוללים פונקציות מורכבות ספציפיות. הם זמינים בקובצי מעקב אחרי שיטות.
אנחנו בודקים כרגע פונקציית מעקב חדשה במערכת, כדי להציג פונקציות קומפוזביליות בתוך מעקבי מערכת. באמצעות מעקב אחרי רמות פירוט, ברמת הריכוז אפשר לבצע את המעקב הזה בצורה נמוכה.
מוגדר למעקב אחר הרכב
כדי לנסות את המעקב אחר יצירת קומפוזיציה מחדש בפרויקט, צריך לעדכן לפחות לגרסאות הבאות:
- Android Studio פלמינגו
- ממשק משתמש של כתיבת הודעה: 1.3.0
- כתיבת מהדר: 1.3.0
גם המכשיר או הסימולטור שבהם מריצים את המעקב צריכים להיות ברמת API של 30 לפחות.
בנוסף, צריך להוסיף תלות חדשה ב-Compose Runtime Tracing:
implementation("androidx.compose.runtime:runtime-tracing:1.0.0-beta01")
בהתאם לתלות הזו, כשמבצעים מעקב מערכת שכולל הרכבה מחדש, אפשר לראות את הפונקציות הקומפוזביליות באופן אוטומטי.
תיעוד מעקב מערכת
כדי ליצור מעקב מערכת ולראות את המעקב החדש אחרי יצירת קובץ מחדש בפעולה, פועלים לפי השלבים הבאים:
פותחים את הכלי לניתוחי נתונים:
לוחצים על ציר הזמן של המעבד (CPU).
מנווטים באפליקציה לממשק המשתמש שרוצים לעקוב אחריו ובוחרים באפשרות System Trace ו-Record
משתמשים באפליקציה כדי לגרום להרכבת מחדש ולהפסיק את ההקלטה. אחרי שהמעקב יתבצע ויופיע, תוכלו לראות את הרכיבים הניתנים לקישור ב-trace של ה-recomposition. תוכלו להשתמש במקלדת ובעכבר כדי לשנות את מרחק התצוגה ולהזיז את המעקב. אם לא מכירים את תכונת הניווט במעקב, עיינו במאמרי העזרה בנושא תיעוד מעקב.
לחיצה כפולה על תוכן קומפוזבילי בתרשים תעביר אתכם לקוד המקור שלו.
אפשר לראות את הרכיבים הניתנים לקישור גם בתרשים הלהבה, יחד עם מספר הקובץ והשורה:
נקודות שצריך לשים לב אליהן:
יתרת מקום ב-APK
הצלחנו לצמצם את התקורה של התכונה ככל האפשר, אבל יש עלייה בגודל ה-APK של אפליקציות Compose שמגיעה משרשראות מעקב שמוטמעות ב-APK על ידי המהדר של Compose. הגדלת הגודל יכולה להיות קטנה יחסית אם האפליקציה לא משתמשת הרבה ב'כתיבה', או גדולה יותר באפליקציות כתיבה מלאה. בנוסף, מחרוזות המעקב האלה לא מעורפלות, כדי שיוכלו להופיע בכלי המעקב, כפי שצוין למעלה. המהדר של Compose מזין אותם לכל האפליקציות, החל מגרסה 1.3.0.
כדי להסיר את מחרוזות המעקב ב-build של גרסת הייצור, מוסיפים את כלל Proguard הבא:
-assumenosideeffects public class androidx.compose.runtime.ComposerKt {
boolean isTraceInProgress();
void traceEventStart(int,int,int,java.lang.String);
void traceEventStart(int,java.lang.String);
void traceEventEnd();
}
הפונקציות האלה עשויות להשתנות בעתיד, אבל כל שינוי יופיע בנתוני הגרסה של Compose.
חשוב לזכור: השארת הקבצים האלה, למרות העלות הנוספת של הגדלת גודל ה-APK, מבטיחה שה-APK שמייצרים את הפרופיל הוא זה שמשתמשי האפליקציה מריצים.
תזמון מדויק
כדי ליצור פרופיל מדויק, כמו בכל בדיקת ביצועים, צריך להגדיר את האפליקציה profileable
ו-non-debuggable
בהתאם למאמר אפליקציות שניתן ליצור להן פרופיל.
תיעוד עקבות מהטרמינל
ניתן לתעד מעקב אחר הרכב מהטרמינל. כדי לעשות זאת, צריך לבצע את השלבים שבדרך כלל מתבצעים באופן אוטומטי ב-Android Studio.
הוספת יחסי תלות
קודם כול, מוסיפים את יחסי התלות הנוספים לאפליקציה.
implementation("androidx.tracing:tracing-perfetto:1.0.0")
implementation("androidx.tracing:tracing-perfetto-binary:1.0.0")
יצירה של פקודת רשומה
- יוצרים פקודת רשומה באמצעות Perfetto.
מוסיפים ידנית את הקטע של מקור הנתונים
track_event
לפי הדוגמה הבאה:adb shell perfetto \ -c - --txt \ -o /data/misc/perfetto-traces/trace \ <<EOF buffers: { size_kb: 63488 fill_policy: RING_BUFFER } buffers: { size_kb: 2048 fill_policy: RING_BUFFER } data_sources: { config { name: "track_event" } } duration_ms: 10000 flush_period_ms: 30000 incremental_state_config { clear_period_ms: 5000 } EOF
תיעוד נתיב
- מפעילים את האפליקציה ומכינים את הקטע שרוצים לעקוב אחריו.
כדי להפעיל את המעקב באפליקציה, צריך להפעיל שידור.
# set app package variable, e.g. com.google.samples.apps.nowinandroid.debug # can be found through `adb shell ps -ef` or `adb shell cmd package list packages` package=<your app process> # issue a broadcast to enable tracing adb shell am broadcast \ -a androidx.tracing.perfetto.action.ENABLE_TRACING \ $package/androidx.tracing.perfetto.TracingReceiver
מפעילים את פקודת ההקלטה שיצרתם קודם.
פתיחת המעקב
adb pull <location>
הנתיב מהמכשיר (המיקום שצוין בפקודת התיעוד).פותחים ב-Perfetto.
איך מתעדים נתוני מעקב באמצעות Jetpack Macrobenchmark
אפשר למדוד את הביצועים באמצעות Jetpack Macrobenchmark, שמספק מעקב אחר נתונים בתור תוצאות. כדי להפעיל מעקב אחר הרכב עם מדדי ביצועים מאקרו, צריך:
מוסיפים את יחסי התלות הנוספים האלה למודול הבדיקה Macrobenchmark:
implementation("androidx.tracing:tracing-perfetto:1.0.0") implementation("androidx.tracing:tracing-perfetto-binary:1.0.0")
הוספת ארגומנט האינסטרומנטציה
androidx.benchmark.fullTracing.enable=true
לפני הרצת נקודות ההשוואה. מידע נוסף על ארגומנטים של מכשור ב-Macrobenchmark זמין במאמר ארגומנטים של מכשור ב-Macrobenchmark.
משוב
נשמח לקבל ממך משוב על התכונה הזו, אם יש בה באגים כלשהם או כל בקשה שלך. אתם יכולים לשלוח לנו משוב דרך הכלי למעקב אחר בעיות.