Winscope चलाना

Winscope ट्रेसिंग, Android फ़्रेमवर्क का हिस्सा है. इस पेज पर, Winscope Trace Viewer को अपने पीसी पर डाउनलोड करने, बिल्ड करने, और चलाने का तरीका बताया गया है.

Winscope को अपने पीसी पर बिल्ड करना

Winscope ट्रेसर चलाने के लिए, अपने पीसी को सेट अप करने के लिए यह तरीका अपनाएं:

  1. Android सोर्स कोड डाउनलोड करें.
  2. Winscope फ़ोल्डर पर जाएं:

    cd development/tools/winscope
    
  3. इनका इस्तेमाल करके डिपेंडेंसी इंस्टॉल करें:

    npm install
    

    उपलब्ध कमांड की सूची देखने के लिए, यह कमांड चलाएं: npm run

  4. इनका इस्तेमाल करके, सभी प्रोडक्शन और टेस्ट टारगेट बिल्ड करें:

    npm run build:prod
    
  5. इनका इस्तेमाल करके Winscope चलाएं:

    npm run start
    

Winscope के हिस्से अलग-अलग बिल्ड करना

इन कमांड का इस्तेमाल करके, Winscope के अलग-अलग हिस्सों को अलग-अलग बिल्ड किया जा सकता है:

कमांड ब्यौरा
build:trace_processor यह कमांड, Perfetto के trace_processor के नए
वर्शन को चेक आउट करके फिर से बिल्ड करता है.
build:protos यह कमांड, प्रोटोकॉल बफ़र की परिभाषाओं को फिर से कंपाइल करता है.

टेस्ट चलाना

Winscope में यूनिट और एंड-टू-एंड टेस्ट शामिल होते हैं. इन्हें चलाने के लिए, npm run <command> का इस्तेमाल करें:

कमांड ब्यौरा
test:unit:ci यह CI या presubmit हुक के लिए, कम जानकारी वाले फ़ॉर्मैट में
यूनिट टेस्ट चलाता है.
test:unit:dev यह लोकल डेवलपमेंट के लिए, ज़्यादा जानकारी वाले फ़ॉर्मैट में
यूनिट टेस्ट चलाता है. यह मोड बदलावों पर नज़र रखता है और
सही टेस्ट को अपने-आप फिर से चलाता है.
test:e2e यह एंड-टू-एंड टेस्ट चलाता है. जैसे, क्रॉस-टूल प्रोटोकॉल के लिए
टेस्ट.
test:presubmit:quiet यह CI या presubmit हुक के लिए, सभी presubmit यूनिट
टेस्ट, लिंटर, और ग्राफ़ विश्लेषण को कम जानकारी वाले फ़ॉर्मैट में
बिल्ड करता है.
test:presubmit यह लोकल डेवलपमेंट के लिए, सभी presubmit यूनिट टेस्ट,
लिंटर, और ग्राफ़ विश्लेषण को ज़्यादा जानकारी वाले फ़ॉर्मैट में
बिल्ड करता है.
test:all यह लोकल डेवलपमेंट के लिए, सभी टेस्ट (यूनिट और एंड-टू-एंड),
लिंटर, और ग्राफ़ विश्लेषण को ज़्यादा जानकारी वाले फ़ॉर्मैट में
चलाता है.

एंड-टू-एंड टेस्ट

एंड-टू-एंड टेस्ट चलाने से पहले, आपको रिमोट टूल शुरू करना होगा. साथ ही, Chrome ड्राइवर का सही वर्शन इंस्टॉल करना होगा. यहां दिए गए कोड स्निपेट में, run test:e2e कमांड Chrome ड्राइवर को अपने-आप इंस्टॉल कर देता है.

$ npm run start
$ npm run start:remote_tool_mock
$ npm run test:e2e

यहां दी गई टेबल में ज़रूरी कमांड और उनके बारे में जानकारी दी गई है. इन्हें चलाने के लिए, npm run command का इस्तेमाल करें:

कमांड ब्यौरा
start:remote_tool_mock यह क्रॉस टूल प्रोटोकॉल की जांच करने के लिए, रिमोट टूल मॉक शुरू करता है.
install:chromedriver यह Chrome ड्राइवर को इंस्टॉल करता है. यह ड्राइवर, एंड-टू-एंड टेस्ट चलाने के लिए ज़रूरी होता है.

@IntDef मैपिंग अपडेट करना

@IntDef एक एनोटेशन है. इसका इस्तेमाल Android में, पूर्णांक की संभावित वैल्यू को सीमित करने के लिए किया जाता है. Winscope, इन एनोटेशन की मैपिंग का इस्तेमाल करता है, ताकि पूर्णांक के बजाय वैल्यू का नाम दिखाया जा सके.

@IntDef मैपिंग अपडेट करने के लिए, यह तरीका अपनाएं:

  1. एनोटेशन प्रीप्रोसेसर को चलाने के लिए, :framework-minus-apex-intdefs बिल्ड करें:

    mp :framework-minus-apex-intdefs
    
  2. जनरेट की गई intDefMapping.json फ़ाइल को प्रीबिल्ट डेटाबेस में कॉपी करें:

    $ python3 -c 'import sys,json,collections; print(json.dumps(collections.OrderedDict(sorted(collections.ChainMap(*map(lambda x:json.load(open(x)), sys.argv[1:])).items())), indent=2))' $(find out/soong/.intermediates/frameworks/base -iname intDefMapping.json) > ./development/tools/winscope/src/common/intDefMapping.json
    
  3. repo upload का इस्तेमाल करके, Winscope में बदलाव अपलोड करें.

अन्य कमांड

बिल्ड और टेस्ट के अलावा, Winscope स्क्रिप्ट में अन्य सुविधाएं भी होती हैं. इनके बारे में टेबल में बताया गया है. इन्हें चलाने के लिए, npm run command का इस्तेमाल करें:

कमांड ब्यौरा
format:check यह prettier का इस्तेमाल करके, कोड की फ़ॉर्मैटिंग से जुड़ी समस्याओं की जांच करता है.
format:fix यह prettier का इस्तेमाल करके, कोड की फ़ॉर्मैटिंग से जुड़ी समस्याओं की जांच करता है और उन्हें अपने-आप ठीक करता है.
eslint:check यह eslint का इस्तेमाल करके, कोड की फ़ॉर्मैटिंग से जुड़ी समस्याओं की जांच करता है.
eslint:fix यह eslint का इस्तेमाल करके, कोड की फ़ॉर्मैटिंग से जुड़ी समस्याओं की जांच करता है और उन्हें अपने-आप ठीक करता है.
tslint:check यह tslint का इस्तेमाल करके, कोड की फ़ॉर्मैटिंग से जुड़ी समस्याओं की जांच करता है.
tslint:fix यह tslint का इस्तेमाल करके, कोड की फ़ॉर्मैटिंग से जुड़ी समस्याओं की जांच करता है और उन्हें अपने-आप ठीक करता है.
deps_graph:check_cycles यह साइक्लिकल डिपेंडेंसी के लिए कोड का विश्लेषण करता है.

समस्या हल करना

समस्या हल करने के लिए, यहां दी गई सलाह का इस्तेमाल करें:

  • गड़बड़ी ProtocolError: missing required '<FIELD>' या TypeError: Cannot read property '<PROP>' of null

    • ऐसा तब होता है, जब ट्रेस फ़ाइल नई प्रोटो डेफ़िनिशन के साथ बनाई गई हो, जिसमें नई ज़रूरी फ़ील्ड शामिल हों.

      1. पक्का करें कि आपने Winscope के सही वर्शन (मास्टर, S या R) पर ट्रेस खोला हो.
      2. अगर आपने प्रोटो पर नया फ़ील्ड बनाया है, तो npm run build:protos का इस्तेमाल करके Winscope में प्रोटो को फिर से कंपाइल करें.

  • डिपेंडेंसी के कुछ इंस्टॉल किए गए वर्शन गलत हैं (बिल्ड नहीं हो सका)

    • package.json और package-lock.json में किए गए बदलावों को पहले जैसा करें. node_modules हटाएं. npm install को फिर से चलाएं.
  • मैंने किसी एक प्रोटो फ़ाइल में नया फ़ील्ड जोड़ा है. मैं इसे कैसे दिखाऊं?

    • Winscope, कंपाइल किए जाने के समय की प्रोटो परिभाषाओं का इस्तेमाल करता है. इसलिए, नए फ़ील्ड डिफ़ॉल्ट रूप से नहीं दिखेंगे. नए फ़ील्ड दिखाने के लिए, npm run build:protos का इस्तेमाल करके प्रोटो को फिर से बिल्ड करें.