Macrobenchmark মেট্রিক ক্যাপচার করা

ধারণা ও Jetpack Compose-এর প্রয়োগ

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

নিম্নলিখিত কোড স্নিপেট ফ্রেম টাইমিং এবং কাস্টম ট্রেস বিভাগ মেট্রিক্স ক্যাপচার করে:

Kotlin

benchmarkRule.measureRepeated(
    packageName = TARGET_PACKAGE,
    metrics = listOf(
        FrameTimingMetric(),
        TraceSectionMetric("RV CreateView"),
        TraceSectionMetric("RV OnBindView"),
    ),
    iterations = 5,
    // ...
)

জাভা

benchmarkRule.measureRepeated(
    TARGET_PACKAGE,     // packageName
    Arrays.asList(      // metrics
        new StartupTimingMetric(),
        new TraceSectionMetric("RV CreateView"),
        new TraceSectionMetric("RV OnBindView"),
    ),
    5,                  // Iterations
    // ...
);

এই উদাহরণে, RV CreateView এবং RV OnBindView হল ট্রেস করা যায় এমন ব্লকের আইডি যা RecyclerView-এ উল্লেখ করা আছে। createViewHolder() পদ্ধতির জন্য সোর্স কোড হল একটি উদাহরণ যে কীভাবে আপনি নিজের কোডের মধ্যে ট্রেস করা যায় এমন ব্লক সংজ্ঞায়িত করতে পারেন।

StartupTimingMetric, TraceSectionMetric এবং FrameTimingMetric সম্পর্কে এই ডকুমেন্টে পরে বিস্তারিতভাবে আলোচনা করা হয়েছে। মেট্রিকের সম্পূর্ণ তালিকার জন্য, Metric-এর সাবক্লাস চেক করুন।

Android Studio-তে বেঞ্চমার্ক টেস্টের ফলাফল আউটপুট হিসেবে দেখানো হয়, যেমনটি চিত্র ১-এ দেখানো হয়েছে। একাধিক মেট্রিক সংজ্ঞায়িত করা হলে, আউটপুটে সেগুলি সব একত্রিত করা হয়।

TraceSectionMetric এবং FrameTimingMetric-এর ফলাফল।
ছবি ১. TraceSectionMetric এবং FrameTimingMetric-এর ফলাফল।

StartupTimingMetric

StartupTimingMetric নিম্নলিখিত ভ্যালু সহ অ্যাপ স্টার্টআপ টাইমিং মেট্রিক ক্যাপচার করে:

  • timeToInitialDisplayMs: সিস্টেম লঞ্চ ইনটেন্ট পাওয়ার পর থেকে ডেস্টিনেশনের প্রথম ফ্রেম রেন্ডার করা পর্যন্ত সময় Activity।
  • timeToFullDisplayMs: সিস্টেম লঞ্চ ইনটেন্ট পাওয়ার পর থেকে reportFullyDrawn() পদ্ধতি ব্যবহার করে অ্যাপ সম্পূর্ণভাবে ড্র করা হয়েছে বলে রিপোর্ট করা পর্যন্ত সময়। reportFullyDrawn() কল করার পরে—বা এতে থাকা—প্রথম ফ্রেম রেন্ডার করা সম্পূর্ণ হলে পরিমাপ করা বন্ধ হয়ে যায়। Android 10 (API লেভেল ২৯) এবং তার আগের ভার্সনে এই পরিমাপ উপলভ্য নাও হতে পারে।

StartupTimingMetric স্টার্টআপ ইটারেশন থেকে ন্যূনতম, মধ্যক ও সর্বাধিক ভ্যালু আউটপুট করে। স্টার্ট-আপের উন্নতি মূল্যায়ন করতে, সর্বদা মিডিয়ান ভ্যালুর উপর ফোকাস করুন, কারণ তারা সাধারণ ব্যবহারকারীর স্টার্ট-আপ সময়ের সেরা অনুমান প্রদান করে। অ্যাপ স্টার্টআপ টাইমে কী কী অবদান রাখে সেই সম্পর্কে আরও তথ্যের জন্য, অ্যাপ স্টার্টআপ টাইম দেখুন।

StartupTimingMetric ফলাফল
ছবি ২. StartupTimingMetricটি ফলাফল।

FrameTimingMetric

FrameTimingMetric বেঞ্চমার্কের মাধ্যমে তৈরি করা ফ্রেম থেকে টাইমিং সংক্রান্ত তথ্য ক্যাপচার করে, যেমন স্ক্রল করা বা অ্যানিমেশন এবং নিম্নলিখিত ভ্যালু আউটপুট করে:

  • frameOverrunMs: কোনও ফ্রেম তার ডেডলাইন মিস করার সময়সীমা। পজিটিভ নম্বর থেকে বোঝা যায় যে ফ্রেম ড্রপ হয়েছে এবং তার সাথে দৃশ্যমান জ্যাঙ্ক বা স্টাটার হয়েছে। সাবসিস্টেম হার্ডওয়্যার ডেডলাইনের তুলনায় কত দ্রুত একটি ফ্রেম সম্পূর্ণ হয়েছে তা নেগেটিভ সংখ্যা থেকে বোঝা যায়। মনে রাখবেন: এই মেট্রিক শুধুমাত্র Android 12 (API লেভেল 31) ও তার পরবর্তী যেকোনও ভার্সনে উপলভ্য।
  • frameDurationCpuMs: UI থ্রেড ও RenderThread, দুটিতেই CPU-তে ফ্রেম তৈরি হতে যতটা সময় লাগে।

এই পরিমাপগুলি ৫০তম, ৯০তম, ৯৫তম এবং ৯৯তম পার্সেন্টাইলের ডিস্ট্রিবিউশনে সংগ্রহ করা হয়।

ধীরে চলা ফ্রেম কীভাবে শনাক্ত ও উন্নত করবেন সেই সম্পর্কে আরও জানতে, ধীরে রেন্ডারিং দেখুন।

FrameTimingMetric ফলাফল
ছবি ৩. FrameTimingMetricটি ফলাফল।

TraceSectionMetric

TraceSectionMetric নির্দিষ্ট ট্রেস সেকশন কতবার ঘটে এবং এটি এক্সিকিউট করতে কত সময় লাগে তা ক্যাপচার করে। সময় ট্র্যাক করার জন্য, এটি মিলিসেকেন্ডে ন্যূনতম, মধ্যক এবং সর্বাধিক সময় আউটপুট করে।

টার্গেট ট্রেস বিভাগটি হয় ফাংশন কল trace(sectionName) অথবা Trace.beginSection(sectionName) এবং Trace.endSection()-এর মধ্যে লোয়ার-লেভেল ব্লক বাউন্ডারি অথবা তাদের অ্যাসিঙ্ক ভেরিয়েন্ট দ্বারা সংজ্ঞায়িত করা হয়। এটি সবসময় পরিমাপ করার সময় ক্যাপচার করা ট্রেস বিভাগের প্রথম ইনস্ট্যান্স বেছে নেয়। এটি ডিফল্ট হিসেবে আপনার প্যাকেজ থেকে শুধুমাত্র ট্রেস সেকশন আউটপুট করে; আপনার প্যাকেজের বাইরে প্রসেস অন্তর্ভুক্ত করতে, targetPackageOnly = false সেট করুন।

ট্রেসিং সম্পর্কে আরও জানতে, সিস্টেম ট্রেসিংয়ের ওভারভিউ এবং কাস্টম ইভেন্ট নির্ধারণ করুন দেখুন।

TraceSectionMetric
ছবি ৪. TraceSectionMetricটি ফলাফল।