מעקב אחר יצירה מוזיקלית

מעקבים הם בדרך כלל מקור המידע הכי טוב כשבודקים לראשונה בעיה בביצועים. הם מאפשרים לכם להעלות השערה לגבי הבעיה ולהבין איפה להתחיל לחפש.

ב-Android יש תמיכה בשתי רמות של מעקב: תיעוד עקבות המערכת ותיעוד method.

מכיוון שתיעוד עקבות המערכת עוקב רק אחרי אזורים שמסומנים במיוחד למעקב, הוא לא דורש הרבה משאבים ולא משפיע באופן משמעותי על ביצועי האפליקציה. תיעוד עקבות המערכת הוא כלי מצוין לבדיקת משך הזמן שלוקח להריץ חלקים מסוימים בקוד.

תיעוד method עוקב אחרי כל בקשה להפעלת פונקציה באפליקציה. זהו תהליך יקר מאוד, ולכן הוא משפיע מאוד על ביצועי האפליקציה, אבל הוא נותן תמונה כוללת של מה שקורה, אילו פונקציות נקראות ובאיזו תדירות הן נקראות.

כברירת מחדל, עקבות המערכת לא כוללות פונקציות קומפוזביליות נפרדות. הם זמינים בתיעודי method.

מעקב אחר קומפוזיציה מציג פונקציות קומפוזביליות בתוך עקבות המערכת. התכונה הזו מאפשרת לכם ליהנות מהיתרונות של תיעוד עקבות המערכת (הפרעה מינימלית) ושל תיעוד method (רמת פירוט גבוהה בקומפוזיציה).

הגדרת מעקב אחר קומפוזיציה

כדי לנסות את מעקב ה-recomposition בפרויקט, צריך לעדכן לפחות לגרסאות הבאות:

  • Android Studio Flamingo
  • ‫Compose UI: ‏ 1.3.0
  • ‫Compose Compiler: ‏ 1.3.0

המכשיר או האמולטור שבו אתם מריצים את המעקב חייב להיות ברמת API‏ 30 לפחות.

בנוסף, צריך להוסיף תלות חדשה ב-Compose Runtime Tracing:

implementation("androidx.compose.runtime:runtime-tracing:1.12.1")

אם אתם משתמשים ב-Compose BOM, אתם לא צריכים לציין את הגרסה:

val composeBom = platform("androidx.compose:compose-bom:2026.09.00")
implementation(composeBom)
// ...

// dependency without a version
implementation("androidx.compose.runtime:runtime-tracing")

בעזרת התלות הזו, כשמבצעים מעקב מערכת שכולל הרכבה מחדש, אפשר לראות את הפונקציות הקומפוזביליות באופן אוטומטי.

תיעוד עקבות המערכת

כדי לתעד את עקבות המערכת ולראות את המעקב החדש אחרי הרכבה מחדש, פועלים לפי השלבים הבאים:

  1. פותחים את כלי הניתוח:

    ‫Android Studio – התחלת יצירת פרופיל
    איור 2. ‫Android Studio – התחלת יצירת פרופיל
  2. לוחצים על ציר הזמן של המעבד (CPU).

    ‫Android Studio Profiler – ציר הזמן של המעבד (CPU)
    איור 3. ‫Android Studio Profiler – ציר הזמן של המעבד (CPU)
  3. עוברים באפליקציה לממשק המשתמש שרוצים לתעד את העקבות שלו, ואז בוחרים באפשרות System Trace (עקבות המערכת) ולוחצים על Record (הקלטה).

    אפשרויות מעקב – עקבות המערכת
    איור 4. אפשרויות מעקב – עקבות המערכת
  4. משתמשים באפליקציה כדי לגרום ליצירה מחדש ולהפסיק את ההקלטה. אחרי שהמעקב עבר עיבוד ומופיע, אתם אמורים לראות את ה-composables במעקב אחרי ה-recomposition. אתם יכולים להשתמש במקלדת ובעכבר כדי להגדיל, להקטין ולהזיז את התצוגה של המעקב. אם אתם לא יודעים איך לנווט במעקב, קראו את המאמר תיעוד מעקבים.

    דוגמה להמחשה חזותית של עקבות המערכת ב-Android Studio.
    איור 5. עקבות המערכת

    לחיצה כפולה על רכיב Composable בתרשים תעביר אתכם לקוד המקור שלו.

  5. אפשר גם לראות רכיבים קומפוזביליים בתרשים הלהבה, יחד עם הקובץ ומספר השורה:

    דוגמה לתרשים להבה שמציג פונקציות קומפוזביליות.
    איור 6. תרשים להבות (flame chart)

נקודות שצריך לשים לב אליהן

כשמשתמשים במעקב אחר קומפוזיציה, חשוב להביא בחשבון את האזהרות הבאות לגבי גודל ה-APK והביצועים.

תקורה של גודל ה-APK

למרות שניסינו לצמצם כמה שיותר את התקורה של התכונה, יש עלייה בגודל ה-APK של אפליקציות Compose שמגיעות ממחרוזות מעקב שמוטמעות ב-APK על ידי המהדר של Compose. העלייה בגודל יכולה להיות קטנה יחסית אם האפליקציה לא משתמשת הרבה ב-Compose, או גדולה יותר באפליקציות שמבוססות רק על 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")

פקודה ליצירת רשומה

  1. יוצרים פקודת הקלטה באמצעות Perfetto.
  2. מוסיפים באופן ידני את הקטע של מקור הנתונים 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

תיעוד מעקב

  1. מפעילים את האפליקציה ומכינים את הקטע שרוצים לעקוב אחריו.
  2. מפעילים את המעקב באפליקציה באמצעות שידור.

    # 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
    
  3. מפעילים את פקודת ההקלטה שיצרתם קודם.

פתיחת המעקב

  1. adb pull <location> את המעקב מהמכשיר (המיקום שצוין בפקודת ההקלטה).

  2. פותחים את Perfetto.

איך מתעדים מעקב באמצעות Jetpack Macrobenchmark

אתם יכולים למדוד את הביצועים באמצעות Jetpack Macrobenchmark, שמספק מעקבים כתוצאות. כדי להפעיל מעקב אחר קומפוזיציה באמצעות macrobenchmarks, צריך:

  1. מוסיפים את יחסי התלות הבאים למודול הבדיקה Macrobenchmark:

    implementation("androidx.tracing:tracing-perfetto:1.0.0")
    implementation("androidx.tracing:tracing-perfetto-binary:1.0.0")
    
  2. לפני שמריצים את הבדיקות, מוסיפים את ארגומנט האינסטרומנטציה androidx.benchmark.fullTracing.enable=true. מידע נוסף על ארגומנטים של כלי Macrobenchmark זמין במאמר בנושא ארגומנטים של כלי Macrobenchmark.

משוב

נשמח לקבל משוב על התכונה הזו, על באגים שנתקלתם בהם ועל בקשות שיש לכם. אתם יכולים לשלוח לנו משוב באמצעות הכלי למעקב אחר בעיות.