Winscope চালান

Winscope ট্রেসিং হল Android ফ্রেমওয়ার্কের অংশ। এই পৃষ্ঠায় Winscope ট্রেস ভিউয়ার লোকালি ডাউনলোড, বিল্ড ও রান করার জন্য প্রয়োজনীয় ধাপগুলি উল্লেখ করা আছে।

স্থানীয়ভাবে Winscope তৈরি করা

Winscope ট্রেসার চালানোর জন্য আপনার পিসি (PC) সেট-আপ করতে এইসব ধাপ অনুসরণ করুন:

  1. Android সোর্স ডাউনলোড করুন।
  2. Winscope ফোল্ডারে নেভিগেট করুন:

    cd development/tools/winscope
    
  3. এগুলি ব্যবহার করে ডিপেন্ডেন্সি ইনস্টল করুন:

    npm install
    

    উপলভ্য কমান্ডের তালিকা দেখতে, এগুলি রান করান: npm run

  4. এগুলি ব্যবহার করে সব প্রোডাকশন ও টেস্ট টার্গেট তৈরি করুন:

    npm run build:prod
    
  5. এগুলি ব্যবহার করে Winscope চালান:

    npm run start
    

আলাদা আলাদা পার্ট তৈরি করা

আপনি নিম্নলিখিত কমান্ড ব্যবহার করে Winscope-এর আলাদা আলাদা অংশ তৈরি করতে পারেন:

Command বর্ণনা
build:trace_processor
Perfetto-এর trace_processor লেটেস্ট ভার্সন চেক করে এবং আবার তৈরি করে।
build:protos প্রোটো সংজ্ঞা রিকম্পাইল করে।

টেস্ট চালান

Winscope-এ ইউনিট ও এন্ড-টু-এন্ড টেস্ট থাকে। এগুলি রান করাতে npm run <command> ব্যবহার করুন:

Command বর্ণনা
test:unit:ci CI
বা প্রি-সাবমিট হুকের জন্য কম ভার্বোস ফর্ম্যাটে ইউনিট টেস্ট রান করে।
test:unit:dev স্থানীয় ডেভেলপমেন্টের জন্য
আরও বিস্তারিত ফর্ম্যাটে ইউনিট টেস্ট রান করে। এই মোড পরিবর্তন লক্ষ্য করে এবং
অটোমেটিক সঠিক টেস্ট আবার রান করে।
test:e2e
ক্রস-টুল প্রোটোকলের মতো এন্ড-টু-এন্ড পরীক্ষা চালায়।
test:presubmit:quiet CI বা প্রি-সাবমিট হুকের জন্য কম ভার্বোস ফর্ম্যাটে সমস্ত প্রি-সাবমিট ইউনিট টেস্ট, লিন্টার এবং গ্রাফ
বিশ্লেষণ তৈরি করে।
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 ব্যবহার করুন:

Command বর্ণনা
start:remote_tool_mock ক্রস টুল প্রোটোকল পরীক্ষা করার জন্য রিমোট টুল মক শুরু করে।
install:chromedriver এন্ড-টু-এন্ড টেস্ট চালানোর জন্য প্রয়োজনীয় Chrome ড্রাইভার ইনস্টল করে।

@IntDef ম্যাপিং আপডেট করা

@IntDef হল Android-এ ব্যবহৃত একটি অ্যানোটেশন যা কোনও পূর্ণসংখ্যার সম্ভাব্য মান সীমিত করতে ব্যবহৃত হয়। Winscope, ইন্টিজারের পরিবর্তে ভ্যালুর নাম দেখানোর জন্য এইসব অ্যানোটেশনের ম্যাপিং ব্যবহার করে।

Android ফ্রেমওয়ার্কে নতুন @IntDef ভ্যালু যোগ করা হলে, কিন্তু Winscope-এ আপডেট করা না হলে, সেগুলি বর্ণনামূলক স্ট্রিংয়ের পরিবর্তে কাঁচা পূর্ণসংখ্যা ভ্যালু হিসেবে দেখানো হয়। এই সমস্যার সমাধান করতে, IntDef ম্যাপিং ফাইল আপডেট করুন (development/tools/winscope/src/common/intDefMapping.json)।

@IntDef ম্যাপিং অটোমেটিক আপডেট করতে, নিম্নলিখিত ধাপগুলি অনুসরণ করুন:

  1. আপনার লোকাল Android ট্রির development/tools/winscope/scripts/ ডিরেক্টরি থেকে update_intdef_mappings.sh স্ক্রিপ্ট রান করুন। এই স্ক্রিপ্ট অ্যানোটেশন প্রসেস ট্রিগার করে যা কোড থেকে লেটেস্ট @IntDef ভ্যালু এক্সট্র্যাক্ট করে এবং intDefMapping.json আপডেট করে:

    cd development/tools/winscope
    ./scripts/update_intdef_mappings.sh
    
  2. git commit কমান্ড ব্যবহার করে src/common/intDefMapping.json-এ পরিবর্তনগুলি কমিট করুন এবং repo upload কমান্ড ব্যবহার করে সেগুলি আপলোড করুন।

স্ক্রিপ্ট উপলভ্য না থাকলে, আপনার Android রুট ডিরেক্টরি ($ANDROID_BUILD_TOP) থেকে @IntDef ম্যাপিং ম্যানুয়ালি আপডেট করতে, এইসব ধাপ অনুসরণ করুন:

  1. অ্যানোটেশন প্রিপ্রোসেসর চালানোর জন্য framework-minus-apex-intdefs তৈরি করুন:

    m 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 ব্যবহার করুন:

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 ব্যবহার করে প্রোটো আবার তৈরি করুন।