עקבו אחר מעברי חלונות באמצעות Winscope

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

שירותי המערכת שמייצרים עקבות שניתן לטעון לתוך Winscope הם כדלקמן:

  • SurfaceFlinger
  • WindowsManager
  • WMShell
  • IME
  • מַשׁגֵר

הפעל את מציג המעקב של Winscope

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

בצע את השלבים הבאים כדי להגדיר את המחשב שלך להפעלת ה-Winscope tracer:

  1. הורד את המקור לאנדרואיד .
  2. נווט אל תיקיית Winscope:

    cd development/tools/winscope
    
  3. התקן תלות באמצעות:

    npm install
    

    כדי לראות רשימה של פקודות זמינות, הרץ: npm run

  4. בנה את כל יעדי הייצור והבדיקה באמצעות:

    npm run build:prod
    
  5. הפעל את Winscope באמצעות:

    npm run start
    

לכידת עקבות

אתה יכול ללכוד עקבות במכשיר , דרך Winscope , או באמצעות פקודות Android Debug Bridge (adb) .

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

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

במכשיר האנדרואיד שלך:

  1. אפשר אפשרויות מפתחים .
  2. בחר מעקב אחר מערכת תחת אפשרויות מפתחים .
  3. הפעל איסוף עקבות Winscope .
  4. תחת שונות :
    1. הפעל צרף הקלטות לדוחות באגים .
    2. הפעל את אריח הצג הגדרות מהירות .
  5. נווט למקום שבו אתה צריך לשחזר את הבאג.
  6. כדי להתחיל את הלכידה, פתח את ההגדרות המהירות ובחר הקלט מעקב :

    quick_setting_winscope

    איור 1. תפריט הגדרה מהירה עם Record Trace.

  7. בצע רק את השלבים הדרושים כדי לשחזר את הבאג.

  8. כדי לעצור את הלכידה, פתח את ההגדרות המהירות ובחר הפסק מעקב .

  9. שתף את היומן שנלכד באמצעות אחת מהאפשרויות המפורטות, כגון Gmail, Drive או BetterBug.

לכידת עקבות דרך Winscope

אתה יכול ללכוד עקבות באמצעות Winscope לפיתוח מקומי וניפוי באגים. Winscope משתמש ב-adb , התומך בחיבור התקן דרך USB או Wi-Fi.

על Winscope:

  1. במסך איסוף עקבות , לחץ על ADB Proxy :

    capture_traces_winscope

    איור 2. לכידת עקבות ב-Winscope.

  2. הפעל את פרוקסי Winscope ADB Connect כדי ללכוד עקבות ישירות מהדפדפן שלך.

  3. הפעל את הפקודה:

    python3 $ANDROID_BUILD_TOP/development/tools/winscope/src/adb/winscope_proxy.py
    
  4. כדי להתחיל את הלכידה, במסך איסוף עקבות בחר את המטרות והתצורה ולחץ על התחל מעקב :

    collect_traces_winscope

    איור 3. אסוף עקבות על Winscope.

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

    end_trace_winscope

    איור 4. סיום מעקב על Winscope.

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

צור את ה-state dump באמצעות Winscope

כדי לקחת מצב dump באמצעות Winscope, במסך Collect Traces בחר בכרטיסייה Dump ולאחר מכן לחץ על Dump state :

dump-winscope

איור 5. מצב dump על Winscope.

לכידת עקבות באמצעות פקודות adb

הפעל את adb root לפני הפעלת פקודות adb shell עבור כל אחת מהעקבות הבאות. בסוף המעקב, קובצי המעקב זמינים ב- /data/misc/wmtrace . כדי להעתיק קובץ או ספרייה וספריות המשנה שלו מהתקן, ראה העתקת קבצים למכשיר וממנו . ראה adb למידע נוסף.

WindowManager עקבות

כדי ללכוד עקבות של WindowManager:

  • אפשר מעקב:

    adb shell wm tracing start
    
  • השבת מעקב:

    adb shell wm tracing stop
    
  • שמור נתוני רישום בקובץ בזמן הפעלת לכידת עקבות:

    adb shell wm tracing save-for-bugreport
    
  • יומן מעקב פעם אחת לכל מסגרת:

    adb shell wm tracing frame
    
  • רישום כל עסקה:

    adb shell wm tracing transaction
    
  • הגדר את גודל היומן המרבי (ב-KB):

    adb shell wm tracing size
    
  • מצב מעקב הדפסה:

    adb shell wm tracing status
    
  • הגדר את רמת היומן critical (רק חלונות גלויים עם מידע מופחת), trim (כל החלונות עם מידע מופחת), או all (כל החלונות והמידע):

    adb shell wm tracing level
    

פרוטולוג

הפקודות הבאות משמשות עבור מערכת ProtoLog .

בתהליך system_server :

  • התחל פרוטולוג:

    adb shell cmd window logging start
    
  • עצור פרוטולוג:

    adb shell cmd window logging stop
    
  • אפשר ProtoLog עבור קבוצות יומן נתונות:

    adb shell cmd window logging enable [group...]
    
  • השבת את ProtoLog עבור קבוצות יומן נתונות:

    adb shell cmd window logging disable [group...]
    
  • אפשר רישום Logcat עבור קבוצות יומן נתונות:

    adb shell cmd window logging enable-text [group...]
    
  • השבת רישום Logcat עבור קבוצות יומן נתונות:

    adb shell cmd window logging disable-text [group...]
    

ב-WMShell:

  • התחל פרוטולוג:

    adb shell dumpsys activity service SystemUIService WMShell
    

מעקב אחר מעבר

הפקודות הבאות משמשות למעקב אחר מעבר:

בתהליך system_server :

  • התחל מעקב:

    adb shell cmd window shell tracing start
    
  • עצור מעקב:

    adb shell cmd window shell tracing stop
    
  • התחל מעקב ב-WMShell:

    adb shell dumpsys activity service SystemUIService WMShell transitions tracing start
    
  • עצור מעקב ב-WMShell:

    adb shell dumpsys activity service SystemUIService WMShell transitions tracing stop
    

עורך שיטות קלט

הפקודות הבאות משמשות למעקב אחר שיטת קלט (IME):

  • התחל מעקב IME עבור לקוחות שיטת קלט (IM), שירות שיטת קלט (IMS) ושירות ניהול שיטות קלט (IMMS):

    adb shell ime tracing start
    
  • התחל לעקוב אחר לקוחות IME, IMS ו-IMMS:

    adb shell ime tracing stop
    

שכבות SurfaceFlinger

מעקב אחר שכבת SurfaceFlinger משתמש ב-Perfetto trace ללכידה. ראה מעקב אחר תצורה למידע על תצורה.

ראה את הדוגמה הבאה של תצורה עבור מעקב אחר שכבות SurfaceFlinger:

unique_session_name: "surfaceflinger_layers_active"
buffers: {
    size_kb: 63488
    fill_policy: RING_BUFFER
}
data_sources: {
    config {
        name: "android.surfaceflinger.layers"
        surfaceflinger_layers_config: {
            mode: MODE_ACTIVE
            trace_flags: TRACE_FLAG_INPUT
            trace_flags: TRACE_FLAG_COMPOSITION
            trace_flags: TRACE_FLAG_HWC
            trace_flags: TRACE_FLAG_BUFFERS
            trace_flags: TRACE_FLAG_VIRTUAL_DISPLAYS
        }
    }
}

ראה את הפקודה הבאה לדוגמה ליצירת מעקב עבור שכבות SurfaceFlinger:

adb shell -t perfetto \
    -c - --txt \
    -o /data/misc/perfetto-traces/trace \

עסקאות SurfaceFlinger

מעקב אחר עסקאות SurfaceFlinger משתמש ב-Perfetto Trace לצורך לכידה. ראה מעקב אחר תצורה למידע על תצורה.

ראה את הדוגמה הבאה של תצורת Perfetto עבור מעקב פעיל SurfaceFlinger:

unique_session_name: "surfaceflinger_transactions_active"
buffers: {
    size_kb: 1024
    fill_policy: RING_BUFFER
}
data_sources: {
    config {
        name: "android.surfaceflinger.transactions"
        surfaceflinger_transactions_config: {
            mode: MODE_ACTIVE
        }
    }
}
write_into_file: true
file_write_period_ms: 100

ראה את הדוגמה הבאה של תצורת Perfetto עבור מעקב רציף של SurfaceFlinger:

unique_session_name: "surfaceflinger_transactions_continuous"
buffers: {
    size_kb: 1024
    fill_policy: RING_BUFFER
}
data_sources: {
    config {
        name: "android.surfaceflinger.transactions"
        surfaceflinger_transactions_config: {
            mode: MODE_CONTINUOUS
        }
    }
}

ראה את הפקודה הבאה לדוגמה ליצירת מעקב עבור עסקאות SurfaceFlinger:

    adb shell perfetto \
    -c - --txt \
    -o /data/misc/perfetto-traces/trace \

צור מצב dump באמצעות adb

Winscope קורא תמונת מצב של WindowManager ו-SurfaceFlinger מדיווחי באגים. דוחות הבאגים מאחסנים את המצבים כקבצי פרוטו נפרדים בתוך תיקיית proto . כדי ליצור את ה-state dumps באמצעות adb, הפעל את הפקודות הבאות.

עבור WindowsManager:

adb exec-out dumpsys window --proto > window_dump.winscope

עבור SurfaceFlinger:

adb exec-out dumpsys SurfaceFlinger --proto > sf_dump.winscope

נתח עקבות

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

השתמש ב- Winscope

לאחר שתפסת עקבות , נתח את העקבות ב-Winscope:

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

    upload_traces_winscope

    איור 6. העלה עקבות ב-Winscope.

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

    view_traces_winscope

    איור 7. הצג עקבות על Winscope.

    השתמש בממשק המשתמש בחלונית העליונה ביותר של החלון כדי לשנות את השםערוך שם והורד את המעקב שהעליתdownload_trace או להעלות אחד חדש.

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

    • כדי לנווט לזמן או אירוע מסוים, השתמש בסמן (מחוון הזמן), או בשמאלarrow_left_time ונכוןarrow_right_time חיצים בתיבת תצוגת הזמן (פינה השמאלית התחתונה), או חיצים שמאלה וימינה במקלדת.
    • כדי להציג עקבות נבחרות מקודדות צבע על ציר הזמן, השתמש בתפריט הנפתח (משמאל למחוון הזמן). כברירת מחדל, שלושת העקבות האחרונות שנצפו באמצעות לשוניות המעקב מוצגות על ציר הזמן.
    • לתצוגה מפורטת של כל העקבות שהועלו, השתמש בהתקרבותzoom_in_time או התקרבותzoom_out_time כלי (מתחת למחוון הזמן), או גלול במקלדת. השתמש בלחצן האיפוס כדי לאפס את רמת הזום.
    • לתצוגה מורחבת של התפלגות העקבות לאורך זמן, לחץ על החץ למעלהarrow_up_time (פינה ימנית תחתונה).

    time_nav_winscope

    איור 8. ניווט בזמן ב-Winscope.

    בתצוגה המורחבת (איור 9), בחר והגדל מסגרות זמן ספציפיות לבדיקה טובה יותר:

    expand_time_winscope

    איור 9. ציר זמן מורחב ב-Winscope.

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

    • עבור ה- Surface Flinger trace, שלושה לוחות מציגים תצוגות שונות של העקיבה בפרק זמן נתון, כפי שמוצג באיור 10:sf_trace

      איור 10. עקבות Flinger של פני השטח על Winscope.

      • תצוגת שכבות : תצוגת 3D של השכבות בשכבות-על מלבניות. רכיבי ממשק המשתמש הבאים מתאימים את המלבנים כדי להציג את האלמנטים הגרפיים במונחים של מיקומם, גודלם, טרנספורמציה וסדר z:

        • מחוון הסיבוב (משמאל למעלה בתצוגת השכבות) מסובב את מלבני השכבות כדי להציג אותם בזוויות שנבחרו.
        • מחוון הרווח (מימין למעלה בתצוגת השכבות) מתאים את המרווח בין השכבות כדי ליצור את התצוגה המרוכבת שנבחרה.
        • כלי הזום (הימני העליון של תצוגת השכבות) מתקרביםzoom_in_time ולהקטיןzoom_out_time לתוך השכבות לבדיקה טובה יותר.
        • כפתור האיפוסreset_sf (מימין למעלה בתצוגת השכבות) משחזר את הגדרות המצלמה לתצוגה המקורית.
        • גרור את המלבנים כדי להקל על התקרבות טובה יותר.
      • תצוגת היררכיה : היררכיה מלאה של השכבות.

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

        • תיבת הסימון הצג הבדל (משמאל למעלה בתצוגת המאפיינים) מתנהגת כמו בתצוגת ההיררכיה .
        • הצג ברירות מחדל (שמאל למעלה בתצוגת המאפיינים), כאשר נבחר, מציג את ערכי הפרוטו המוגדרים כברירת מחדל ב-Proto Dump. כברירת מחדל, ערכים אלה אינם רשומים ב-Proto Dump. ערכי הפרוטו המוגדרים כברירת מחדל נלקחים מהגדרת שדה הפרוטו. אם לשדה פרוטו אין ערך ברירת מחדל שאינו ריק, ערכי הפרוטו המוגדרים כברירת מחדל הם:
          • מחרוזות: ריק
          • מספרים: 0
          • ערכים בוליאניים: שקר
          • חפצים: ריק

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

    • עבור המעקב אחר מנהל החלונות , שלוש חלוניות מציגות תצוגות שונות של המעקב בפרק זמן נתון, כפי שמוצג באיור 11:

      • תצוגת Windows : תצוגת 3D של השכבות.
      • תצוגת היררכיה : היררכיה מלאה של השכבות.
      • תצוגת מאפיינים מכילה פרוטו dump של כל המאפיינים.

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

      wm_trace

      איור 11. מעקב אחר מנהל החלונות ב-Winscope.

    • עבור מעקבי עסקאות , העסקאות בין Surface Flinger ו-Windows Manager מוצגות בפורמט טבלה שניתן לחיפוש לפי המזהים, הסוג והטקסט המוצגים, יחד עם תצוגת מאפיינים המציגה את הפרוטו dump. הבחירה בין שתי התצוגות והקלטת המסך מסונכרנת:

      transaction_trace

      איור 12. מעקב אחר עסקאות על Winscope.

    • עבור עקבות ProtoLog , המידע מוצג בפורמט טבלה, שניתן לחיפוש לפי תגים, קבצי מקור וטקסט:

      protolog_trace

      איור 13. עקבות ProtoLog על Winscope.

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

      transitions_trace

      איור 14. מעקב אחר מעברים על Winscope.