בדרך כלל, עקבות הם המקור הכי טוב למידע כשבודקים בעיה בביצועים. הם מאפשרים לכם לגבש השערה לגבי הבעיה ולגבי המקום שבו כדאי להתחיל לחפש.
יש שתי רמות של מעקב שנתמכות ב-Android: מעקב מערכת ומעקב שיטות.
מכיוון שמעקב המערכת עוקב רק אחרי אזורים שמסומנים במיוחד למעקב, העומס שלו נמוך והוא לא משפיע באופן משמעותי על הביצועים של האפליקציה. מעקב אחר המערכת הוא דרך מצוינת לראות כמה זמן לוקח להפעיל קטעים מסוימים בקוד.
מעקב אחר שיטות מאפשר לעקוב אחרי כל קריאה לפונקציה באפליקציה. זהו תהליך יקר מאוד, ולכן הוא משפיע מאוד על הביצועים של האפליקציה, אבל הוא מספק תמונה מלאה של מה שקורה, אילו פונקציות נקראות וכמה פעמים הן נקראות.
כברירת מחדל, מעקבי מערכת לא כוללים פונקציות נפרדות שאפשר להרכיב. הם זמינים במעקב אחר שיטות.
מעקב אחר קומפוזיציה מציג פונקציות הניתנות להגדרה בתוך מעקבי מערכת. התכונה מאפשרת לכם ליהנות ממעקב מערכת לא פולשני, עם רמות פירוט של מעקב שיטות בהרכב.
הגדרה של מעקב אחר יצירה מוזיקלית
כדי לנסות את מעקב ההרכבה מחדש בפרויקט, צריך לעדכן לגרסאות הבאות לפחות:
- Android Studio Flamingo
- ממשק המשתמש של Compose: 1.3.0
- Compose Compiler: 1.3.0
המכשיר או האמולטור שבהם מריצים את המעקב צריכים להיות ברמת API 30 לפחות.
בנוסף, צריך להוסיף תלות חדשה ב-Compose Runtime Tracing:
implementation("androidx.compose.runtime:runtime-tracing:1.8.1")
אם אתם משתמשים ב-Compose BOM, אתם לא צריכים לציין את הגרסה:
val composeBom = platform("androidx.compose:compose-bom:2025.05.00")
implementation(composeBom)
// ...
// dependency without a version
implementation("androidx.compose.runtime:runtime-tracing")
בגלל התלות הזו, כשמבצעים מעקב אחר המערכת שכולל את ההרכבה מחדש, אפשר לראות את הפונקציות שניתנות להרכבה באופן אוטומטי.
תיעוד עקבות המערכת
כדי לבצע מעקב אחר המערכת ולראות את המעקב החדש של ההרכבה מחדש בפעולה, מבצעים את השלבים הבאים:
פותחים את הכלי ליצירת פרופילים:
איור 2. Android Studio – התחלת יצירת פרופיל לוחצים על ציר הזמן של יחידת העיבוד המרכזית (CPU).
איור 3. Android Studio Profiler – ציר זמן של CPU עוברים באפליקציה לממשק המשתמש שרוצים לעקוב אחריו, ואז בוחרים באפשרות System Trace (מעקב אחר המערכת) ואז באפשרות Record (הקלטה).
איור 4. אפשרויות מעקב – תיעוד עקבות המערכת משתמשים באפליקציה כדי לבצע שינוי בפריסה ולהפסיק את ההקלטה. אחרי שהמעקב יעבור עיבוד ויופיע, תוכלו לראות את הרכיבים הניתנים להרכבה במעקב ההרכבה מחדש. אפשר להשתמש במקלדת ובעכבר כדי להגדיל את התצוגה של העקבות ולהזיז אותה. אם אתם לא יודעים איך לנווט בעקבות, תוכלו לעיין במסמכי התיעוד בנושא תיעוד עקבות.
איור 5. תיעוד עקבות המערכת אם לוחצים לחיצה כפולה על רכיב שאפשר להרכיב בתרשים, עוברים לקוד המקור שלו.
אפשר גם לראות את הפונקציות הניתנות להרכבה בתרשים הלהבה, לצד הקובץ ומספר השורה:
איור 6. תרשים להבות
נקודות שחשוב לדעת
תקורה של גודל ה-APK
השתדלנו לצמצם ככל האפשר את התקורה של התכונה, אבל גודל ה-APK של אפליקציות Compose גדל בגלל מחרוזות המעקב שמוטמעות ב-APK על ידי קומפיילר Compose. הגידול בגודל יכול להיות קטן יחסית אם האפליקציה לא משתמשת הרבה ב-Compose, או גדול יותר אם מדובר באפליקציות מלאות של Compose. בנוסף, מחרוזות המעקב האלה לא מוצפנות כדי שיוכלו להופיע בכלי מעקב, כמו שמוצג למעלה. הקומפיילר של Compose מחדיר אותן לכל האפליקציות, החל מגרסה 1.3.0.
אפשר להסיר את מחרוזות המעקב בגרסת הייצור על ידי הוספת כלל 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
מפעילים את פקודת ההקלטה שיצרתם קודם.
פתיחת ה-trace
adb pull <location>
trace מהמכשיר (המיקום מצוין בפקודת הרשומה).פתיחה ב-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 לשימוש בכלי Instrumentation.
משוב
נשמח לקבל ממך משוב על התכונה הזו, על באגים שמצאת בה ועל בקשות שיש לך. אתם יכולים לשלוח לנו משוב באמצעות הכלי למעקב אחר בעיות.