লোকাল প্রোফাইলিংয়ের জন্য ডিবাগ কমান্ড

আপনার ProfilingManager ইন্টিগ্রেশন লোকালি পরীক্ষা করার সময়, রেট লিমিটিং-এর মাধ্যমে অনুরোধ থ্রটল করা হতে পারে অথবা ট্রিগার পরীক্ষা করার সময় ব্যাকগ্রাউন্ড ট্রেস অ্যাক্টিভ নাও থাকতে পারে। থ্রটলিং বন্ধ করতে, প্রোফাইল পুল করতে, আনরিড্যাক্টেড ট্রেস ধরে রাখতে, ক্যাপচার ট্রিগার করতে এবং টেস্ট ডিভাইসে পরিষেবার অবস্থা পরীক্ষা করতে এই পৃষ্ঠায় adb কমান্ড ব্যবহার করুন।

রেট লিমিটার বন্ধ করুন

লোকাল টেস্টিং চলাকালীন requestProfiling অনুরোধের জন্য অ্যাপ প্রসেস ও সিস্টেম রেট লিমিটার বন্ধ করতে, নিম্নলিখিত device_config কমান্ড রান করুন:

adb shell device_config put profiling_testing rate_limiter.disabled true

পরীক্ষা করা হয়ে গেলে, ফ্ল্যাগ রিসেট করুন:

adb shell device_config delete profiling_testing rate_limiter.disabled

ADB ব্যবহার করে প্রোফাইল পুল করুন

রুট অ্যাক্সেস সহ কোনও ডিভাইসে স্থানীয়ভাবে এডিট করা প্রোফাইল পরীক্ষা করতে, getResultFilePath-এর মাধ্যমে রিটার্ন করা পাথ সহ adb pull রান করুন:

# Pull a profile
adb pull /data/user/0/<com.example.myapp>/files/profiling/<profile-file-name>

সাময়িক ও আনরিড্যাক্টেড ফলাফল রেখে দেওয়া

স্থানীয়ভাবে প্রোফাইলিং টেস্ট করার সময়, আপনি /data/misc/perfetto-traces/profiling/-এ অস্থায়ী ডিরেক্টরিতে ফলাফল রেখে দিতে পারেন। সংশোধন করা হয়নি এমন সিস্টেম ট্রেসের সাথে সংশোধন করা সিস্টেম ট্রেসের তুলনা করলে, সংশোধন করার সময় কোন ডেটা বাদ দেওয়া হয়েছে তা বুঝতে পারবেন।

অস্থায়ী ও আনরিড্যাক্টেড ফলাফল কীভাবে রেখে দেওয়া হয় তা নির্ভর করে আপনার ডিভাইসে Android-এর কোন ভার্সন চলছে তার উপর:

  • Android 16 (API লেভেল 36) এবং তার পরবর্তী ভার্সন: আপনি টেম্পোরারি ডিরেক্টরিতে রিড্যাক্ট না করা (যেখানে প্রযোজ্য) এবং রিড্যাক্ট করা, উভয় ফলাফলই রেখে দিতে পারবেন, যা Android 16-এ রুট অ্যাক্সেস ছাড়াই সব ধরনের বিল্ডে adb pull ব্যবহার করে অ্যাক্সেস করার জন্য এক্সপ্যান্ড করা হয়েছে (যদিও Android 15-এ /data/misc/perfetto-traces/profiling/ পড়ার জন্য রুট অ্যাক্সেসের প্রয়োজন হয়)। সিস্টেম যাতে টেম্পোরারি ফলাফল মুছে না দেয়, তার জন্য নিম্নলিখিত কমান্ড রান করুন:

    adb shell device_config put profiling_testing delete_temporary_results.disabled true
    
  • Android 15 (API লেভেল ৩৫): সাময়িক ডিরেক্টরিতে, আপনি শুধু অপরিবর্তিত ফলাফল রাখতে পারবেন, যা adb-এর মাধ্যমে শুধু রুট অ্যাক্সেস সহ বিল্ডে অ্যাক্সেস করা যাবে। (আপনার অ্যাপ এখনও নিজস্ব /data/user/0/<app>/files/profiling/ ডিরেক্টরিতে এডিট করা প্রোফাইল পায়, যা আপনার অ্যাপ কোড যেকোনও বিল্ডে পড়তে বা কপি করতে পারে, যদিও adb pull সহ /data/user/0/... থেকে সরাসরি পুল করার জন্য রুট অ্যাক্সেস বা ডিবাগ করা যায় এমন বিল্ডে adb shell run-as <app> প্রয়োজন হয়।) সিস্টেম যাতে আনরিড্যাক্টেড ট্রেস মুছে না দেয়, তার জন্য এই কমান্ড রান করুন:

    adb shell device_config put profiling_testing delete_unredacted_trace.disabled true
    

প্রোফাইল ক্যাপচার করার পরে, অস্থায়ী ডিরেক্টরি থেকে রেখে দেওয়া ফাইলটি পুল করুন:

# Pull a retained redacted profile (Android 16 and higher)
adb pull /data/misc/perfetto-traces/profiling/<trace-name>.<profile-type-ext>

# Pull an unredacted system trace
adb pull /data/misc/perfetto-traces/profiling/<trace-name>.perfetto-trace-unredacted

এইসব কমান্ডে, <trace-name> হল ProfilingResult.getResultFilePath-এর মাধ্যমে রিটার্ন করা পাথ থেকে বেস ফাইলের নাম (এক্সটেনশন ছাড়া) এবং এডিট না করা সিস্টেম ট্রেস কপি .perfetto-trace এক্সটেনশনে -unredacted যোগ করে। ফাইলের নামের গঠন ও <profile-type-ext> ভ্যালু সম্পর্কে বিস্তারিত জানতে, ফাইলের লোকেশন ও নামকরণের ফর্ম্যাট দেখুন।

adb shell device_config delete profiling_testing delete_temporary_results.disabled
adb shell device_config delete profiling_testing delete_unredacted_trace.disabled

ট্রিগার টেস্টিংয়ের জন্য ব্যাকগ্রাউন্ড ট্রেস জোর করে চালু করুন

প্রোডাকশনে সিস্টেম ব্যাকগ্রাউন্ড ট্রেস র‍্যান্ডম বিরতিতে রান করে বলে, স্থানীয়ভাবে ট্রিগার-ভিত্তিক প্রোফাইলিং পরীক্ষা করা কঠিন হতে পারে। সিস্টেমকে ব্যাকগ্রাউন্ড ট্রেস চালিয়ে যেতে বাধ্য করতে এবং আপনার অ্যাপের ট্রিগারের জন্য সিস্টেম-লেভেল রেট লিমিটার বাইপাস করতে, system_triggered_profiling.testing_package_name সেট করুন:

adb shell device_config put profiling_testing system_triggered_profiling.testing_package_name <com.example.myapp>

setRateLimitingPeriodHours-এর সাথে কনফিগার করা যেকোনও প্রতি-ট্রিগার কুলডাউন এখনও প্রযোজ্য। আপনি মুছে না দেওয়া পর্যন্ত এই মোড একটানা চলতে থাকে, তাই পরীক্ষা করা শেষ হলে ফ্ল্যাগ সরিয়ে দিন:

adb shell device_config delete profiling_testing system_triggered_profiling.testing_package_name

উপযোগী ডিবাগিং কমান্ড

Android 16 (API লেভেল 36) এবং তার পরবর্তী ভার্সনে সাম্প্রতিক Profiling মডিউল ভার্সন সহ, আপনি adb-এর উপর cmd profiling_service টুল ব্যবহার করে ভার্বোস লগিং চালু করতে, চাহিদা অনুযায়ী প্রোফাইল কালেকশন ট্রিগার করতে এবং সরাসরি কমান্ড লাইন থেকে ট্রিগার টেস্ট করতে পারবেন।

ভার্বোস ডিবাগ লগিং চালু করুন

logcat-এ বিস্তারিত ProfilingService লগ চালু করতে এবং অনুরোধ হ্যান্ডলিং ও ডেলিভারি ডায়াগনসিস করতে, নিম্নলিখিত কমান্ড রান করুন:

adb shell cmd profiling_service enable-logs true

অন-ডিমান্ড প্রোফাইল কালেকশনের অনুরোধ করুন

কমান্ড লাইন থেকে কোনও নির্দিষ্ট প্যাকেজের জন্য অবিলম্বে প্রোফাইল ক্যাপচার শুরু করতে, নিম্নলিখিত কমান্ডটি রান করুন:

adb shell cmd profiling_service request-profiling <profiling_type> <com.example.myapp> [--user <user_id>] [--duration <duration_ms>] [--sources <sources>]

এই কমান্ডে, <profiling_type> হল ProfilingManager থেকে পাওয়া ইন্টিজার কনস্ট্যান্ট ভ্যালু (জাভা হিপ ডাম্পের জন্য 1, হিপ প্রোফাইলের জন্য 2, স্ট্যাক স্যাম্পলিংয়ের জন্য 3 অথবা সিস্টেম ট্রেসের জন্য 4)। মেমরি ও স্ট্যাক প্রোফাইলের জন্য টার্গেট অ্যাপ প্রসেস চালু থাকতে হবে, অনুরোধটি রেট লিমিটারের সাপেক্ষে, যদি না এটি বন্ধ করা হয় এবং সম্পূর্ণ ProfilingResult শুধুমাত্র registerForAllProfilingResults-এর সাথে রেজিস্টার করা গ্লোবাল লিসেনারদের কাছে ডেলিভার করা হয়।

ট্রিগার রেজিস্টার ও সিমুলেট করুন

কোনও প্যাকেজের জন্য ট্রিগার রেজিস্টার করতে বা সিমুলেটেড ট্রিগার ইভেন্ট ফায়ার করতে এবং আপনার ট্রিগার কলব্যাক হ্যান্ডলিং যাচাই করতে, নিম্নলিখিত কমান্ডগুলি রান করুন:

adb shell cmd profiling_service add-trigger <trigger_type> <com.example.myapp> [--user <user_id>]
adb shell cmd profiling_service trigger <trigger_type> <com.example.myapp> [--user <user_id>]

এইসব কমান্ডে, <trigger_type> হল ProfilingTrigger থেকে পাওয়া ইন্টিজার কনস্ট্যান্ট ভ্যালু (যেমন, TRIGGER_TYPE_APP_FULLY_DRAWN-এর জন্য 1, TRIGGER_TYPE_ANR-এর জন্য 2 অথবা TRIGGER_TYPE_OOM-এর জন্য 7)। add-trigger রান করলে 0-ঘণ্টার কুলডাউন সহ ট্রিগার রেজিস্টার হয় এবং সেই ট্রিগার ধরনের জন্য আগে থেকে থাকা যেকোনও রেজিস্ট্রেশন ওভাররাইড করে। ব্যাকগ্রাউন্ড ট্রেসের (যেমন 1 বা 2) স্ন্যাপশট সেভ করে এমন ট্রিগার সিমুলেট করার জন্য অ্যাক্টিভ ব্যাকগ্রাউন্ড ট্রেস (ট্রিগার টেস্টিংয়ের জন্য ব্যাকগ্রাউন্ড ট্রেস জোর করে চালু করা দেখুন) প্রয়োজন।

সামগ্রিক ProfilingManager স্টেট সংগ্রহ করুন

Android 16 (API লেভেল 36) এবং তার পরবর্তী যেকোনও ভার্সনে সাম্প্রতিক Profiling মডিউল ভার্সন সহ, আপনি সমস্যা ডায়াগনসিস করতে এবং ProfilingManager-এর বর্তমান অবস্থা পরীক্ষা করতে profiling_service-এর বিপরীতে dumpsys চালাতে পারবেন:

adb shell dumpsys profiling_service

dumpsys profiling_service আউটপুট শুধুমাত্র তথ্যমূলক এবং ডিবাগিংয়ের উদ্দেশ্যে ব্যবহার করা হয় এবং এর ফর্ম্যাট পরিবর্তন হতে পারে। এটি পরিষেবার ইন্টার্নাল স্ট্যাটাসের একটি স্ন্যাপশট প্রদান করে, যার মধ্যে অন্তর্ভুক্ত হল:

  • অ্যাক্টিভ থ্রটল ও রেট লিমিট স্ট্যাটাস।
  • অ্যাক্টিভ ডিভাইস কনফিগারেশন।
  • রেজিস্টার করা অ্যাপ ট্রিগার এবং সেগুলির রেট-লিমিটিং কুলডাউন।
  • অ্যাক্টিভ ও সারিতে থাকা প্রোফাইলিং সেশন।
  • সাম্প্রতিক প্রোফাইলিং অনুরোধ, ট্রিগার ঘটা এবং ফলাফল ডেলিভারি ইভেন্ট।