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

মেট্রিক হলো আপনার বেঞ্চমার্ক থেকে সংগৃহীত তথ্যের প্রধান ধরন। এগুলোকে একটি 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 এবং PowerMetric সম্পর্কে এই ডকুমেন্টের পরবর্তী অংশে বিস্তারিত আলোচনা করা হয়েছে। মেট্রিকগুলোর সম্পূর্ণ তালিকার জন্য, 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 প্রদত্ত sectionName সাথে মিলে যাওয়া একটি ট্রেস সেকশন কতবার ঘটে এবং এতে কত সময় লাগে তা রেকর্ড করে। সময়ের ক্ষেত্রে, এটি সর্বনিম্ন, মধ্যক এবং সর্বোচ্চ সময় মিলিসেকেন্ডে আউটপুট করে। ট্রেস সেকশনটি trace(sectionName) ফাংশন কল দ্বারা অথবা Trace.beginSection(sectionName) এবং Trace.endSection() এর মধ্যবর্তী কোড বা তাদের অ্যাসিঙ্ক ভ্যারিয়েন্ট দ্বারা সংজ্ঞায়িত করা হয়। এটি একটি পরিমাপের সময় ক্যাপচার করা ট্রেস সেকশনের সর্বদা প্রথম দৃষ্টান্তটি নির্বাচন করে। ডিফল্টরূপে এটি শুধুমাত্র আপনার প্যাকেজ থেকে ট্রেস সেকশন আউটপুট করে; আপনার প্যাকেজের বাইরের প্রসেসগুলি অন্তর্ভুক্ত করতে, targetPackageOnly = false সেট করুন।

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

ট্রেসসেকশনমেট্রিক
চিত্র ৪. TraceSectionMetric ফলাফল।

পাওয়ারমেট্রিক

PowerMetric আপনার পরীক্ষার সময়কালে প্রদত্ত পাওয়ার ক্যাটাগরিগুলোর জন্য শক্তি বা ক্ষমতার পরিবর্তন পরিমাপ করে। প্রতিটি নির্বাচিত ক্যাটাগরিকে তার পরিমাপযোগ্য উপ-উপাদানগুলোতে বিভক্ত করা হয় এবং অনির্দিষ্ট ক্যাটাগরিগুলোকে "unselected" মেট্রিক-এ যোগ করা হয়।

এই মেট্রিকগুলো অ্যাপ-ভিত্তিক ব্যবহার নয়, বরং সিস্টেম-ব্যাপী ব্যবহার পরিমাপ করে এবং এগুলো শুধুমাত্র পিক্সেল ৬, পিক্সেল ৬ প্রো ও পরবর্তী ডিভাইসগুলোর জন্য প্রযোজ্য:

  • power<category>Uw : এই ক্যাটাগরিতে আপনার পরীক্ষার সময়কালে ব্যবহৃত শক্তির পরিমাণ।
  • energy<category>Uws : এই বিভাগে আপনার পরীক্ষার সময়কালে প্রতি একক সময়ে স্থানান্তরিত শক্তির পরিমাণ।

বিভাগগুলোর মধ্যে নিম্নলিখিতগুলো অন্তর্ভুক্ত:

  • CPU
  • DISPLAY
  • GPU
  • GPS
  • MEMORY
  • MACHINE_LEARNING
  • NETWORK
  • UNCATEGORIZED

CPU মতো কিছু বিভাগের ক্ষেত্রে, অন্যান্য প্রসেসের কাজ এবং আপনার নিজের অ্যাপের কাজকে আলাদা করা কঠিন হতে পারে। এই হস্তক্ষেপ কমাতে, অপ্রয়োজনীয় অ্যাপ এবং অ্যাকাউন্টগুলো সরিয়ে ফেলুন বা সেগুলোর ব্যবহার সীমিত করুন।

পাওয়ারমেট্রিক ফলাফল
চিত্র ৫. PowerMetric ফলাফল।
{% হুবহু %} {% endverbatim %} {% হুবহু %} {% endverbatim %}