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

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

ב-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.7.5")

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

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

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

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

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

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

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

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

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

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

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

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

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

    תרשים להבות (flame chart)
    איור 6. תרשים להבות (flame chart)

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

יתרת מקום ב-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 בהתאם למאמר אפליקציות שניתן ליצור להן פרופיל.

איך מתעדים מעקב (trace) מהמסוף

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

  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.

משוב

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