נתוני מעקב הם לרוב מקור המידע הטוב ביותר כשבוחנים בפעם הראשונה או בעיה בביצועים. הם מאפשרים ליצור השערה לגבי הבעיה, איפה מתחילים לחפש.
קיימות שתי רמות של מעקב נתמכות ב-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).
עוברים באפליקציה לממשק המשתמש שרוצים לעקוב אחריו ובוחרים באפשרות מערכת נתוני מעקב והקלטה
משתמשים באפליקציה כדי לגרום להרכבת מחדש ולהפסיק את ההקלטה. אחרי שהמעקב והופיע, עכשיו תוכלו לראות את התכנים הקומפוזביליים את מעקב היצירה מחדש. אפשר להשתמש במקלדת ובעכבר כדי לשנות את מרחק התצוגה ולהזיז אותה מסביב למעקב, אם לא מכירים את תכונת הניווט במעקב, אפשר לעיין מסמכי תיעוד של תיעוד מעקב.
לחיצה כפולה על תוכן קומפוזבילי בתרשים תעביר אתכם לקוד המקור שלו.
אפשר גם לראות תכנים קומפוזביליים ב-Fflame Chart עם הקובץ והשורה מספר:
נקודות שצריך לשים לב אליהן:
תקורה של גודל APK
ניסינו לצמצם ככל האפשר את התקורה של התכונה, יש עלייה בגודל ה-APK באפליקציות פיתוח שנובעת ממחרוזות מעקב שמוטמע ב-APK על ידי המהדר לכתיבה. ההגדלה הזו יכולה להיות קטן יחסית אם האפליקציה לא כוללת הרבה 'כתיבה' או 'גדולה יותר' לכתיבה מלאה באפליקציות. בנוסף, מחרוזות המעקב האלה לא מעורפלות, כך שהן יכולות להופיע בכלי המעקב, כמו שראינו קודם. המהדר לכתיבה מחדיר אותם לכל Google Apps, החל מגרסה 1.3.0.
אפשר להסיר את מחרוזות המעקב ב-build של סביבת הייצור על ידי הוספת כלל ההגנה הבא:
-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 ארגומנטים של אינסטרומנטציה.
משוב
נשמח לקבל ממך משוב על התכונה הזו, אם מצאת באג כלשהו בתכונה הזו, ועל כל הבקשות שלכם. אפשר לשלוח לנו משוב דרך הבעיה מכשיר מעקב.