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

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

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

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

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

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

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

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

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

  • Android Studio Flamingo
  • ממשק משתמש של כתיבת הודעה: 1.3.0
  • Compose Compiler: ‏ 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 – ציר הזמן של ה-CPU
  3. מנווטים באפליקציה אל ממשק המשתמש שרוצים לעקוב אחריו, ובוחרים באפשרות System Trace ואז באפשרות Record.

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

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

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

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

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

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

יתרת מקום ב-APK

ניסינו לצמצם ככל האפשר את התקורה של התכונה, אבל חלה עלייה בגודל ה-APK באפליקציות לכתיבה שהגיעו ממחרוזות מעקב שהוטמעו ב-APK על ידי מהדר (compiler) לכתיבה. העלייה בגודל יכולה להיות קטנה יחסית אם האפליקציה לא משתמשת הרבה ב-Compose, או גדולה יותר באפליקציות שמשתמשות ב-Compose במלואו. בנוסף, מחרוזות המעקב האלה לא מעורפלות (obfuscation), כך שהן יכולות להופיע בכלי מעקב, כמו קודם. המהדר של Compose מזין אותם לכל האפליקציות, החל מגרסה 1.3.0.

אפשר להסיר את מחרוזות המעקב ב-build של סביבת הייצור על ידי הוספת כלל ההגנה הבא:

-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.

משוב

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