खोज को ट्रेस करना

Winscope Perfetto ट्रेस में खास स्थितियां ढूंढने के लिए, SQL का इस्तेमाल करें. क्वेरी चलाने और टेबल में दिए गए नतीजों को विज़ुअलाइज़ करने के लिए, Winscope के यूज़र इंटरफ़ेस (यूआई) में ग्लोबल Search व्यूअर का इस्तेमाल करें:

दर्शक टैब खोजें

पहली इमेज. 'दर्शक खोजें' टैब.

Search व्यूअर की मदद से, Perfetto ट्रैस पर कस्टम एसक्यूएल क्वेरी लिखी और चलाई जा सकती हैं. साथ ही, हाल ही की और सेव की गई क्वेरी को ऐक्सेस किया जा सकता है. Winscope, SurfaceFlinger और लेन-देन के ट्रैस को खोजने में मदद करने के लिए, खास एसक्यूएल व्यू उपलब्ध कराता है.

सभी व्यू के लिए, इन नियमों का इस्तेमाल करें:

  • property और flat_property कॉलम के लिए:

    • प्रॉपर्टी के नाम स्नेक केस में होते हैं. उदाहरण के लिए, visible_region from 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) से दिखाया जाता है.

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 कॉलम है, तो उस कॉलम की वैल्यू को टाइमस्टैंप के तौर पर समझा जाता है और उन्हें टाइमलाइन ओवरले में एंट्री की नई लाइन के तौर पर जोड़ा जाता है. इस पंक्ति पर क्लिक करें और एंट्री के बीच नेविगेट करने के लिए, बाईं और दाईं ओर ऐरो बटन का इस्तेमाल करें:

खोज की टाइमलाइन

चौथी इमेज. टाइमलाइन खोजें.