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

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

Android-এ দুই লেভেলের ট্রেসিং কাজ করে: সিস্টেম ট্রেসিং ও মেথড ট্রেসিং।

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

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

ডিফল্ট হিসেবে, সিস্টেম ট্রেসে আলাদা আলাদা কম্পোজেবল ফাংশন থাকে না। এগুলি মেথড ট্রেসে উপলভ্য।

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

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

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

  • Android Studio Flamingo
  • Compose UI: 1.3.0
  • Compose Compiler: 1.3.0

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

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

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

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

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

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

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

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

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

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

    Android Studio - Start Profiling
    ছবি ২। Android Studio - প্রোফাইলিং শুরু করুন
  2. CPU টাইমলাইন বিকল্পে ক্লিক করুন

    Android Studio Profiler - CPU টাইমলাইন
    ছবি ৩। Android Studio Profiler - CPU টাইমলাইন
  3. আপনি যে UI ট্রেস করতে চান, অ্যাপে সেখানে নেভিগেট করুন এবং তারপরে সিস্টেম ট্রেস ও রেকর্ড করুন বিকল্প বেছে নিন

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

    Android Studio-তে সিস্টেম ট্রেস ভিজ্যুয়ালাইজেশনের উদাহরণ।
    ছবি ৫. সিস্টেম ট্রেস

    চার্টে কোনও কম্পোজেবলে ডবল ক্লিক করলে, আপনি সেটির সোর্স কোডে পৌঁছে যাবেন।

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

    কম্পোজেবল ফাংশন দেখানো ফ্লেম চার্টের একটি উদাহরণ।
    ছবি ৬. ফ্লেম চার্ট

Caveats

কম্পোজিশন ট্রেসিং ব্যবহার করার সময়, APK সাইজ ও পারফর্ম্যান্সের ব্যাপারে নিম্নলিখিত সতর্কতাগুলি বিবেচনা করুন।

APK সাইজ ওভারহেড

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

নিম্নলিখিত 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();

}

এইসব ফাংশন ভবিষ্যতে পরিবর্তন হতে পারে, তবে যেকোনও পরিবর্তন Compose রিলিজ নোট-এ উল্লেখ করা হবে।

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

সঠিক সময়

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

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

টার্মিনাল থেকে কম্পোজিশন ট্রেস ক্যাপচার করা সম্ভব। এটি করতে, আপনাকে সেইসব ধাপ পারফর্ম করতে হবে যা Android Studio সাধারণত আপনার জন্য অটোমেটিক করে।

ডিপেন্ডেন্সি যোগ করুন

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

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. Perfetto-তে খুলুন।

Jetpack Macrobenchmark-এর সাহায্যে ট্রেস ক্যাপচার করা

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

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

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

মতামত

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