חיפוש בנתוני מעקב

שימוש ב-SQL כדי למצוא מצבים ספציפיים במעקבים של Winscope Perfetto. אפשר להשתמש בתצוגה הגלובלית של חיפוש בממשק המשתמש של Winscope כדי להריץ שאילתות ולהציג תוצאות בטבלאות:

הכרטיסייה 'צפייה בחיפוש'

איור 1. הכרטיסייה 'חיפוש צופים'.

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

יש להשתמש במוסכמות הבאות בכל התצוגות:

  • בעמודות property ו-flat_property:

    • שמות הנכסים מופיעים באותיות רישיות עם מקף נטוי (snake case), לדוגמה visible_region מ-LayerProto.
    • סימון הנקודות משמש לייצוג נכסים בתצוגת עץ, לדוגמה, visible_region.rect.

    • שדות חוזרים ב-property מסומנים בסוגריים מרובעים:

      לדוגמה, בשני מופעים של השדה החוזר visible_region.rect, השדה top מיוצג על ידי visible_region.rect[0].top ו-visible_region.rect[1].top.

    • אי אפשר להבדיל בין שדות חוזרים ב-flat_property:

      לדוגמה, בשני מופעים של השדה החוזר visible_region.rect, השדה top מיוצג על ידי visible_region.rect.top בשני המופעים.

  • בעמודות value ו-previous_value:

    • ערכים בוליאניים מיוצגים על ידי '0' (False) או '1' (True).

תצוגות SQL של SurfaceFlinger

הפורמטים הבאים משמשים לנתוני proto של SurfaceFlinger:

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

עמודה תיאור
state_id המזהה הייחודי של הרשומה שאליה השכבה שייכת
ts חותמת הזמן של הרשומה שהשכבה שייכת אליה
layer_id מזהה שכבה
parent_id מזהה השכבה של ההורה
layer_name שם השכבה
property שם הנכס עם התחשבות בשדות חוזרים
flat_property שם הנכס לא מתייחס לשדות חוזרים
value ערך המאפיין בפורמט מחרוזת
previous_value ערך המאפיין מהרשומה הקודמת בפורמט מחרוזת

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

עמודה תיאור
state_id המזהה הייחודי של הרשומה
ts חותמת הזמן של הרשומה
property שם הנכס עם התחשבות בשדות חוזרים
flat_property שם הנכס לא מתייחס לשדות חוזרים
value ערך המאפיין בפורמט מחרוזת
previous_value ערך המאפיין מהרשומה הקודמת בפורמט מחרוזת

שאילתות לדוגמה

  • מחפשים את כל הפריימים שבהם לשכבה IME יש גבולות מסך תקינים:

    SELECT ts, value, previous_value FROM sf_layer_search
      WHERE layer_name like 'IME%'
      AND property='screen_bounds.bottom'
      AND value<='24000'
    
  • מאתרים את כל הפריימים שבהם השכבה Taskbar color.a (אלפא) משתנה:

    SELECT ts, value, previous_value FROM sf_layer_search
      WHERE layer_name like 'Taskbar%'
      AND property='color.a'
      AND value!=previous_value
    
  • חיפוש כל התמונות שבהן הערך של הסף התחתון Wallpaper קטן מ-2,400 או שווה לו:

    SELECT ts, value, previous_value FROM sf_layer_search
      WHERE layer_name LIKE 'Wallpaper%'
      AND property='bounds.bottom'
      AND cast_int!(value) <= 2400
    
  • הצגת רשימה של כל הנכסים של תצוגות עם סטאק שכבות תקין:

    SELECT STATE.* FROM sf_hierarchy_root_search STATE_WITH_DISPLAY_ON
    INNER JOIN sf_hierarchy_root_search STATE
      ON STATE.state_id = STATE_WITH_DISPLAY_ON.state_id
      AND STATE_WITH_DISPLAY_ON.flat_property='displays.layer_stack'
      AND STATE_WITH_DISPLAY_ON.value!='4294967295'
      AND STATE.property LIKE CONCAT(
        SUBSTRING(
            STATE_WITH_DISPLAY_ON.property,
            0,
            instr(STATE_WITH_DISPLAY_ON.property, ']')
        ),
        '%'
      )
    

תצוגת SQL של עסקאות

פורמט הנתונים של העסקאות הוא TransactionTraceEntry.

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

עמודה תיאור
state_id המזהה הייחודי של הרשומה שאליה שייך מאפיין ה-proto
ts חותמת הזמן של הרשומה שאליה שייך מאפיין ה-proto
transaction_id מזהה העסקה, אם יש
property שם הנכס עם התחשבות בשדות חוזרים
flat_property שם הנכס לא מתייחס לשדות חוזרים
value ערך המאפיין בפורמט מחרוזת

שאילתות לדוגמה

  • מוצאים את המסגרת שבה הוחלו עסקאות כדי לשנות את המיקום x של השכבה ל--54.0:

    SELECT ts, transaction_id, value FROM transactions_search
      WHERE flat_property='transactions.layer_changes.x'
      AND value='-54.0'
    
  • מאתרים את המסגרת שבה נוספה השכבה ImeContainer:

    SELECT ts FROM transactions_search
      WHERE flat_property='added_layers.name'
      AND value='ImeContainer'
    

תצוגת SQL של מעברים

פורמט הנתונים של transitions proto הוא ShellTransition.

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

עמודה תיאור
ts זמן שליחה – אם זמין, המערכת תשתמש בזמן השליחה. אחרת, המערכת תשתמש בערך 0
transition_id מזהה המעבר
property שם הנכס עם התחשבות בשדות חוזרים
flat_property שם הנכס לא מתייחס לשדות חוזרים
value ערך המאפיין בפורמט מחרוזת

שאילתות לדוגמה

איתור מאפיינים של מעברים שמטופלים על ידי DefaultMixedHandler:

  SELECT
    PROPS.ts,
    PROPS.transition_id,
    PROPS.property,
    PROPS.value
  FROM transitions_search HANDLER_MATCH
  INNER JOIN transitions_search PROPS
    ON HANDLER_MATCH.transition_id = PROPS.transition_id
  WHERE HANDLER_MATCH.property = 'handler'
    AND HANDLER_MATCH.value LIKE "%DefaultMixedHandler"
  ORDER BY PROPS.transition_id, PROPS.property

תצוגת SQL של ViewCapture

הנתונים של ViewCapture proto משתמשים בפורמט View.

כדי לחפש נתוני ViewCapture, משתמשים בתצוגה viewcapture_search. התצוגה הזו כוללת את העמודות הבאות:

עמודה תיאור
state_id המזהה הייחודי של המדינה שאליה שייך התצוגה
ts חותמת הזמן של המצב שאליו שייכת התצוגה
package_name שם חבילה
window_name שם החלון
class_name הצגת שם הכיתה
property שם הנכס עם התחשבות בשדות חוזרים
flat_property שם הנכס לא מתייחס לשדות חוזרים
value ערך המאפיין בפורמט מחרוזת
previous_value ערך המאפיין מהמצב הקודם בפורמט מחרוזת

שאילתות לדוגמה

חיפוש כל המצבים כש-SearchContainerView זז בכיוון y:

  SELECT * FROM viewcapture_search
  WHERE class_name LIKE '%SearchContainerView'
    AND flat_property='translation_y'
    AND value!=previous_value

טבלת SQL של ProtoLog

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

עמודה תיאור
ts חותמת הזמן של היומן
level רמת הרישום ביומן
tag תג קבוצה לצורך רישום ביומן
message הודעה ביומן
stacktrace דוח קריסות (אם זמין)
location מיקום הקוד שממנו נשלחה ההודעה

שאילתות לדוגמה

  • חיפוש כל היומנים עם הודעה שמכילה את transition:

    SELECT ts, message, location FROM protolog
      WHERE message LIKE '%transition%'
    
  • מאתרים את כל היומנים שמכילים מזהי עסקאות תקפים:

    CREATE PERFETTO VIEW valid_tx_ids AS
      SELECT DISTINCT transaction_id FROM transactions_search
      WHERE transaction_id IS NOT NULL AND transaction_id != '0';
    
    SELECT TRANS.transaction_id, message FROM valid_tx_ids TRANS
    INNER JOIN protolog LOGS
      ON LOGS.message LIKE CONCAT('%', TRANS.transaction_id, '%');
    

הרצת שאילתות

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

אחרי שמפעילים את החיפוש ב-Trace, כותבים שאילתה בתיבת החיפוש ולוחצים על Run Search Query (הפעלת שאילתה לחיפוש) או מקישים על Enter במקלדת כדי להפעיל אותה.

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

כדי לגשת לשאילתות שמורות, לוחצים על הכרטיסייה Saved בחלונית הימנית. כדי לגשת לשאילתות שרצו לאחרונה, לוחצים על הכרטיסייה Recent:

החלונית הימנית של כלי הצפייה בחיפוש

איור 2. החלונית הימנית של כלי החיפוש.

תוצאות

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

תוצאות של &#39;צפייה בחיפוש&#39;

איור 3. תוצאות של 'צפייה בחיפוש'.

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

ציר הזמן של החיפוש

איור 4. ציר הזמן של החיפוש.