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

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

יש שתי רמות של מעקב נתמכות ב-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.9.3")

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

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

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

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

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

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

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

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

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

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

    תיעוד עקבות המערכת
    איור 5. תיעוד עקבות המערכת

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

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

    תרשים להבות (flame chart)
    איור 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 שנוצר ממנו פרופיל הוא אותו 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. מפעילים את פקודת ההקלטה שיצרתם קודם.

פתיחת ה-trace

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

  2. פתיחה ב-Perfetto.

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

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

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

משוב

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