রচনা ট্রেসিং

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

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

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

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

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

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

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

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

  • অ্যান্ড্রয়েড স্টুডিও ফ্লেমিঙ্গো
  • কম্পোজ UI: 1.3.0
  • কম্পোজ কম্পাইলার: 1.3.0

আপনি যে ডিভাইস বা এমুলেটরটিতে আপনার ট্রেস চালাবেন সেটিও ন্যূনতম API লেভেল 30 হতে হবে।

অতিরিক্তভাবে, আপনাকে কম্পোজ রানটাইম ট্রেসিং-এ একটি নতুন নির্ভরতা যোগ করতে হবে:

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

যদি আপনি Compose BOM ব্যবহার করেন, তাহলে আপনাকে সংস্করণটি নির্দিষ্ট করতে হবে না:

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

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

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

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

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

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

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

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

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

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

    চার্টে একটি কম্পোজেবলের উপর ডাবল-ক্লিক করলে আপনি এর সোর্স কোডে চলে যাবেন।

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

    শিখা চার্ট
    চিত্র ৬। শিখা চার্ট

সতর্কতা

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();

}

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

মনে রাখবেন যে ফাংশনগুলি ভিতরে রাখলে, কিছু APK আকারের খরচ হলেও, এটি নিশ্চিত করে যে প্রোফাইল করা 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> (record কমান্ডে উল্লেখিত অবস্থান)।

  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 ইন্সট্রুমেন্টেশন আর্গুমেন্ট যোগ করুন। Macrobenchmark ইন্সট্রুমেন্টেশন আর্গুমেন্ট সম্পর্কে আরও তথ্যের জন্য Macrobenchmark ইন্সট্রুমেন্টেশন আর্গুমেন্টগুলি দেখুন।

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

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