Winscope চালান

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

স্থানীয়ভাবে উইনস্কোপ তৈরি করুন

আপনার পিসিতে উইনস্কোপ ট্রেসার চালানোর জন্য এই ধাপগুলো অনুসরণ করুন:

  1. অ্যান্ড্রয়েড সোর্স ডাউনলোড করুন
  2. Winscope ফোল্ডারে যান:

    cd development/tools/winscope
    
  3. নিম্নলিখিত পদ্ধতি ব্যবহার করে নির্ভরতা ইনস্টল করুন:

    npm install
    

    উপলব্ধ কমান্ডগুলোর তালিকা দেখতে, চালান: npm run

  4. নিম্নলিখিত পদ্ধতি ব্যবহার করে সমস্ত প্রোডাকশন এবং টেস্ট টার্গেট বিল্ড করুন:

    npm run build:prod
    
  5. নিম্নলিখিত পদ্ধতি ব্যবহার করে উইনস্কোপ চালান:

    npm run start
    

আলাদা অংশ তৈরি করুন

আপনি নিম্নলিখিত কমান্ডগুলো ব্যবহার করে উইনস্কোপের প্রতিটি অংশ আলাদাভাবে বিল্ড করতে পারেন:

আদেশ বর্ণনা
build:trace_processor সর্বশেষ সংস্করণটি পরীক্ষা করে এবং পুনর্নির্মাণ করে।
পারফেটোর trace_processor
build:protos প্রোটো ডেফিনিশনগুলো পুনরায় কম্পাইল করে।

পরীক্ষা চালান

উইনস্কোপে ইউনিট এবং এন্ড-টু-এন্ড টেস্ট রয়েছে। এগুলো চালানোর জন্য npm run <command> ব্যবহার করুন:

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

এন্ড-টু-এন্ড পরীক্ষা

এন্ড-টু-এন্ড টেস্ট চালানোর আগে, আপনাকে অবশ্যই রিমোট টুলটি চালু করতে হবে এবং ক্রোম ড্রাইভারের সঠিক সংস্করণটি ইনস্টল করতে হবে। নিম্নলিখিত কোড স্নিপেটে, ` run test:e2e কমান্ডটি স্বয়ংক্রিয়ভাবে ক্রোম ড্রাইভার ইনস্টল করে।

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

নিচের সারণিতে প্রয়োজনীয় কমান্ড এবং তাদের বিবরণ দেওয়া হলো। এগুলো চালানোর জন্য npm run command ব্যবহার করুন:

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

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

@IntDef হলো অ্যান্ড্রয়েডের একটি অ্যানোটেশন যা একটি ইন্টিজারের সম্ভাব্য মান সীমিত করতে ব্যবহৃত হয়। উইনস্কোপ ইন্টিজারের পরিবর্তে মানটির নাম প্রদর্শন করার জন্য এই অ্যানোটেশনগুলোর একটি ম্যাপিং ব্যবহার করে।

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

@IntDef ম্যাপিং স্বয়ংক্রিয়ভাবে আপডেট করতে, নিম্নলিখিতগুলি করুন:

  1. আপনার স্থানীয় অ্যান্ড্রয়েড ট্রি-তে থাকা 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_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-এ পরিবর্তনগুলো আপলোড করুন।

অন্যান্য কমান্ড

বিল্ড এবং টেস্ট ছাড়াও, উইনস্কোপ স্ক্রিপ্টগুলিতে অন্যান্য ক্ষমতাও রয়েছে, যা সারণিতে দেখানো হয়েছে। সেগুলি চালানোর জন্য 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. নিশ্চিত করুন যে আপনি সঠিক উইনস্কোপ সংস্করণে (মাস্টার, এস, বা আর) ট্রেসটি খুলছেন।
      2. যদি আপনি প্রোটোতে নতুন ফিল্ডটি তৈরি করেন, তাহলে Winscope-এ npm run build:protos . কমান্ড ব্যবহার করে প্রোটোগুলো পুনরায় কম্পাইল করুন।

  • ইনস্টল করা কিছু ডিপেন্ডেন্সির ভার্সন ভুল (বিল্ড ব্যর্থ হয়)

    • package.json এবং package-lock.json এ করা পরিবর্তনগুলো পূর্বাবস্থায় ফিরিয়ে আনুন। node_modules মুছে ফেলুন। আবার npm install চালান।
  • আমি প্রোটো ফাইলগুলোর একটিতে একটি নতুন ফিল্ড যোগ করেছি। আমি এটি কীভাবে প্রদর্শন করব?

    • Winscope কম্পাইল করার সময়কার প্রোটো ডেফিনিশনগুলো ব্যবহার করে, তাই নতুন ফিল্ডগুলো ডিফল্টভাবে দেখা যায় না। নতুন ফিল্ডগুলো দেখানোর জন্য, npm run build:protos ব্যবহার করে প্রোটোগুলো রি-বিল্ড করুন।