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

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

ב-Android יש שתי רמות של מעקב שנתמכות: מעקב במערכת ומעקב אחר שיטות.

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

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

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

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

מוגדר למעקב אחר הרכב

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

  • Android Studio פלמינגו
  • ממשק משתמש של כתיבת הודעה: 1.3.0
  • כתיבת מהדר: 1.3.0

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

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

implementation("androidx.compose.runtime:runtime-tracing:1.0.0-beta01")

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

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

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

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

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

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

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

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

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

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

    תרשים להבה
    איור 6. תרשים להבות

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

יתרת מקום ב-APK

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

  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.

משוב

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