שימוש ב-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
בשני המופעים.
- שמות הנכסים מופיעים באותיות רישיות עם מקף נטוי (snake case), לדוגמה
בעמודות
value
ו-previous_value
:- ערכים בוליאניים מיוצגים על ידי
'0'
(False
) או'1'
(True
).
- ערכים בוליאניים מיוצגים על ידי
תצוגות SQL של SurfaceFlinger
הפורמטים הבאים משמשים לנתוני proto של SurfaceFlinger:
נתוני השכבה הם בפורמט
LayerProto
.נתוני הבסיס (root) של ההיררכיה הם בפורמט
LayersSnapshotProto
.
כדי לחפש נתוני שכבות, משתמשים בתצוגה 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:
איור 3. תוצאות של 'צפייה בחיפוש'.
אם הטבלה שמתקבלת מכילה את העמודה ts
, הערכים בעמודה הזו מפורשים כחותמות זמן ומתווספים לשכבת-העל של ציר הזמן כשורה חדשה של רשומות. לוחצים על השורה הזו ומשתמשים במקשי החיצים שמאלה וימינה כדי לנווט בין הרשומות:
איור 4. ציר הזמן של החיפוש.