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

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

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

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

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

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

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

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

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

  • Android Studio פלמינגו
  • ממשק משתמש של כתיבת הודעה: 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. לוחצים על ציר הזמן של המעבד.

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

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

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

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

  5. אפשר גם לראות תכנים קומפוזביליים ב-Fflame Chart עם הקובץ והשורה מספר:

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

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

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

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

}

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

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

פתיחת המעקב

  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 ארגומנטים של אינסטרומנטציה.

משוב

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