יצירת יומני מעקב על ידי יצירת אינסטרומנטציה של האפליקציה

כדי ליצור מעקב שיטת מעקב אחר ביצוע האפליקציה, אפשר להגדיר כלים לאפליקציה באמצעות Debug בכיתה. הגדרת אינסטרומנטציה לאפליקציה באופן הזה נותנת לכם שליטה רבה יותר על מתי בדיוק המכשיר מתחיל ומפסיק לתעד את פרטי המעקב. המכשיר גם שומר את יומני המעקב באמצעות השמות שציינתם, כדי שתוכלו לזהות בקלות כל יומן מאוחר יותר. אפשר להשתמש ב-Android Studio כדי להציג כל יומן מעקב הכלי לניתוח ביצועי המעבד (CPU).

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

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

ניהול כלים באפליקציה

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

בשיחה, תוכלו לציין את השם של קובץ .trace, והמערכת שומרת אותו בקובץ ספציפי לחבילה שמיועדת לנתוני אפליקציה קבועים במכשיר היעד – את אותה ספרייה שמוחזרת getExternalFilesDir() והוא נמצא בספרייה ~/sdcard/ ברוב המכשירים. הקובץ הזה מכיל את נתוני המעקב של השיטה הבינארית וטבלת מיפוי עם שרשור ושמות של שיטות. כדי להפסיק את המעקב, צריך להתקשר stopMethodTracing()

הדוגמה הבאה מתחילה ומפסיקה לתעד יומן מעקב עם השם sample.trace:

Kotlin

// Starts recording a trace log with the name you provide. For example, the
// following code tells the system to start recording a .trace file to the
// device with the name "sample.trace".
Debug.startMethodTracing("sample")

// The system begins buffering the generated trace data, until your
// application calls <code><a href="/reference/android/os/Debug.html#stopMethodTracing()">stopMethodTracing()</a></code>, at which time it writes
// the buffered data to the output file.
Debug.stopMethodTracing()

Java

// Starts recording a trace log with the name you provide. For example, the
// following code tells the system to start recording a .trace file to the
// device with the name "sample.trace".
Debug.startMethodTracing("sample");
...
// The system begins buffering the generated trace data, until your
// application calls <code><a href="/reference/android/os/Debug.html#stopMethodTracing()">stopMethodTracing()</a></code>, at which time it writes
// the buffered data to the output file.
Debug.stopMethodTracing();

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

אם המערכת תגיע לגודל המקסימלי של מאגר הנתונים הזמני לפני השיחה stopMethodTracing(), המערכת מפסיקה את המעקב ושולחת התראה למסוף. השיטות שמתחילות ומפסיקים את המעקב פועלות בכל התהליך של האפליקציה. ש אפשר להתקשר startMethodTracing() של הפעילות onCreate(Bundle) אמצעי התשלום, וקוראים לפונקציה stopMethodTracing() ב-onDestroy() של הפעילות הזו .

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

כשפורסים למכשירים שמותקנת בהם גרסת Android 5.0 (API ברמה 21) ואילך, אפשר להשתמש בפרופיל מבוסס דגימה ליצירת פרופיל עם השפעה נמוכה יותר על הביצועים של זמן הריצה. שפת תרגום הפעלת פרופיילינג לדוגמה, התקשרות startMethodTracingSampling() (במקום לקרוא ל-startMethodTracing()) עם דגימה מוגדרת למרווח זמן. המערכת אוספת דגימות מעת לעת עד שהאפליקציה שולחת קריאה stopMethodTracing()

שמירה של מספר יומנים

אם האפליקציה מתחילה ומפסיקה מעקב שיטה כמה פעמים בלי לציין שם חדש ליומן המעקב, המכשיר מחליף את יומן המעקב הישן חדש – כלומר, הוא שומר רק את יומן המעקב העדכני ביותר. כדי לשמור כמה פריטים מעקב אחר יומנים במכשיר שלך, שינוי שם באופן דינמי של יומן המעקב בכל פעם שהאפליקציה קוראת אל startMethodTracing(). הדוגמה הבאה משתמשת באופרטור SimpleDateFormat class כדי לכלול את התאריך והשעה הנוכחיים כשמעניקים שמות לכל יומן מעקב:

Kotlin

// Uses the <code><a href="/reference/java/text/SimpleDateFormat.html">SimpleDateFormat</a></code> class to create a String with
// the current date and time.
val dateFormat: DateFormat = SimpleDateFormat("dd_MM_yyyy_hh_mm_ss", Locale.getDefault())
val logDate: String = dateFormat.format(Date())
// Applies the date and time to the name of the trace log.
Debug.startMethodTracing("sample-$logDate")

Java

// Uses the <code><a href="/reference/java/text/SimpleDateFormat.html">SimpleDateFormat</a></code> class to create a String with
// the current date and time.
SimpleDateFormat dateFormat =
        new SimpleDateFormat("dd_MM_yyyy_hh_mm_ss", Locale.getDefault());
String logDate = dateFormat.format(new Date());
// Applies the date and time to the name of the trace log.
Debug.startMethodTracing(
        "sample-" + logDate);

גישה ליומני המעקב במכשיר

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

  • משתמשים בסייר המכשירים. כדי לפתוח את סייר המכשירים, לוחצים על תצוגה > Windows בכלי > Device Explorer (או לוחצים על סייר המכשירים בסרגל שבחלון של הכלי). כפי שמוצג באיור 1 אפשר למצוא את הקבצים של .trace על ידי מעבר אל ספרייה ספציפית לחבילה.

    איור 1. מאתרים את יומני המעקב באמצעות סייר המכשירים.

  • מעתיקים את הקובץ למכונה המקומית באמצעות הפקודה adb pull. הפקודה שבהמשך מעתיקה יומן מעקב בשם sample.trace מהמכשיר אל את הספרייה ~/Documents/trace-logs/ במכונה המקומית.

    adb pull path-on-device/sample.trace ~/Documents/trace-logs/

לאחר מכן אפשר לייבא את קובץ המעקב עם הכלי לניתוח ביצועי ה-CPU.