রচনা ট্রেসিং

কোনো পারফরম্যান্স সমস্যা খতিয়ে দেখার শুরুতে ট্রেসগুলো প্রায়শই তথ্যের সেরা উৎস হয়ে থাকে। এগুলো আপনাকে সমস্যাটি কী এবং কোথা থেকে অনুসন্ধান শুরু করতে হবে, সে সম্পর্কে একটি ধারণা তৈরি করতে সাহায্য করে।

অ্যান্ড্রয়েডে দুই ধরনের ট্রেসিং সমর্থিত: সিস্টেম ট্রেসিং এবং মেথড ট্রেসিং।

যেহেতু সিস্টেম ট্রেসিং শুধুমাত্র ট্রেসিংয়ের জন্য বিশেষভাবে চিহ্নিত অংশগুলোই ট্র্যাক করে, তাই এর ওভারহেড কম এবং এটি আপনার অ্যাপের পারফরম্যান্সকে তেমন প্রভাবিত করে না। আপনার কোডের নির্দিষ্ট অংশগুলো রান হতে কতক্ষণ সময় নিচ্ছে, তা দেখার জন্য সিস্টেম ট্রেসিং একটি চমৎকার উপায়।

মেথড ট্রেসিং আপনার অ্যাপের প্রতিটি ফাংশন কল ট্র্যাক করে। এটি বেশ ব্যয়বহুল এবং তাই এটি আপনার অ্যাপের পারফরম্যান্সকে ব্যাপকভাবে প্রভাবিত করে, কিন্তু এর মাধ্যমে কী ঘটছে, কোন ফাংশনগুলো কল করা হচ্ছে এবং কত ঘন ঘন সেগুলো কল করা হচ্ছে, তার একটি সম্পূর্ণ চিত্র পাওয়া যায়।

ডিফল্টরূপে, সিস্টেম ট্রেসে স্বতন্ত্র কম্পোজেবল ফাংশন অন্তর্ভুক্ত থাকে না । এগুলো মেথড ট্রেসে পাওয়া যায়।

কম্পোজিশন ট্রেসিং সিস্টেম ট্রেসের ভিতরে কম্পোজেবল ফাংশনগুলো দেখায়। এই ফিচারটি আপনাকে সিস্টেম ট্রেসিংয়ের মতো কম হস্তক্ষেপের সুবিধা দেয় এবং কম্পোজিশনের ক্ষেত্রে মেথড ট্রেসিংয়ের মতো বিস্তারিত তথ্য প্রদান করে।

কম্পোজিশন ট্রেসিং সেটআপ

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

  • অ্যান্ড্রয়েড স্টুডিও ফ্লেমিঙ্গো
  • কম্পোজ ইউআই: ১.৩.০
  • কম্পোজ কম্পাইলার: ১.৩.০

যে ডিভাইস বা এমুলেটরে আপনি ট্রেস চালাবেন, সেটিরও ন্যূনতম এপিআই লেভেল ৩০ থাকতে হবে।

এছাড়াও, আপনাকে Compose Runtime Tracing-এ একটি নতুন ডিপেন্ডেন্সি যোগ করতে হবে:

implementation("androidx.compose.runtime:runtime-tracing:1.10.5")

আপনি যদি Compose BOM ব্যবহার করেন, তাহলে আপনাকে ভার্সন উল্লেখ করতে হবে না:

val composeBom = platform("androidx.compose:compose-bom:2026.03.00")
implementation(composeBom)
// ...

// dependency without a version
implementation("androidx.compose.runtime:runtime-tracing")

এই নির্ভরতার ফলে, যখন আপনি রিকম্পোজিশন অন্তর্ভুক্ত একটি সিস্টেম ট্রেস নেন, তখন আপনি স্বয়ংক্রিয়ভাবে কম্পোজেবল ফাংশনগুলো দেখতে পাবেন।

সিস্টেম ট্রেস নিন

সিস্টেম ট্রেস নিতে এবং নতুন রিকম্পোজিশন ট্রেসিং-এর কার্যকারিতা দেখতে, এই ধাপগুলো অনুসরণ করুন:

  1. প্রোফাইলারটি খুলুন:

    অ্যান্ড্রয়েড স্টুডিও - প্রোফাইলিং শুরু করুন
    চিত্র ২। অ্যান্ড্রয়েড স্টুডিও - প্রোফাইলিং শুরু করুন
  2. সিপিইউ টাইমলাইনে ক্লিক করুন

    অ্যান্ড্রয়েড স্টুডিও প্রোফাইলার - সিপিইউ টাইমলাইন
    চিত্র ৩। অ্যান্ড্রয়েড স্টুডিও প্রোফাইলার - সিপিইউ টাইমলাইন
  3. আপনার অ্যাপে যে UI-টি ট্রেস করতে চান সেখানে যান এবং তারপর সিস্টেম ট্রেস এবং রেকর্ড নির্বাচন করুন।

    ট্রেস বিকল্প - সিস্টেম ট্রেস
    চিত্র ৪। ট্রেস বিকল্পসমূহ - সিস্টেম ট্রেস
  4. আপনার অ্যাপ ব্যবহার করে রিকম্পোজিশন শুরু করুন এবং রেকর্ডিং বন্ধ করুন। ট্রেসটি প্রসেস হয়ে প্রদর্শিত হলে, আপনি রিকম্পোজিশন ট্রেসে কম্পোজেবলগুলো দেখতে পাবেন। ট্রেসটি জুম ও প্যান করার জন্য আপনি কিবোর্ড এবং মাউস ব্যবহার করতে পারেন; যদি আপনি ট্রেস নেভিগেট করতে অভ্যস্ত না হন, তবে ‘রেকর্ড ট্রেসেস’ ডকুমেন্টেশনটি দেখুন।

    সিস্টেম ট্রেস
    চিত্র ৫। সিস্টেম ট্রেস

    চার্টে থাকা কোনো কম্পোজেবলের উপর ডাবল-ক্লিক করলে সেটির সোর্স কোডে নিয়ে যাওয়া হয়।

  5. আপনি ফ্লেম চার্টে ফাইল এবং লাইন নম্বরের সাথে কম্পোজেবলগুলোও দেখতে পারেন:

    ফ্লেম চার্ট
    চিত্র ৬। শিখা তালিকা

সতর্কতা

APK আকারের ওভারহেড

যদিও আমরা ফিচারটির ওভারহেড যথাসম্ভব কমানোর লক্ষ্য রেখেছি, কম্পোজ কম্পাইলার দ্বারা APK-তে এমবেড করা ট্রেসিং স্ট্রিংগুলির কারণে কম্পোজ অ্যাপগুলির APK সাইজ বেড়ে যায়। আপনার অ্যাপটি যদি খুব বেশি কম্পোজ ব্যবহার না করে, তবে এই সাইজ বৃদ্ধি তুলনামূলকভাবে কম হতে পারে, অথবা সম্পূর্ণ কম্পোজ অ্যাপের ক্ষেত্রে এটি আরও বেশি হতে পারে। এই ট্রেসিং স্ট্রিংগুলি অতিরিক্তভাবে আনঅবফাসকেটেড থাকে, তাই পূর্বে দেখানো অনুযায়ী এগুলি ট্রেসিং টুলগুলিতে প্রদর্শিত হতে পারে। সংস্করণ ১.৩.০ থেকে শুরু করে, কম্পোজ কম্পাইলার এগুলি সমস্ত অ্যাপে ইনজেক্ট করে।

আপনার প্রোডাকশন বিল্ড থেকে ট্রেসিং স্ট্রিংগুলি মুছে ফেলার জন্য নিম্নলিখিত Proguard রুলটি যোগ করুন:

-assumenosideeffects public class androidx.compose.runtime.ComposerKt {

   boolean isTraceInProgress();

   void traceEventStart(int,int,int,java.lang.String);

   void traceEventStart(int,java.lang.String);

   void traceEventEnd();

}

ভবিষ্যতে এই ফাংশনগুলো পরিবর্তিত হতে পারে, তবে যেকোনো পরিবর্তন কম্পোজ রিলিজ নোটে উল্লেখ করা হবে।

উল্লেখ্য যে, ফাংশনগুলো অন্তর্ভুক্ত রাখলে APK ফাইলের আকার কিছুটা বাড়লেও, এটি নিশ্চিত করে যে প্রোফাইল করা APK ফাইলটিই অ্যাপ ব্যবহারকারীরা চালান।

সঠিক সময়

যেকোনো পারফরম্যান্স টেস্টিংয়ের মতোই, সঠিক প্রোফাইলিংয়ের জন্য আপনাকে ‘প্রোফাইলেবল অ্যাপ্লিকেশন’-এর নিয়ম অনুযায়ী অ্যাপটিকে profileable এবং non-debuggable করে তুলতে হবে।

টার্মিনাল থেকে একটি ট্রেস ক্যাপচার করুন

টার্মিনাল থেকে কম্পোজিশন ট্রেস ক্যাপচার করা সম্ভব। এটি করার জন্য, আপনাকে সেই ধাপগুলো অনুসরণ করতে হবে যা অ্যান্ড্রয়েড স্টুডিও সাধারণত আপনার জন্য স্বয়ংক্রিয়ভাবে করে থাকে।

নির্ভরতা যোগ করুন

প্রথমে, আপনার অ্যাপে অতিরিক্ত নির্ভরতাগুলো যোগ করুন।

implementation("androidx.tracing:tracing-perfetto:1.0.0")
implementation("androidx.tracing:tracing-perfetto-binary:1.0.0")

একটি রেকর্ড কমান্ড তৈরি করুন

  1. Perfetto- তে রেকর্ড তৈরি করার কমান্ড ব্যবহার করুন।
  2. নিম্নলিখিত উদাহরণ অনুযায়ী track_event ডেটা সোর্স সেকশনটি ম্যানুয়ালি যোগ করুন:

    adb shell perfetto \
      -c - --txt \
      -o /data/misc/perfetto-traces/trace \
    <<EOF
    buffers: {
        size_kb: 63488
        fill_policy: RING_BUFFER
    }
    buffers: {
        size_kb: 2048
        fill_policy: RING_BUFFER
    }
    data_sources: {
        config {
            name: "track_event"
        }
    }
    duration_ms: 10000
    flush_period_ms: 30000
    incremental_state_config {
        clear_period_ms: 5000
    }
    EOF

একটি চিহ্ন ধারণ করুন

  1. অ্যাপটি চালু করুন এবং যে অংশটি ট্রেস করতে চান তা প্রস্তুত করুন।
  2. একটি ব্রডকাস্ট জারি করে অ্যাপে ট্রেসিং সক্রিয় করুন।

    # set app package variable, e.g. com.google.samples.apps.nowinandroid.debug
    # can be found through `adb shell ps -ef` or `adb shell cmd package list packages`
    package=<your app process>
    
    # issue a broadcast to enable tracing
    adb shell am broadcast \
    -a androidx.tracing.perfetto.action.ENABLE_TRACING \
    $package/androidx.tracing.perfetto.TracingReceiver
    
  3. আপনার পূর্বে তৈরি করা রেকর্ডিং কমান্ডটি চালু করুন।

ট্রেসটি খুলুন

  1. adb pull <location> কমান্ডের মাধ্যমে ডিভাইস থেকে ট্রেসটি চালান (রেকর্ড কমান্ডে নির্দিষ্ট করা অবস্থান)।

  2. পারফেট্টোতে খুলুন।

Jetpack Macrobenchmark দিয়ে একটি ট্রেস ক্যাপচার করুন।

আপনি Jetpack Macrobenchmark দিয়ে পারফরম্যান্স পরিমাপ করতে পারেন, যা ফলাফল হিসেবে ট্রেস প্রদান করে। ম্যাক্রোবেঞ্চমার্কের সাথে কম্পোজিশন ট্রেসিং চালু করতে, আপনাকে যা করতে হবে তা হলো:

  1. ম্যাক্রোবেঞ্চমার্ক টেস্ট মডিউলে এই অতিরিক্ত ডিপেন্ডেন্সিগুলো যোগ করুন:

    implementation("androidx.tracing:tracing-perfetto:1.0.0")
    implementation("androidx.tracing:tracing-perfetto-binary:1.0.0")
    
  2. বেঞ্চমার্ক চালানোর আগে androidx.benchmark.fullTracing.enable=true ইন্সট্রুমেন্টেশন আর্গুমেন্টটি যোগ করুন। ম্যাক্রোবেঞ্চমার্ক ইন্সট্রুমেন্টেশন আর্গুমেন্ট সম্পর্কে আরও তথ্যের জন্য ম্যাক্রোবেঞ্চমার্ক ইন্সট্রুমেন্টেশন আর্গুমেন্টস দেখুন।

প্রতিক্রিয়া

এই ফিচারটি সম্পর্কে আপনার মতামত, এতে কোনো বাগ পেলে এবং আপনার কোনো অনুরোধ থাকলে, আমরা তা জানতে আগ্রহী। আপনি ইস্যু ট্র্যাকার ব্যবহার করে আমাদের মতামত পাঠাতে পারেন।