রচনা ট্রেসিং

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

সতর্কতা

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

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

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

-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 করতে হবে।

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

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

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

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

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 দিয়ে একটি ট্রেস ক্যাপচার করুন

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

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

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

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

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