ম্যাক্রোবেঞ্চমার্ক মেট্রিক্স ক্যাপচার করুন

ধারণা এবং জেটপ্যাক কম্পোজ বাস্তবায়ন

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

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

কোটলিন

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 এর সাবক্লাসগুলো দেখুন।

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

TraceSectionMetric এবং FrameTimingMetric-এর ফলাফল।
চিত্র ১. TraceSectionMetric এবং FrameTimingMetric এর ফলাফল।

স্টার্টআপটাইমিংমেট্রিক

StartupTimingMetric নিম্নলিখিত মানগুলির মাধ্যমে অ্যাপ চালু হওয়ার সময়ের মেট্রিকগুলি সংগ্রহ করে:

  • timeToInitialDisplayMs : সিস্টেম একটি লঞ্চ ইন্টেন্ট গ্রহণ করার মুহূর্ত থেকে গন্তব্য Activity প্রথম ফ্রেমটি রেন্ডার করার মুহূর্ত পর্যন্ত সময়কাল।
  • timeToFullDisplayMs : সিস্টেম একটি লঞ্চ ইন্টেন্ট গ্রহণ করার মুহূর্ত থেকে reportFullyDrawn() মেথড ব্যবহার করে অ্যাপটি সম্পূর্ণরূপে অঙ্কিত (fully drawn) হিসেবে রিপোর্ট করার মধ্যবর্তী সময়কাল। reportFullyDrawn() কলের পরবর্তী বা অন্তর্ভুক্ত প্রথম ফ্রেমটির রেন্ডারিং সম্পন্ন হলে এই পরিমাপটি বন্ধ হয়ে যায়। এই পরিমাপটি Android 10 (API লেভেল 29) এবং এর পূর্ববর্তী সংস্করণগুলিতে উপলব্ধ নাও হতে পারে।

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

স্টার্টআপটাইমিংমেট্রিক ফলাফল
চিত্র ২. StartupTimingMetric ফলাফল।

ফ্রেমটাইমিংমেট্রিক

FrameTimingMetric একটি বেঞ্চমার্ক দ্বারা উৎপাদিত ফ্রেমগুলো থেকে, যেমন স্ক্রলিং বা অ্যানিমেশন, টাইমিং সংক্রান্ত তথ্য সংগ্রহ করে এবং নিম্নলিখিত মানগুলো আউটপুট করে:

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

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

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

ফ্রেমটাইমিংমেট্রিক ফলাফল
চিত্র ৩. FrameTimingMetric ফলাফল।

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

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

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

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

ট্রেসসেকশনমেট্রিক
চিত্র ৪. TraceSectionMetric ফলাফল।
{% হুবহু %} {% endverbatim %} {% হুবহু %} {% endverbatim %}