Winscope Perfetto ट्रेस में खास स्थितियां ढूंढने के लिए, SQL का इस्तेमाल करें. क्वेरी चलाने और टेबल में दिए गए नतीजों को विज़ुअलाइज़ करने के लिए, Winscope के यूज़र इंटरफ़ेस (यूआई) में ग्लोबल Search व्यूअर का इस्तेमाल करें:
पहली इमेज. 'दर्शक खोजें' टैब.
Search व्यूअर की मदद से, Perfetto ट्रैस पर कस्टम एसक्यूएल क्वेरी लिखी और चलाई जा सकती हैं. साथ ही, हाल ही की और सेव की गई क्वेरी को ऐक्सेस किया जा सकता है. Winscope, SurfaceFlinger और लेन-देन के ट्रैस को खोजने में मदद करने के लिए, खास एसक्यूएल व्यू उपलब्ध कराता है.
सभी व्यू के लिए, इन नियमों का इस्तेमाल करें:
property
औरflat_property
कॉलम के लिए:- प्रॉपर्टी के नाम स्नेक केस में होते हैं. उदाहरण के लिए,
visible_region
fromLayerProto
. नेस्ट की गई प्रॉपर्टी दिखाने के लिए, डॉट नोटेशन का इस्तेमाल किया जाता है. उदाहरण के लिए,
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
) से दिखाया जाता है.
- बूलियन वैल्यू को
SurfaceFlinger के एसक्यूएल व्यू
SurfaceFlinger प्रोटो डेटा इन फ़ॉर्मैट का इस्तेमाल करता है:
लेयर का डेटा,
LayerProto
फ़ॉर्मैट में हो.हैरारकी का रूट डेटा,
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
का सबसे नीचे वाला बाउंड 2400 से कम या उसके बराबर हो: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, ']') ), '%' )
लेन-देन का एसक्यूएल व्यू
लेन-देन के प्रोटो डेटा में, TransactionTraceEntry
फ़ॉर्मैट का इस्तेमाल किया जाता है.
लेन-देन का डेटा खोजने के लिए, transactions_search
व्यू का इस्तेमाल करें. इस व्यू में ये कॉलम शामिल होते हैं:
कॉलम | ब्यौरा |
---|---|
state_id |
उस एंट्री का यूनीक आईडी जिससे प्रोटो प्रॉपर्टी जुड़ी है |
ts |
उस एंट्री का टाइमस्टैंप जिससे प्रोटो प्रॉपर्टी जुड़ी है |
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'
ट्रांज़िशन का एसक्यूएल व्यू
ट्रांज़िशन प्रोटो डेटा, 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
ViewCapture का SQL व्यू
ViewCapture प्रोटो डेटा, 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
ProtoLog SQL टेबल
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, '%');
क्वेरी चलाना
बाईं ओर मौजूद पैनल का इस्तेमाल करने पर, ट्रैक खोज शुरू हो जाती है. इसमें कुछ सेकंड लगते हैं. लाइव स्ट्रीम शुरू होने के दौरान, टाइमलाइन उपलब्ध नहीं होती.
ट्रैक की गई खोज शुरू होने के बाद, खोज बॉक्स में कोई क्वेरी लिखें और उसे चलाने के लिए, खोज क्वेरी चलाएं पर क्लिक करें या अपने कीबोर्ड पर Enter दबाएं.
प्रोसेस पूरी होने के बाद, नतीजों की टेबल बीच वाले पैनल में दिखती है. आपकी क्वेरी, खोज बॉक्स के नीचे दिखती है. साथ ही, सेशन के बीच क्वेरी को सेव करने के लिए एक फ़ील्ड भी दिखता है.
सेव की गई क्वेरी को ऐक्सेस करने के लिए, बाएं पैनल में सेव की गई टैब पर क्लिक करें. साथ ही, हाल ही में चलाई गई क्वेरी को ऐक्सेस करने के लिए, हाल ही में टैब पर क्लिक करें:
दूसरी इमेज. व्यूअर के बाएं पैनल में खोजें.
नतीजे
सभी क्वेरी, टेबल में नतीजे दिखाती हैं. ये नतीजे स्क्रोल किए जा सकने वाले व्यू में दिखते हैं. साथ ही, इनमें इंटरैक्टिव व्यवहार होता है. यह व्यवहार, लॉग पर आधारित ट्रैक व्यूअर जैसा होता है. जैसे, लेन-देन और ProtoLog:
तीसरी इमेज. Search Viewer के नतीजे.
अगर नतीजों वाली टेबल में ts
कॉलम है, तो उस कॉलम की वैल्यू को टाइमस्टैंप के तौर पर समझा जाता है और उन्हें टाइमलाइन ओवरले में एंट्री की नई लाइन के तौर पर जोड़ा जाता है. इस पंक्ति पर क्लिक करें और एंट्री के बीच नेविगेट करने के लिए, बाईं और दाईं ओर ऐरो बटन का इस्तेमाल करें:
चौथी इमेज. टाइमलाइन खोजें.