נתוני המעקב הם לרוב מקור המידע הטוב ביותר כשבוחנים בפעם הראשונה או בעיה בביצועים. הם מאפשרים ליצור השערה לגבי הבעיה, איפה מתחילים לחפש.
ב-Android יש תמיכה בשתי רמות של מעקב: מעקב מערכת ומעקב שיטות.
מאחר שבמעקב המערכת מתבצע מעקב רק אחרי אזורים שסומנו במיוחד למעקב, העלויות הנלוות נמוכות והוא לא משפיע באופן משמעותי על ביצועי האפליקציה. מעקב אחר המערכת הוא דרך מצוינת לראות כמה זמן נדרש להריץ קטעים מסוימים בקוד.
שיטה למעקב אחרי כל בקשה להפעלת פונקציה באפליקציה. זה מאוד יקר ולכן היא משפיעה מאוד על ביצועי האפליקציה, אבל היא מספקת תמונה של מה שקורה, לאילו פונקציות קוראים ובאיזו תדירות קוראים להם.
כברירת מחדל, נתוני המעקב אחרי המערכת לא כוללים פונקציות מורכבות ספציפיות. הם זמינים בנתוני המעקב אחר שיטות.
אנחנו בודקים כרגע פונקציונליות חדשה למעקב אחר המערכת כדי להציג תוכן קומפוזבילי בתוך מעקבי המערכת. היא מספקת רמת קושי נמוכה של המערכת שיטת מעקב, עם רמות פירוט של מעקב ברמת ההרכב.
הגדרה למעקב אחר הרכבה
כדי לנסות את המעקב אחר הרכבת מחדש בפרויקט, צריך לעדכן לפחות לגרסאות הבאות:
- Android Studio פלמינגו
- ממשק משתמש של כתיבת הודעה: 1.3.0
- Compose Compiler: 1.3.0
גם במכשיר או במהדמה שבהם מריצים את המעקב צריכה להיות רמת API של 30 לפחות.
בנוסף, צריך להוסיף תלות חדשה ב-Compose Runtime Tracing:
implementation("androidx.compose.runtime:runtime-tracing:1.0.0-beta01")
בעזרת התלות הזאת, כשבודקים מעקב מערכת שכולל הרכבה מחדש, אפשר לראות את הפונקציות הקומפוזביליות באופן אוטומטי.
תיעוד עקבות המערכת
כדי ליצור מעקב מערכת ולראות את המעקב החדש אחרי יצירת קובץ מחדש בפעולה, פועלים לפי השלבים הבאים:
פותחים את כלי הפרופילים:
לוחצים על ציר הזמן של המעבד.
מנווטים באפליקציה אל ממשק המשתמש שרוצים לעקוב אחריו, ובוחרים באפשרות System Trace ואז באפשרות Record.
משתמשים באפליקציה כדי לגרום להרכבת מחדש ולהפסיק את ההקלטה. אחרי שהמעקב יתבצע ויופיע, תוכלו לראות את הרכיבים הניתנים לקישור ב-trace של ה-recomposition. אפשר להשתמש במקלדת ובעכבר כדי להגדיל את התצוגה ולזוז בתוכה. אם אתם לא יודעים איך לנווט ב-trace, תוכלו לעיין במאמר תיעוד טרייסים.
לחיצה כפולה על רכיב מורכב בתרשים תעביר אתכם לקוד המקור שלו.
אפשר גם לראות תכנים קומפוזביליים ב-Fflame Chart עם הקובץ והשורה מספר:
נקודות שצריך לשים לב אליהן:
תקורה של גודל APK
הצלחנו לצמצם את התקורה של התכונה ככל האפשר, אבל יש עלייה בגודל ה-APK של אפליקציות Compose שמגיעה משרשראות מעקב שמוטמעות ב-APK על ידי המהדר של Compose. ההגדלה הזו יכולה להיות קטן יחסית אם האפליקציה לא משתמשת הרבה בכתיבה או גדולה עבור 'כתיבה מהירה'. באפליקציות. בנוסף, מחרוזות המעקב האלה לא מעורפלות, כדי שיוכלו להופיע בכלי המעקב, כפי שצוין למעלה. המהדר לכתיבה מחדיר אותם לכל Google Apps, החל מגרסה 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();
}
הפונקציות האלה עשויות להשתנות בעתיד, אבל השינויים יצוינו נתוני הגרסה של 'כתיבת נתוני גרסה'.
שימו לב שאם תשאירו אותם בחשבון, אבל תצברו עלויות מסוימות של גודל ה-APK, היא מבטיחה ה-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 ארגומנטים של אינסטרומנטציה.
משוב
נשמח לקבל ממך משוב על התכונה הזו, אם מצאת באג כלשהו בתכונה הזו, ועל כל הבקשות שלכם. אפשר לשלוח לנו משוב דרך הבעיה מכשיר מעקב.