বেসলাইন প্রোফাইল তৈরি করুন

Jetpack Macrobenchmark লাইব্রেরি এবং BaselineProfileRule ব্যবহার করে প্রতিটি অ্যাপ রিলিজের জন্য স্বয়ংক্রিয়ভাবে প্রোফাইল তৈরি করুন। আমরা আপনাকে com.android.tools.build:gradle:8.0.0 বা তার উচ্চতর সংস্করণ ব্যবহার করার পরামর্শ দিই, যা Baseline Profiles ব্যবহারের ক্ষেত্রে বিল্ডের উন্নতি নিয়ে আসে।

একটি নতুন বেসলাইন প্রোফাইল তৈরি করার সাধারণ ধাপগুলো হলো:

  1. বেসলাইন প্রোফাইল মডিউলটি সেট আপ করুন।
  2. বেসলাইন প্রোফাইল তৈরি করতে সাহায্যকারী JUnit টেস্টটি সংজ্ঞায়িত করুন।
  3. যে গুরুত্বপূর্ণ ব্যবহারকারী যাত্রাগুলো (CUJ) আপনি অপ্টিমাইজ করতে চান, সেগুলো যোগ করুন।
  4. বেসলাইন প্রোফাইলটি তৈরি করুন।

বেসলাইন প্রোফাইল তৈরি করার পর, গতির উন্নতি পরিমাপ করতে একটি বাস্তব ডিভাইস ব্যবহার করে সেটির বেঞ্চমার্ক পরীক্ষা করুন।

AGP 8.2 বা উচ্চতর সংস্করণ দিয়ে একটি নতুন বেসলাইন প্রোফাইল তৈরি করুন

একটি নতুন বেসলাইন প্রোফাইল তৈরি করার সবচেয়ে সহজ উপায় হলো বেসলাইন প্রোফাইল মডিউল টেমপ্লেট ব্যবহার করা, যা অ্যান্ড্রয়েড স্টুডিও ইগুয়ানা এবং অ্যান্ড্রয়েড গ্রেডল প্লাগইন (এজিপি) ৮.২ থেকে পাওয়া যায়।

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

বেসলাইন প্রোফাইল মডিউল সেট আপ করুন

বেসলাইন প্রোফাইল মডিউল টেমপ্লেটটি চালানোর জন্য, এই ধাপগুলো অনুসরণ করুন:

  1. ফাইল > নতুন > নতুন মডিউল নির্বাচন করুন
  2. টেমপ্লেট প্যানেল থেকে বেসলাইন প্রোফাইল জেনারেটর টেমপ্লেটটি নির্বাচন করুন এবং এটি কনফিগার করুন:
    চিত্র ১. বেসলাইন প্রোফাইল জেনারেটর মডিউল টেমপ্লেট।

    টেমপ্লেটের ফিল্ডগুলো হলো নিম্নরূপ:

    • টার্গেট অ্যাপ্লিকেশন : এটি নির্ধারণ করে যে কোন অ্যাপের জন্য বেসলাইন প্রোফাইল তৈরি করা হবে। আপনার প্রোজেক্টে যখন কেবল একটি অ্যাপ মডিউল থাকে, তখন এই তালিকায় একটিমাত্র আইটেম থাকে।
    • মডিউলের নাম : যে বেসলাইন প্রোফাইল মডিউলটি তৈরি করা হচ্ছে, তার জন্য আপনার পছন্দের নাম।
    • প্যাকেজের নাম : বেসলাইন প্রোফাইল মডিউলের জন্য আপনার পছন্দের প্যাকেজের নাম।
    • ভাষা : আপনি তৈরি হওয়া কোডটি কোটলিন নাকি জাভাতে চান।
    • বিল্ড কনফিগারেশন ভাষা : আপনার বিল্ড কনফিগারেশন স্ক্রিপ্টগুলোর জন্য আপনি কোটলিন স্ক্রিপ্ট (KTS) নাকি গ্রুভি ব্যবহার করতে চান।
    • Gradle-পরিচালিত ডিভাইস ব্যবহার করুন : যদি আপনি আপনার অ্যাপ পরীক্ষা করার জন্য Gradle-পরিচালিত ডিভাইস ব্যবহার করে থাকেন।
  3. ফিনিশ-এ ক্লিক করলে নতুন মডিউলটি তৈরি হয়ে যাবে। আপনি যদি সোর্স কন্ট্রোল ব্যবহার করেন, তাহলে নতুন তৈরি করা মডিউল ফাইলগুলো সোর্স কন্ট্রোলে যুক্ত করার জন্য আপনাকে অনুরোধ করা হতে পারে।

বেসলাইন প্রোফাইল জেনারেটর সংজ্ঞায়িত করুন

নতুন তৈরি করা মডিউলটিতে বেসলাইন প্রোফাইল তৈরি ও বেঞ্চমার্ক করার জন্য এবং শুধুমাত্র বেসিক অ্যাপ স্টার্টআপ পরীক্ষা করার জন্য টেস্ট রয়েছে। আমরা সুপারিশ করি যে আপনি CUJ এবং অ্যাডভান্সড স্টার্টআপ ওয়ার্কফ্লো অন্তর্ভুক্ত করার জন্য এগুলোকে আরও উন্নত করুন। নিশ্চিত করুন যে অ্যাপ স্টার্টআপ সম্পর্কিত যেকোনো টেস্ট একটি rule ব্লকের মধ্যে থাকে, যেখানে includeInStartupProfile true সেট করা আছে; বিপরীতভাবে, সর্বোত্তম পারফরম্যান্সের জন্য নিশ্চিত করুন যে অ্যাপ স্টার্টআপের সাথে সম্পর্কিত নয় এমন কোনো টেস্ট যেন স্টার্টআপ প্রোফাইলে অন্তর্ভুক্ত না থাকে। অ্যাপ স্টার্টআপ অপটিমাইজেশনগুলো বেসলাইন প্রোফাইলের একটি বিশেষ অংশ, যাকে স্টার্টআপ প্রোফাইল বলা হয়, তা সংজ্ঞায়িত করতে ব্যবহৃত হয়।

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

বেসলাইন প্রোফাইল তৈরি এবং ইনস্টল করুন

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

বেসলাইন প্রোফাইল তৈরি করার রান কনফিগারেশন।
চিত্র ২। এই কনফিগারেশনটি চালালে বেসলাইন প্রোফাইল তৈরি হয়।

যখন 'Generate Baseline Profile' রান কনফিগারেশনটি সম্পন্ন হয়, তখন এটি তৈরি করা বেসলাইন প্রোফাইলটিকে প্রোফাইল করা হচ্ছে এমন মডিউলের src/ variant /generated/baselineProfiles/baseline-prof.txt ফাইলে কপি করে। ভ্যারিয়েন্ট অপশনগুলো হলো হয় রিলিজ বিল্ড টাইপ অথবা রিলিজ বিল্ড টাইপ-সংশ্লিষ্ট কোনো বিল্ড ভ্যারিয়েন্ট।

জেনারেট করা বেসলাইন প্রোফাইলটি মূলত build/outputs এ তৈরি করা হয়। সম্পূর্ণ পাথটি নির্ভর করে প্রোফাইল করা অ্যাপটির ভ্যারিয়েন্ট বা ফ্লেভার এবং আপনি প্রোফাইলিংয়ের জন্য গ্রেডল-ম্যানেজড ডিভাইস নাকি কানেক্টেড ডিভাইস ব্যবহার করছেন তার উপর। আপনি যদি টেমপ্লেট দ্বারা জেনারেট করা কোড এবং বিল্ড কনফিগারেশনে ব্যবহৃত নামগুলো ব্যবহার করেন, তাহলে বেসলাইন প্রোফাইলটি build/outputs/managed_device_android_test_additional_output/nonminifiedrelease/pixel6Api31/BaselineProfileGenerator_generate-baseline-prof.txt ফাইলে তৈরি হয়। সম্ভবত আপনাকে জেনারেট করা বেসলাইন প্রোফাইলের এই সংস্করণটির সাথে সরাসরি ইন্টারঅ্যাক্ট করতে হবে না, যদি না আপনি এটিকে ম্যানুয়ালি টার্গেট মডিউলগুলোতে কপি করেন (যা সুপারিশ করা হয় না)।

AGP 8.1 দিয়ে একটি নতুন বেসলাইন প্রোফাইল তৈরি করুন

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

ম্যাক্রোবেঞ্চমার্ক মডিউল টেমপ্লেট এবং বেসলাইন প্রোফাইল গ্রেডল প্লাগইন ব্যবহার করে একটি নতুন বেসলাইন প্রোফাইল তৈরি করার ধাপগুলো নিচে দেওয়া হলো:

  1. আপনার গ্রেডল প্রজেক্টে একটি ম্যাক্রোবেঞ্চমার্ক মডিউল সেট আপ করুন
  2. BaselineProfileGenerator নামে একটি নতুন ক্লাস সংজ্ঞায়িত করুন:
    class BaselineProfileGenerator {
        @get:Rule
        val baselineProfileRule = BaselineProfileRule()
    
        @Test
        fun startup() = baselineProfileRule.collect(
            packageName = "com.example.app",
            profileBlock = {
                startActivityAndWait()
            }
        )
    }

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

  3. বেসলাইন প্রোফাইল গ্র্যাডল প্লাগইনটি ( libs.plugins.androidx.baselineprofile ) যোগ করুন। এই প্লাগইনটি বেসলাইন প্রোফাইল তৈরি করা এবং ভবিষ্যতে সেগুলোর রক্ষণাবেক্ষণ করা সহজ করে তোলে।

  4. বেসলাইন প্রোফাইল তৈরি করতে, টার্মিনালে :app:generateBaselineProfile অথবা :app:generate Variant BaselineProfile গ্রেডল টাস্কগুলো চালান।

    জেনারেটরটিকে একটি রুটেড ফিজিক্যাল ডিভাইস, এমুলেটর, বা গ্রেডল ম্যানেজড ডিভাইসে ইন্সট্রুমেন্টেড টেস্ট হিসেবে চালান। যদি আপনি একটি গ্রেডল ম্যানেজড ডিভাইস ব্যবহার করেন, তাহলে systemImageSource হিসেবে aosp সেট করুন, কারণ বেসলাইন প্রোফাইল জেনারেটরের জন্য আপনার রুট অ্যাক্সেস প্রয়োজন।

    জেনারেশন টাস্কের শেষে, বেসলাইন প্রোফাইলটি app/src/ variant /generated/baselineProfiles এ কপি করা হয়।

টেমপ্লেট ছাড়া একটি নতুন বেসলাইন প্রোফাইল তৈরি করুন

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

সরাসরি বেসলাইন প্রোফাইল গ্র্যাডল প্লাগইন ব্যবহার করে কীভাবে একটি বেসলাইন প্রোফাইল তৈরি করবেন তা এখানে দেওয়া হলো:

  1. একটি নতুন com.android.test মডিউল তৈরি করুন—উদাহরণস্বরূপ, :baseline-profile
  2. :baseline-profile এর জন্য build.gradle.kts ফাইলটি কনফিগার করুন:

    1. androidx.baselineprofile প্লাগইনটি প্রয়োগ করুন।
    2. নিশ্চিত করুন যে targetProjectPath , :app মডিউলটিকে নির্দেশ করে।
    3. ঐচ্ছিকভাবে, একটি গ্রেডল-পরিচালিত ডিভাইস (GMD) যোগ করুন। নিচের উদাহরণে, এটি হলো pixel6Api31 । যদি নির্দিষ্ট করে না দেওয়া হয়, তাহলে প্লাগইনটি একটি সংযুক্ত ডিভাইস ব্যবহার করে, যা অনুকৃত বা ভৌত হতে পারে।
    4. নিম্নলিখিত উদাহরণে দেখানো অনুযায়ী আপনার পছন্দসই কনফিগারেশনটি প্রয়োগ করুন।

    কোটলিন

    plugins {
        id("com.android.test")
        id("androidx.baselineprofile")
    }
    
    android {
        defaultConfig {
            ...
        }
    
        // Point to the app module, the module that you're generating the Baseline Profile for.
        targetProjectPath = ":app"
        // Configure a GMD (optional).
        testOptions.managedDevices.devices {
            pixel6Api31(com.android.build.api.dsl.ManagedVirtualDevice) {
                device = "Pixel 6"
                apiLevel = 31
                systemImageSource = "aosp"
            }
        }
    }
    
    dependencies { ... }
    
    // Baseline Profile Gradle plugin configuration. Everything is optional. This
    // example uses the GMD added earlier and disables connected devices.
    baselineProfile {
        // Specifies the GMDs to run the tests on. The default is none.
        managedDevices += "pixel6Api31"
        // Enables using connected devices to generate profiles. The default is
        // `true`. When using connected devices, they must be rooted or API 33 and
        // higher.
        useConnectedDevices = false
    }

    গ্রুভি

    plugins {
        id 'com.android.test'
        id 'androidx.baselineprofile'
    }
    
    android {
        defaultConfig {
            ...
        }
    
        // Point to the app module, the module that you're generating the Baseline Profile for.
        targetProjectPath ':app'
        // Configure a GMD (optional).
        testOptions.managedDevices.devices {
            pixel6Api31(com.android.build.api.dsl.ManagedVirtualDevice) {
                device 'Pixel 6'
                apiLevel 31
                systemImageSource 'aosp'
            }
        }
    }
    
    dependencies { ... }
    
    // Baseline Profile Gradle plugin configuration. Everything is optional. This
    // example uses the GMD added earlier and disables connected devices.
    baselineProfile {
        // Specifies the GMDs to run the tests on. The default is none.
        managedDevices ['pixel6Api31']
        // Enables using connected devices to generate profiles. The default is
        // `true`. When using connected devices, they must be rooted or API 33 and
        // higher.
        useConnectedDevices false
    }
  3. :baseline-profile টেস্ট মডিউলে একটি বেসলাইন প্রোফাইল টেস্ট তৈরি করুন। নিচের উদাহরণটি এমন একটি টেস্ট যা অ্যাপ চালুর জন্য একটি বেসলাইন প্রোফাইল তৈরি করে।

    কোটলিন

    class BaselineProfileGenerator {
    @get:Rule
    val baselineProfileRule = BaselineProfileRule()
    
    @Test
    fun startup() = baselineProfileRule.collect(
        packageName = "com.example.app",
        profileBlock = {
            uiAutomator { startApp(PACKAGE_NAME) }
        }
    )
    }

    জাভা

    public class BaselineProfileGenerator {
    
        @Rule
        Public BaselineProfileRule baselineRule = new BaselineProfileRule();
    
        @Test
        Public void startupBaselineProfile() {
            baselineRule.collect(
                "com.myapp",
                (scope -> {
                    scope.startActivityAndWait();
                    Return Unit.INSTANCE;
                })
            )
        }
    }
  4. অ্যাপ মডিউলের build.gradle.kts ফাইলটি আপডেট করুন, উদাহরণস্বরূপ :app

    1. androidx.baselineprofile প্লাগইনটি প্রয়োগ করুন।
    2. :baseline-profile মডিউলে একটি baselineProfile ডিপেন্ডেন্সি যোগ করুন।

    কোটলিন

    plugins {
        id("com.android.application")
        id("androidx.baselineprofile")
    }
    
    android {
        // There are no changes to the `android` block.
        ...
    }
    
    dependencies {
        ...
        // Add a `baselineProfile` dependency on the `:baseline-profile` module.
        baselineProfile(project(":baseline-profile"))
    }

    গ্রুভি

    plugins {
        id 'com.android.application'
        id 'androidx.baselineprofile'
    }
    
    android {
        // No changes to the `android` block.
        ...
    }
    
    dependencies {
        ...
        // Add a `baselineProfile` dependency on the `:baseline-profile` module.
        baselineProfile ':baseline-profile'
    }
  5. :app:generateBaselineProfile অথবা :app:generate Variant BaselineProfile গ্রেডল টাস্কগুলো চালিয়ে প্রোফাইলটি তৈরি করুন।

  6. জেনারেশন টাস্কের শেষে, বেসলাইন প্রোফাইলটি app/src/ variant /generated/baselineProfiles এ কপি করা হয়।

AGP 7.3-7.4 দিয়ে একটি নতুন বেসলাইন প্রোফাইল তৈরি করুন।

AGP 7.3-7.4 দিয়ে বেসলাইন প্রোফাইল তৈরি করা সম্ভব, কিন্তু আমরা অন্তত AGP 8.1-এ আপগ্রেড করার জন্য দৃঢ়ভাবে সুপারিশ করছি, যাতে আপনি বেসলাইন প্রোফাইল গ্র্যাডল প্লাগইন এবং এর সর্বশেষ ফিচারগুলো ব্যবহার করতে পারেন।

যদি আপনাকে AGP 7.3-7.4 দিয়ে বেসলাইন প্রোফাইল তৈরি করতে হয়, তাহলে এর ধাপগুলো AGP 8.1-এর ধাপগুলোর মতোই, তবে নিম্নলিখিত ব্যতিক্রমগুলো রয়েছে:

তৈরি করা নিয়মগুলি ম্যানুয়ালি প্রয়োগ করুন

বেসলাইন প্রোফাইল জেনারেটর ডিভাইসে একটি হিউম্যান রিডেবল ফরম্যাট (HRF) টেক্সট ফাইল তৈরি করে এবং এটি আপনার হোস্ট মেশিনে কপি করে। আপনার কোডে তৈরি করা প্রোফাইলটি প্রয়োগ করতে, এই ধাপগুলো অনুসরণ করুন:

  1. যে মডিউলে আপনি প্রোফাইল তৈরি করেন, তার বিল্ড ফোল্ডারে HRF ফাইলটি খুঁজুন: [module]/build/outputs/managed_device_android_test_additional_output/[device]

    প্রোফাইলগুলো [class name]-[test method name]-baseline-prof.txt নামকরণের প্যাটার্ন অনুসরণ করে, যা দেখতে এইরকম: BaselineProfileGenerator-startup-baseline-prof.txt

  2. তৈরি হওয়া প্রোফাইলটি src/main/ ফোল্ডারে কপি করুন এবং ফাইলটির নাম পরিবর্তন করে baseline-prof.txt রাখুন।

  3. যেখানে ক্লাউড প্রোফাইল উপলব্ধ নেই, সেখানে স্থানীয়ভাবে বেসলাইন প্রোফাইল কম্পাইলেশন সক্ষম করতে আপনার অ্যাপের build.gradle.kts ফাইলে ProfileInstaller লাইব্রেরির একটি ডিপেন্ডেন্সি যোগ করুন। স্থানীয়ভাবে একটি বেসলাইন প্রোফাইল সাইডলোড করার এটিই একমাত্র উপায়।

    dependencies {
         implementation("androidx.profileinstaller:profileinstaller:1.4.1")
    }
    
  4. যখন প্রয়োগকৃত HRF নিয়মগুলো বাইনারি আকারে কম্পাইল করে APK বা AAB-তে অন্তর্ভুক্ত করা হবে, তখন আপনার অ্যাপের প্রোডাকশন সংস্করণটি তৈরি করুন। এরপর যথারীতি আপনার অ্যাপটি বিতরণ করুন।

বেসলাইন প্রোফাইলের বেঞ্চমার্ক

আপনার বেসলাইন প্রোফাইল বেঞ্চমার্ক করার জন্য, গাটার অ্যাকশন থেকে একটি নতুন অ্যান্ড্রয়েড ইন্সট্রুমেন্টেড টেস্ট রান কনফিগারেশন তৈরি করুন যা StartupBenchmarks.kt বা StartupBencharks.java ফাইলে সংজ্ঞায়িত বেঞ্চমার্কগুলো সম্পাদন করে। বেঞ্চমার্ক টেস্টিং সম্পর্কে আরও জানতে, "একটি ম্যাক্রোবেঞ্চমার্ক ক্লাস তৈরি করুন" এবং "ম্যাক্রোবেঞ্চমার্ক লাইব্রেরি দিয়ে পরিমাপ স্বয়ংক্রিয় করুন" দেখুন।

চিত্র ৩. গাটার অ্যাকশন থেকে অ্যান্ড্রয়েড টেস্ট চালান।

যখন আপনি অ্যান্ড্রয়েড স্টুডিও-তে এটি চালান, তখন বিল্ড আউটপুটে বেসলাইন প্রোফাইলের কারণে হওয়া গতির উন্নতির বিবরণ থাকে:

StartupBenchmarks_startupCompilationBaselineProfiles
timeToInitialDisplayMs   min 161.8,   median 178.9,   max 194.6
StartupBenchmarks_startupCompilationNone
timeToInitialDisplayMs   min 184.7,   median 196.9,   max 202.9

সমস্ত প্রয়োজনীয় কোড পাথ ক্যাপচার করুন

অ্যাপ চালু হওয়ার সময় পরিমাপের দুটি প্রধান মেট্রিক হলো নিম্নরূপ:

প্রাথমিক প্রদর্শনের সময় (TTID)
অ্যাপ্লিকেশন UI-এর প্রথম ফ্রেমটি প্রদর্শিত হতে যে সময় লাগে।
সম্পূর্ণ প্রদর্শিত হতে সময় (TTFD)
TTID এবং প্রাথমিক ফ্রেম প্রদর্শিত হওয়ার পরে অ্যাসিঙ্ক্রোনাসভাবে লোড হওয়া কন্টেন্ট প্রদর্শনের সময়।

ComponentActivity এর reportFullyDrawn() মেথডটি কল করা হলে TTFD রিপোর্ট করা হয়। যদি reportFullyDrawn() কখনও কল না করা হয়, তাহলে এর পরিবর্তে TTID রিপোর্ট করা হয়। অ্যাসিঙ্ক্রোনাস লোডিং সম্পূর্ণ না হওয়া পর্যন্ত reportFullyDrawn() কল করার সময় আপনাকে বিলম্বিত করতে হতে পারে। উদাহরণস্বরূপ, যদি UI-তে RecyclerView বা লেজি লিস্টের মতো কোনো ডাইনামিক লিস্ট থাকে, তাহলে সেই লিস্টটি এমন একটি ব্যাকগ্রাউন্ড টাস্ক দ্বারা পপুলেট হতে পারে যা লিস্টটি প্রথমবার ড্র হওয়ার পরে এবং ফলস্বরূপ, UI-কে সম্পূর্ণ ড্র হওয়া হিসেবে চিহ্নিত করার পরে সম্পূর্ণ হয়। এই ধরনের ক্ষেত্রে, UI সম্পূর্ণ ড্র হওয়া অবস্থায় পৌঁছানোর পরে যে কোড রান করে, তা বেসলাইন প্রোফাইলে অন্তর্ভুক্ত করা হয় না।

আপনার বেসলাইন প্রোফাইলের অংশ হিসেবে তালিকাটি পূরণ করার কাজটি অন্তর্ভুক্ত করতে, getFullyDrawnReporter() ব্যবহার করে FullyDrawnReporter টি নিন এবং আপনার অ্যাপ কোডে এতে একটি রিপোর্টার যুক্ত করুন। ব্যাকগ্রাউন্ড টাস্কটি তালিকাটি পূরণ করা শেষ করলে রিপোর্টারটি রিলিজ করে দিন। সমস্ত রিপোর্টার রিলিজ না হওয়া পর্যন্ত FullyDrawnReporter টি reportFullyDrawn() মেথডটি কল করে না। এটি করার মাধ্যমে, বেসলাইন প্রোফাইল তালিকাটি পূরণ করার জন্য প্রয়োজনীয় কোড পাথগুলো অন্তর্ভুক্ত করে। এটি ব্যবহারকারীর জন্য অ্যাপের আচরণে কোনো পরিবর্তন আনে না, কিন্তু এটি বেসলাইন প্রোফাইলকে সমস্ত প্রয়োজনীয় কোড পাথ অন্তর্ভুক্ত করার সুযোগ দেয়।

আপনার অ্যাপে যদি Jetpack Compose ব্যবহৃত হয়, তাহলে সম্পূর্ণরূপে অঙ্কিত অবস্থা নির্দেশ করতে নিম্নলিখিত API-গুলো ব্যবহার করুন:

  • ReportDrawn নির্দেশ করে যে আপনার কম্পোজেবলটি ইন্টারঅ্যাকশনের জন্য অবিলম্বে প্রস্তুত।
  • ReportDrawnWhen একটি প্রেডিকেট গ্রহণ করে, যেমন list.count > 0 , যা নির্দেশ করে কখন আপনার কম্পোজেবলটি ইন্টারঅ্যাকশনের জন্য প্রস্তুত।
  • ReportDrawnAfter একটি সাসপেন্ডিং মেথড গ্রহণ করে, যা সম্পন্ন হলে নির্দেশ করে যে আপনার কম্পোজেবলটি ইন্টারঅ্যাকশনের জন্য প্রস্তুত।
{% হুবহু %} {% endverbatim %} {% হুবহু %} {% endverbatim %}