Winscope ट्रेसिंग, Android फ़्रेमवर्क का हिस्सा है. इस पेज पर, Winscope Trace Viewer को अपने पीसी पर डाउनलोड करने, बिल्ड करने, और चलाने का तरीका बताया गया है.
Winscope को अपने पीसी पर बिल्ड करना
Winscope ट्रेसर चलाने के लिए, अपने पीसी को सेट अप करने के लिए यह तरीका अपनाएं:
- Android सोर्स कोड डाउनलोड करें.
Winscope फ़ोल्डर पर जाएं:
cd development/tools/winscopeइनका इस्तेमाल करके डिपेंडेंसी इंस्टॉल करें:
npm installउपलब्ध कमांड की सूची देखने के लिए, यह कमांड चलाएं:
npm runइनका इस्तेमाल करके, सभी प्रोडक्शन और टेस्ट टारगेट बिल्ड करें:
npm run build:prodइनका इस्तेमाल करके 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 मैपिंग अपडेट करने के लिए, यह तरीका अपनाएं:
एनोटेशन प्रीप्रोसेसर को चलाने के लिए,
:framework-minus-apex-intdefsबिल्ड करें:mp :framework-minus-apex-intdefsजनरेट की गई
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.jsonrepo 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ऐसा तब होता है, जब ट्रेस फ़ाइल नई प्रोटो डेफ़िनिशन के साथ बनाई गई हो, जिसमें नई ज़रूरी फ़ील्ड शामिल हों.
- पक्का करें कि आपने Winscope के सही वर्शन (मास्टर, S या R) पर ट्रेस खोला हो.
अगर आपने प्रोटो पर नया फ़ील्ड बनाया है, तो
npm run build:protosका इस्तेमाल करके Winscope में प्रोटो को फिर से कंपाइल करें.
डिपेंडेंसी के कुछ इंस्टॉल किए गए वर्शन गलत हैं (बिल्ड नहीं हो सका)
package.jsonऔरpackage-lock.jsonमें किए गए बदलावों को पहले जैसा करें.node_modulesहटाएं.npm installको फिर से चलाएं.
मैंने किसी एक प्रोटो फ़ाइल में नया फ़ील्ड जोड़ा है. मैं इसे कैसे दिखाऊं?
- Winscope, कंपाइल किए जाने के समय की प्रोटो परिभाषाओं का इस्तेमाल करता है. इसलिए, नए फ़ील्ड डिफ़ॉल्ट रूप से नहीं दिखेंगे. नए फ़ील्ड दिखाने के लिए,
npm run build:protosका इस्तेमाल करके प्रोटो को फिर से बिल्ड करें.
- Winscope, कंपाइल किए जाने के समय की प्रोटो परिभाषाओं का इस्तेमाल करता है. इसलिए, नए फ़ील्ड डिफ़ॉल्ट रूप से नहीं दिखेंगे. नए फ़ील्ड दिखाने के लिए,