একটি ম্যাক্রোবেঞ্চমার্ক লিখুন

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

লাইব্রেরিটি বেঞ্চমার্কিং ফলাফল অ্যান্ড্রয়েড স্টুডিও কনসোলে এবং আরও বিস্তারিত তথ্যসহ একটি JSON ফাইলে আউটপুট করে। এটি ট্রেস ফাইলও সরবরাহ করে যা আপনি অ্যান্ড্রয়েড স্টুডিওতে লোড এবং বিশ্লেষণ করতে পারেন।

"Benchmark in Continuous Integration"- এ বর্ণিত পদ্ধতি অনুসারে একটি কন্টিনিউয়াস ইন্টিগ্রেশন (CI) পরিবেশে ম্যাক্রোবেঞ্চমার্ক লাইব্রেরি ব্যবহার করুন।

আপনি ম্যাক্রোবেঞ্চমার্ক ব্যবহার করে বেসলাইন প্রোফাইল তৈরি করতে পারেন। প্রথমে, ম্যাক্রোবেঞ্চমার্ক লাইব্রেরিটি সেট আপ করুন, তারপর আপনি একটি বেসলাইন প্রোফাইল তৈরি করতে পারবেন।

Jetpack Compose দিয়ে তৈরি UI পরীক্ষা করার জন্য Macrobenchmark হলো প্রস্তাবিত টুল। আপনার Compose নোডগুলোর সাথে ইন্টারঅ্যাক্ট করে এমন UI Automator টেস্ট কীভাবে লিখতে হয় তা জানতে, Interoperability দেখুন।

প্রজেক্ট সেটআপ

আমরা আপনাকে অ্যান্ড্রয়েড স্টুডিও-র সর্বশেষ সংস্করণের সাথে ম্যাক্রোবেঞ্চমার্ক ব্যবহার করার পরামর্শ দিই।

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

ম্যাক্রোবেঞ্চমার্কের জন্য আপনার অ্যাপ কোড থেকে আলাদা একটি com.android.test মডিউল প্রয়োজন, যা আপনার অ্যাপের কার্যকারিতা পরিমাপকারী টেস্টগুলো চালানোর দায়িত্বে থাকে।

অ্যান্ড্রয়েড স্টুডিওতে ম্যাক্রোবেঞ্চমার্ক মডিউল সেটআপ সহজ করার জন্য একটি টেমপ্লেট রয়েছে। এই বেঞ্চমার্কিং মডিউল টেমপ্লেটটি আপনার প্রোজেক্টে স্বয়ংক্রিয়ভাবে একটি মডিউল তৈরি করে, যা একটি অ্যাপ মডিউল দ্বারা নির্মিত অ্যাপ পরিমাপের জন্য ব্যবহৃত হয় এবং এতে একটি নমুনা স্টার্টআপ বেঞ্চমার্কও অন্তর্ভুক্ত থাকে।

মডিউল টেমপ্লেট ব্যবহার করে একটি নতুন মডিউল তৈরি করতে, নিম্নলিখিতগুলি করুন:

  1. অ্যান্ড্রয়েড স্টুডিওর প্রজেক্ট প্যানেলে আপনার প্রজেক্ট বা মডিউলের উপর রাইট-ক্লিক করুন এবং New > Module নির্বাচন করুন।

  2. টেমপ্লেট প্যান থেকে বেঞ্চমার্ক নির্বাচন করুন। আপনি টার্গেট অ্যাপ—অর্থাৎ যে অ্যাপটির বেঞ্চমার্ক করা হবে—তার পাশাপাশি নতুন ম্যাক্রোবেঞ্চমার্ক মডিউলের জন্য প্যাকেজ এবং মডিউলের নামও কাস্টমাইজ করতে পারেন।

  3. শেষ করুন- এ ক্লিক করুন।

বেঞ্চমার্ক মডিউল টেমপ্লেট।
চিত্র ১. বেঞ্চমার্ক মডিউল টেমপ্লেট।

অ্যাপটি সেট আপ করুন

ম্যাক্রোবেঞ্চমার্কের টার্গেট হিসেবে পরিচিত কোনো অ্যাপকে বেঞ্চমার্ক করার জন্য, অ্যাপটিকে অবশ্যই profileable হতে হবে, যা পারফরম্যান্সকে প্রভাবিত না করেই বিস্তারিত ট্রেস তথ্য পড়ার সুযোগ দেয়। মডিউল উইজার্ড স্বয়ংক্রিয়ভাবে অ্যাপটির AndroidManifest.xml ফাইলে <profileable> ট্যাগটি যোগ করে দেয়।

নিশ্চিত করুন যে টার্গেট অ্যাপটিতে ProfilerInstaller 1.3 বা তার পরবর্তী সংস্করণ অন্তর্ভুক্ত আছে, যা Macrobenchmark লাইব্রেরির প্রোফাইল ক্যাপচার ও রিসেট এবং শেডার ক্যাশে ক্লিয়ারিং সক্ষম করার জন্য প্রয়োজন।

বেঞ্চমার্ক করা অ্যাপটিকে রিলিজ ভার্সন বা প্রোডাকশনের যতটা সম্ভব কাছাকাছি কনফিগার করুন। এটিকে নন-ডিবাগেবল হিসেবে সেট আপ করুন এবং সম্ভব হলে মিনিফিকেশন অন রাখুন, যা পারফরম্যান্স উন্নত করে। সাধারণত, রিলিজ ভ্যারিয়েন্টের একটি কপি তৈরি করে এটি করা হয়, যা একই কাজ করে কিন্তু ডিবাগ কী দিয়ে স্থানীয়ভাবে সাইন করা থাকে। বিকল্পভাবে, আপনি গ্রেডলকে এটি করার নির্দেশ দিতে initWith ব্যবহার করতে পারেন:

কোটলিন

buildTypes {
    getByName("release") {
        isMinifyEnabled = true
        isShrinkResources = true
        proguardFiles(getDefaultProguardFile("proguard-android-optimize.txt"))
    }

    create("benchmark") {
        initWith(getByName("release"))
        signingConfig = signingConfigs.getByName("debug")
    }
}

গ্রুভি

buildTypes {
    release {
        isMinifyEnabled = true
        isShrinkResources = true
        proguardFiles(
            getDefaultProguardFile("proguard-android-optimize.txt"),
            "keep-rules.pro"
        )
        // In real app, this would use its own release keystore
        signingConfig = signingConfigs.getByName("debug")
        baselineProfile.automaticGenerationDuringBuild = true
    }
}

চিত্র ২-এ দেখানো অনুযায়ী, বেঞ্চমার্কটি যেন আপনার অ্যাপের সঠিক সংস্করণটি বিল্ড ও টেস্ট করে, তা নিশ্চিত করতে নিম্নলিখিত পদক্ষেপগুলো অনুসরণ করুন:

  1. Gradle সিঙ্ক সম্পাদন করুন।
  2. বিল্ড ভ্যারিয়েন্টস প্যানেলটি খুলুন।
  3. অ্যাপ এবং ম্যাক্রোবেঞ্চমার্ক মডিউল উভয়ের বেঞ্চমার্ক ভ্যারিয়েন্ট নির্বাচন করুন।
বেঞ্চমার্ক ভ্যারিয়েন্ট নির্বাচন করুন।
চিত্র ২. বেঞ্চমার্ক ভ্যারিয়েন্টটি নির্বাচন করুন।

(ঐচ্ছিক) মাল্টি-মডিউল অ্যাপ সেট আপ করুন

আপনার অ্যাপে একাধিক গ্রেডল মডিউল থাকলে, আপনার বিল্ড স্ক্রিপ্টগুলো যেন জানে কোন বিল্ড ভ্যারিয়েন্টটি কম্পাইল করতে হবে, তা নিশ্চিত করুন। আপনার :macrobenchmark এবং :app মডিউলগুলোর benchmark বিল্ড টাইপে matchingFallbacks প্রপার্টিটি যোগ করুন। আপনার বাকি গ্রেডল মডিউলগুলোর কনফিগারেশন আগের মতোই থাকতে পারে।

কোটলিন

create("benchmark") {
    initWith(getByName("release"))
    signingConfig = signingConfigs.getByName("debug")

    matchingFallbacks += listOf("release")
 }

গ্রুভি

benchmark {
    initWith buildTypes.release
    signingConfig signingConfigs.debug

    matchingFallbacks = ['release']
 }

এটি ছাড়া, নতুন যোগ করা benchmark বিল্ড টাইপটির কারণে বিল্ডটি ব্যর্থ হয় এবং নিম্নলিখিত ত্রুটি বার্তাটি প্রদান করে:

> Could not resolve project :shared.
     Required by:
         project :app
      > No matching variant of project :shared was found.
      ...

আপনার প্রোজেক্টে বিল্ড ভ্যারিয়েন্ট নির্বাচন করার সময়, :app এবং :macrobenchmark মডিউলগুলোর জন্য benchmark এবং আপনার অ্যাপে থাকা অন্য যেকোনো মডিউলের জন্য release বেছে নিন, যেমনটি চিত্র ৩-এ দেখানো হয়েছে:

রিলিজ এবং বেঞ্চমার্ক বিল্ড টাইপ নির্বাচিত সহ মাল্টি-মডিউল প্রকল্পের জন্য বেঞ্চমার্ক ভ্যারিয়েন্টসমূহ।
চিত্র ৩. রিলিজ এবং বেঞ্চমার্ক বিল্ড টাইপ নির্বাচিত সহ মাল্টি-মডিউল প্রকল্পের জন্য বেঞ্চমার্ক ভ্যারিয়েন্টসমূহ।

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

(ঐচ্ছিক) পণ্যের ফ্লেভার সেট আপ করুন

আপনার অ্যাপে একাধিক প্রোডাক্ট ফ্লেভার সেট করা থাকলে, :macrobenchmark মডিউলটি এমনভাবে কনফিগার করুন যাতে এটি জানতে পারে আপনার অ্যাপের কোন প্রোডাক্ট ফ্লেভারটি বিল্ড ও বেঞ্চমার্ক করতে হবে।

এই পৃষ্ঠার উদাহরণগুলিতে :app মডিউলে demo এবং production এই দুটি প্রোডাক্ট ফ্লেভার ব্যবহার করা হয়েছে, যা নিম্নলিখিত কোড স্নিপেটে দেখানো হয়েছে:

কোটলিন

flavorDimensions += "environment"
productFlavors {
    create("demo") {
        dimension = "environment"
        // ...
    }
    create("production") {
        dimension = "environment"
        // ...
    }
}

গ্রুভি

flavorDimensions 'environment'
productFlavors {
    demo {
        dimension 'environment'
        // ...
    }

    production {
        dimension 'environment'
        // ...
    }
}

এই কনফিগারেশন ছাড়া, আপনি একাধিক গ্রেডল মডিউলের কারণে সৃষ্ট বিল্ড এররের অনুরূপ একটি এরর পেতে পারেন:

Could not determine the dependencies of task ':macrobenchmark:connectedBenchmarkAndroidTest'.
> Could not determine the dependencies of null.
   > Could not resolve all task dependencies for configuration ':macrobenchmark:benchmarkTestedApks'.
      > Could not resolve project :app.
        Required by:
            project :macrobenchmark
         > The consumer was configured to find a runtime of a component, as well as attribute 'com.android.build.api.attributes.BuildTypeAttr' with value 'benchmark', attribute 'com.android.build.api.attributes.AgpVersionAttr' with value '7.3.0'. However we cannot choose between the following variants of project :app:
             -   demoBenchmarkRuntimeElements
             -   productionBenchmarkRuntimeElements
           All of them match the consumer attributes:
           ...

পরবর্তী দুটি বিভাগে একাধিক প্রোডাক্ট ফ্লেভার ব্যবহার করে বেঞ্চমার্কিং কনফিগার করার পদ্ধতি বর্ণনা করা হয়েছে।

missingDimensionStrategy ব্যবহার করুন

:macrobenchmark মডিউলের defaultConfigmissingDimensionStrategy উল্লেখ করলে বিল্ড সিস্টেমকে ফ্লেভার ডাইমেনশন ব্যবহার করতে বলা হয়। মডিউলে ডাইমেনশনগুলো খুঁজে না পেলে, সেগুলো ব্যবহার করার জন্য নির্দিষ্ট করে দিন। নিচের উদাহরণে, production ফ্লেভারকে ডিফল্ট ডাইমেনশন হিসেবে ব্যবহার করা হয়েছে:

কোটলিন

defaultConfig {
    missingDimensionStrategy("environment", "production")
}

গ্রুভি

defaultConfig {
    missingDimensionStrategy "environment", "production"
}

এইভাবে, :macrobenchmark মডিউলটি শুধুমাত্র নির্দিষ্ট প্রোডাক্ট ফ্লেভারটিকেই বিল্ড ও বেঞ্চমার্ক করতে পারে, যা তখন সহায়ক হয় যখন আপনি জানেন যে শুধুমাত্র একটি প্রোডাক্ট ফ্লেভারেরই বেঞ্চমার্ক করার জন্য উপযুক্ত কনফিগারেশন রয়েছে।

:macrobenchmark মডিউলে পণ্যের ফ্লেভারগুলি সংজ্ঞায়িত করুন

আপনি যদি অন্যান্য প্রোডাক্ট ফ্লেভার তৈরি ও বেঞ্চমার্ক করতে চান, তাহলে সেগুলোকে :macrobenchmark মডিউলে সংজ্ঞায়িত করুন। এটিকে :app মডিউলের মতোই নির্দিষ্ট করুন, কিন্তু শুধুমাত্র productFlavors একটি dimension অ্যাসাইন করুন। অন্য কোনো সেটিংসের প্রয়োজন নেই:

কোটলিন

flavorDimensions += "environment"
productFlavors {
    create("demo") {
        dimension = "environment"
    }
    create("production") {
        dimension = "environment"
    }
}

গ্রুভি

flavorDimensions 'environment'
productFlavors {
    demo {
        dimension 'environment'
    }

    production {
        dimension 'environment'
    }
}

প্রজেক্টটি সংজ্ঞায়িত ও সিঙ্ক করার পর, চিত্র ৪-এ দেখানো অনুযায়ী বিল্ড ভ্যারিয়েন্টস প্যান থেকে প্রাসঙ্গিক বিল্ড ভ্যারিয়েন্টটি বেছে নিন:

প্রোডাকশন বেঞ্চমার্ক এবং রিলিজ নির্বাচিত দেখানো প্রোডাক্ট ফ্লেভার সহ প্রজেক্টের জন্য বেঞ্চমার্ক ভ্যারিয়েন্টসমূহ।
চিত্র ৪। প্রজেক্টটির বেঞ্চমার্ক ভ্যারিয়েন্টসমূহ, যেখানে 'productionBenchmark' এবং 'release' প্রোডাক্ট ফ্লেভারগুলো নির্বাচিত অবস্থায় দেখানো হয়েছে।

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

একটি ম্যাক্রোবেঞ্চমার্ক ক্লাস তৈরি করুন

ম্যাক্রোবেঞ্চমার্ক লাইব্রেরির MacrobenchmarkRule ) JUnit4 রুল এপিআই-এর মাধ্যমে বেঞ্চমার্ক টেস্টিং প্রদান করা হয়। এতে একটি measureRepeated মেথড রয়েছে, যা আপনাকে টার্গেট অ্যাপটি কীভাবে রান ও বেঞ্চমার্ক করা হবে, সে বিষয়ে বিভিন্ন শর্ত নির্দিষ্ট করার সুযোগ দেয়।

আপনাকে অন্তত টার্গেট অ্যাপের packageName , আপনি কোন metrics পরিমাপ করতে চান এবং বেঞ্চমার্কটি কতবার iterations হবে, তা নির্দিষ্ট করতে হবে।

কোটলিন

@LargeTest
@RunWith(AndroidJUnit4::class)
class SampleStartupBenchmark {
    @get:Rule
    val benchmarkRule = MacrobenchmarkRule()

    @Test
    fun startup() = benchmarkRule.measureRepeated(
        packageName = TARGET_PACKAGE,
        metrics = listOf(StartupTimingMetric()),
        iterations = DEFAULT_ITERATIONS,
    ) {
        // starts default launch activity
        uiAutomator { startApp(TARGET_PACKAGE) }
    }
}

আপনার বেঞ্চমার্ক কাস্টমাইজ করার সমস্ত বিকল্পের জন্য, "বেঞ্চমার্ক কাস্টমাইজ করুন" বিভাগটি দেখুন।

বেঞ্চমার্ক কম্পোজ UI ইন্টারঅ্যাকশন

পূর্ববর্তী উদাহরণটি অ্যাপ চালু হওয়া পরিমাপ করলেও, আপনি প্রায়শই UI পারফরম্যান্স পরিমাপ করতে চাইবেন, যেমন স্ক্রোল করার সময় ফ্রেম ড্রপ ( জ্যাঙ্ক )।

একটি Jetpack Compose অ্যাপ্লিকেশনের বেঞ্চমার্কিং করার জন্য, যেমন একটি LazyColumn স্ক্রোল করার সময় FrameTimingMetric পরিমাপ করতে, আপনি UI Automator ব্যবহার করে সরাসরি আপনার Compose নোডগুলির সাথে ইন্টারঅ্যাক্ট করতে পারেন, যেমনটি নিম্নলিখিত কোড স্নিপেটে দেখানো হয়েছে।

@LargeTest
@RunWith(AndroidJUnit4::class)
class ComposeScrollBenchmark {
    @get:Rule
    val benchmarkRule = MacrobenchmarkRule()

    @Test
    fun scrollLazyColumn() = benchmarkRule.measureRepeated(
        packageName = "com.example.compose.app",
        metrics = listOf(FrameTimingMetric()),
        iterations = 5,
        startupMode = StartupMode.WARM,
        setupBlock = { pressHome() }
    ) {
        startActivityAndWait()

        // Find the Compose node using the testTag defined in your app
        val lazyColumn = device.findObject(By.res("my_lazy_column"))

        // Simulate a scroll gesture to measure FrameTimingMetric
        lazyColumn.setGestureMargin(device.displayWidth / 5)
        lazyColumn.fling(Direction.DOWN)
    }
}

বেঞ্চমার্কটি চালান

আপনার ডিভাইসে আপনার অ্যাপের পারফরম্যান্স পরিমাপ করতে অ্যান্ড্রয়েড স্টুডিওর ভেতর থেকে পরীক্ষাটি চালান। চিত্র ৫-এ দেখানো অনুযায়ী, আপনার টেস্ট ক্লাস বা মেথডের পাশের গাটার অ্যাকশন ব্যবহার করে আপনি অন্য যেকোনো @Test মতোই বেঞ্চমার্কগুলো চালাতে পারেন।

টেস্ট ক্লাসের পাশে গাটার অ্যাকশন ব্যবহার করে ম্যাক্রোবেঞ্চমার্ক চালান।
চিত্র ৫। টেস্ট ক্লাসের পাশে গাটার অ্যাকশন ব্যবহার করে ম্যাক্রোবেঞ্চমার্ক চালান।

এছাড়াও আপনি কমান্ড লাইন থেকে connectedCheck কমান্ডটি চালিয়ে একটি Gradle মডিউলের সমস্ত বেঞ্চমার্ক চালাতে পারেন:

./gradlew :macrobenchmark:connectedCheck

নিম্নলিখিতটি সম্পাদন করে আপনি একটি একক পরীক্ষা চালাতে পারেন:

./gradlew :macrobenchmark:connectedCheck -P android.testInstrumentationRunnerArguments.class=com.example.macrobenchmark.startup.SampleStartupBenchmark#startup

কন্টিনিউয়াস ইন্টিগ্রেশনে কীভাবে বেঞ্চমার্ক চালানো ও মনিটর করা যায়, সে সম্পর্কে তথ্যের জন্য ‘Benchmark in Continuous Integration’ দেখুন।

বেঞ্চমার্ক ফলাফল

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

ম্যাক্রোবেঞ্চমার্ক স্টার্টআপ ফলাফল।
চিত্র ৬. ম্যাক্রোবেঞ্চমার্ক স্টার্টআপ ফলাফল।

যখন ট্রেসটি লোড হয়, অ্যান্ড্রয়েড স্টুডিও আপনাকে বিশ্লেষণ করার জন্য প্রসেসটি নির্বাচন করতে বলে। নির্বাচনের স্থানটি টার্গেট অ্যাপ প্রসেস দিয়ে আগে থেকেই পূরণ করা থাকে, যেমনটি চিত্র ৭-এ দেখানো হয়েছে:

স্টুডিও ট্রেস প্রক্রিয়া নির্বাচন।
চিত্র ৭. স্টুডিও ট্রেস প্রক্রিয়া নির্বাচন।

ট্রেস ফাইলটি লোড হওয়ার পর, স্টুডিও সিপিইউ প্রোফাইলার টুলে ফলাফলগুলো দেখায়:

স্টুডিও ট্রেস।
চিত্র ৮. স্টুডিও ট্রেস।

JSON রিপোর্ট এবং যেকোনো প্রোফাইলিং ট্রেসও ডিভাইস থেকে হোস্টে স্বয়ংক্রিয়ভাবে কপি করা হয়। এগুলো হোস্ট মেশিনে নিম্নলিখিত স্থানে লেখা হয়:

project_root/module/build/outputs/connected_android_test_additional_output/debugAndroidTest/connected/device_id/

ট্রেস ফাইলগুলি ম্যানুয়ালি অ্যাক্সেস করুন

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

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

project_root/module/build/outputs/connected_android_test_additional_output/debugAndroidTest/connected/device_id/TrivialStartupBenchmark_startup[mode=COLD]_iter002.perfetto-trace

আপনার হোস্ট সিস্টেমে ট্রেস ফাইলটি থাকলে, আপনি অ্যান্ড্রয়েড স্টুডিওর মেনু থেকে ফাইল > ওপেন (File > Open) অপশন ব্যবহার করে সেটি খুলতে পারেন। এতে আগের অংশে দেখানো প্রোফাইলার টুল ভিউটি দেখা যাবে।

কনফিগারেশন ত্রুটি

অ্যাপটি যদি ভুলভাবে কনফিগার করা থাকে—অর্থাৎ ডিবাগযোগ্য বা প্রোফাইলযোগ্য না হয়—তাহলে ম্যাক্রোবেঞ্চমার্ক কোনো ভুল বা অসম্পূর্ণ পরিমাপ রিপোর্ট করার পরিবর্তে একটি এরর দেখায়। আপনি androidx.benchmark.suppressErrors আর্গুমেন্ট ব্যবহার করে এই এররগুলো দমন করতে পারেন।

এমুলেটর পরিমাপ করার চেষ্টা করার সময় বা কম ব্যাটারির ডিভাইসে ম্যাক্রোবেঞ্চমার্ক ত্রুটিও দেখায়, যা কোরের প্রাপ্যতা এবং ক্লক স্পিডকে ব্যাহত করতে পারে।

বেঞ্চমার্কগুলি কাস্টমাইজ করুন

measureRepeated ফাংশনটি বিভিন্ন প্যারামিটার গ্রহণ করে, যা লাইব্রেরিটি কোন কোন মেট্রিক সংগ্রহ করবে, আপনার অ্যাপটি কীভাবে শুরু ও কম্পাইল করা হবে, অথবা বেঞ্চমার্কটি কতবার চলবে তা প্রভাবিত করে।

মেট্রিকগুলো সংগ্রহ করুন

মেট্রিক্স হলো আপনার বেঞ্চমার্ক থেকে সংগৃহীত তথ্যের প্রধান ধরন। নিম্নলিখিত মেট্রিক্সগুলো উপলব্ধ আছে:

মেট্রিক্স সম্পর্কে আরও তথ্যের জন্য, ম্যাক্রোবেঞ্চমার্ক মেট্রিক্স ক্যাপচার দেখুন।

কাস্টম ইভেন্টের মাধ্যমে ট্রেস ডেটা উন্নত করুন

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

সংকলন মোড

ম্যাক্রোবেঞ্চমার্ক একটি CompilationMode নির্দিষ্ট করতে পারে, যা নির্ধারণ করে যে অ্যাপটির কতটুকু অংশকে DEX বাইটকোড (একটি APK-এর ভেতরের বাইটকোড ফরম্যাট) থেকে মেশিন কোডে (প্রি-কম্পাইলড C++ এর মতো) প্রি-কম্পাইল করতে হবে।

ডিফল্টরূপে, ম্যাক্রোবেঞ্চমার্কগুলো CompilationMode.DEFAULT মোডে রান হয়, যা অ্যান্ড্রয়েড ৭ (এপিআই লেভেল ২৪) এবং এর পরবর্তী সংস্করণগুলোতে একটি বেসলাইন প্রোফাইল—যদি উপলব্ধ থাকে—ইনস্টল করে। আপনি যদি অ্যান্ড্রয়েড ৬ (এপিআই লেভেল ২৩) বা তার আগের সংস্করণ ব্যবহার করেন, তবে ডিফল্ট সিস্টেম আচরণ অনুযায়ী কম্পাইলেশন মোডটি APK-টিকে সম্পূর্ণরূপে কম্পাইল করে।

যদি টার্গেট অ্যাপটিতে বেসলাইন প্রোফাইল এবং ProfileInstaller লাইব্রেরি উভয়ই থাকে, তবে আপনি একটি বেসলাইন প্রোফাইল ইনস্টল করতে পারবেন।

অ্যান্ড্রয়েড ৭ এবং এর পরবর্তী সংস্করণগুলিতে, আপনি ডিভাইসে প্রি-কম্পাইলেশনের পরিমাণকে প্রভাবিত করতে CompilationMode কাস্টমাইজ করতে পারেন, যা অ্যাহেড-অফ-টাইম (AOT) কম্পাইলেশন বা JIT ক্যাশিংয়ের বিভিন্ন স্তরকে অনুকরণ করে। CompilationMode.Full , CompilationMode.Partial , CompilationMode.None , এবং CompilationMode.Ignore দেখুন।

এই ফিচারটি ART কম্পাইলেশন কমান্ডের উপর ভিত্তি করে তৈরি। প্রতিটি বেঞ্চমার্ক শুরু হওয়ার আগে প্রোফাইল ডেটা মুছে ফেলে, যাতে বেঞ্চমার্কগুলোর মধ্যে কোনো হস্তক্ষেপ না ঘটে তা নিশ্চিত করা যায়।

স্টার্টআপমোড

কোনো অ্যাক্টিভিটি শুরু করার জন্য, আপনি একটি পূর্বনির্ধারিত স্টার্টআপ মোড নির্ধারণ করতে পারেন: COLD , WARM , বা HOT । এই প্যারামিটারটি নির্ধারণ করে যে অ্যাক্টিভিটিটি কীভাবে চালু হবে এবং পরীক্ষা শুরুর সময় প্রসেসের অবস্থা কী থাকবে।

স্টার্টআপের প্রকারভেদ সম্পর্কে আরও জানতে, অ্যাপ স্টার্টআপের সময় দেখুন।

নমুনা

গিটহাবের রিপোজিটরির ম্যাক্রোবেঞ্চমার্ক স্যাম্পল -এ একটি নমুনা প্রজেক্ট পাওয়া যাবে।

মতামত দিন

Jetpack Macrobenchmark-এর জন্য সমস্যা জানাতে বা ফিচার অনুরোধ জমা দিতে, পাবলিক ইস্যু ট্র্যাকারটি দেখুন।

{% হুবহু %} {% endverbatim %} {% হুবহু %} {% endverbatim %}