יצירת פרופיל Microbenchmark

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

כדי לבחור את הגדרת כלי הניתוח, מוסיפים את הארגומנט של מריץ האינסטרומנטציה androidx.benchmark.profiling.mode עם אחד מהארגומנטים MethodTracing (ברירת המחדל), StackSampling או None, כמו שמוצג בקטע הקוד הבא.

מידע נוסף על האפשרויות זמין במאמר תיעוד שיטות Java/Kotlin. ‫MethodTracing הוא המקבילה למעקב, ו-StackSampling הוא המקבילה לדגימה, כפי שמוגדר במסמך הזה.

מגניב

android {
    defaultConfig {
        // must be one of: 'None', 'StackSampling', or 'MethodTracing'
        testInstrumentationRunnerArguments["androidx.benchmark.profiling.mode"]= 'StackSampling'
    }
}

Kotlin

android {
    defaultConfig {
        // must be one of: 'None', 'StackSampling', or 'MethodTracing'
        testInstrumentationRunnerArguments["androidx.benchmark.profiling.mode"] = "StackSampling"
    }
}

כשמבצעים פרופיילינג של נקודת השוואה, קובץ פלט מסוג .trace מועתק למארח בספרייה לצד תוצאות ה-JSON. כדי לבדוק את תוצאות הניתוח ב-Android Studio, בוחרים בקישור Method Trace או Stack Sampling Trace בתוצאות של בדיקת המיקרו-ביצועים.

MethodTracing

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

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

תיעוד method מופעל כברירת מחדל.

הערה: בחלק מהגרסאות של Android OS ו-ART, תיעוד method מושבת כברירת מחדל. במקרים כאלה, Android Studio מציג אזהרה.

StackSampling

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

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

ב-Android מגרסה 10 (API 29) ואילך, דגימת המחסנית משתמשת ב-Simpleperf כדי לדגום מחסניות קריאה של אפליקציות, כולל קוד C++‎. ב-Android 9 (API 28) ומטה, הוא משתמש ב-Debug.startMethodTracingSampling כדי לתעד דגימות של מחסנית.

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

  • androidx.benchmark.profiling.sampleFrequency

    • מספר מקבצי הדגימות שצריך לתעד בכל שנייה.
    • סוג הארגומנט: מספר שלם
    • ברירת המחדל היא 1,000 דגימות לשנייה.
  • androidx.benchmark.profiling.sampleDurationSeconds

    • משך הזמן של הרצת הערכת הביצועים.
    • סוג הארגומנט: מספר שלם
    • ברירת המחדל היא 5 שניות.
  • androidx.benchmark.profiling.skipWhenDurationRisksAnr

    • דילוג על תיעוד method כשהוא עלול לגרום לשגיאת ANR. כדאי להשאיר את האפשרות הזו מופעלת להרצות CI, כי שגיאות ANR יכולות לגרום לבעיות במהלך הרצות CI ארוכות.
    • סוג הארגומנט: Boolean (בוליאני)
    • ברירת המחדל היא true

ללא

הארגומנט הזה לא מתעד קובץ פרופיילינג. המידע על התזמון וההקצאות עדיין נמדד.