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 के अलग-अलग हिस्सों को अलग-अलग बनाया जा सकता है:

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

टेस्ट चलाना

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

निर्देश ब्यौरा
test:unit:ci यह CI
या प्रीसबमिट हुक के लिए, यूनिट टेस्ट को कम शब्दों वाले फ़ॉर्मैट में चलाता है.
test:unit:dev यह लोकल डेवलपमेंट के लिए, यूनिट टेस्ट को ज़्यादा जानकारी वाले फ़ॉर्मैट में चलाता है.
यह मोड बदलावों पर नज़र रखता है और
सही टेस्ट को अपने-आप फिर से चलाता है.
test:e2e यह एंड-टू-एंड टेस्ट चलाता है. जैसे, क्रॉस-टूल प्रोटोकॉल के लिए टेस्ट.
test:presubmit:quiet यह CI या presubmit
hook के लिए, सभी presubmit यूनिट टेस्ट, लिंटर, और graph
analysis को कम शब्दों में तैयार करता है.
test: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 का इस्तेमाल करके प्रोटो को फिर से बनाएं.