মাইক্রোবেঞ্চমার্ক

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

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

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

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

কন্টিনিউয়াস ইন্টিগ্রেশন (CI) পরিবেশে লাইব্রেরি কীভাবে ব্যবহার করবেন তা জানতে, কন্টিনিউয়াস ইন্টিগ্রেশনে বেঞ্চমার্ক চালান দেখুন।

ক্যাশে পরিমাপ এড়িয়ে চলুন

শুধু ক্যাশে পরিমাপ এড়াতে চেষ্টা করুন. উদাহরণস্বরূপ, একটি কাস্টম ভিউ এর লেআউট বেঞ্চমার্ক শুধুমাত্র লেআউট ক্যাশের কর্মক্ষমতা পরিমাপ করতে পারে। এটি এড়াতে, আপনি প্রতিটি লুপে বিভিন্ন লেআউট পরামিতি পাস করতে পারেন। অন্যান্য ক্ষেত্রে, যেমন ফাইল সিস্টেমের কার্যকারিতা পরিমাপ করার সময়, এটি কঠিন হতে পারে কারণ OS একটি লুপে থাকা অবস্থায় ফাইল সিস্টেমকে ক্যাশে করে।

সামঞ্জস্যপূর্ণ বেঞ্চমার্ক প্রাপ্ত

মোবাইল ডিভাইসে ঘড়ি গতিশীলভাবে উচ্চ অবস্থা থেকে পরিবর্তিত হয়, কর্মক্ষমতার জন্য, নিম্ন অবস্থায়, শক্তি সঞ্চয় করতে বা ডিভাইস গরম হয়ে গেলে। এই বিভিন্ন ঘড়িগুলি আপনার বেঞ্চমার্ক নম্বরগুলিকে ব্যাপকভাবে পরিবর্তিত করতে পারে, তাই লাইব্রেরি এই সমস্যাটি মোকাবেলা করার উপায় সরবরাহ করে।

লক ঘড়ি (রুটেড ডিভাইস প্রয়োজন)

স্থিতিশীল কর্মক্ষমতা পেতে ঘড়ি লক করা সর্বোত্তম উপায়। এটি নিশ্চিত করতে সাহায্য করে যে ঘড়িগুলি কখনই ডিভাইসটিকে গরম করার জন্য যথেষ্ট বেশি না হয়, বা যদি একটি বেঞ্চমার্ক CPU সম্পূর্ণরূপে ব্যবহার না করে তবে কম হয়। এটি একটি Gradle টাস্ক ( gradlew lockClocks ) সহ বা CI-তে ম্যানুয়ালি প্রয়োগ করা যেতে পারে। যদিও এটি স্থিতিশীল কর্মক্ষমতা নিশ্চিত করতে সাহায্য করার সর্বোত্তম উপায়, এটি বেশিরভাগ ডিভাইসে সমর্থিত নয়, কারণ একটি রুট করা Android-চালিত ডিভাইসের প্রয়োজন।

টেকসই কর্মক্ষমতা মোড

Window.setSustainedPerformanceMode() ডিভাইস দ্বারা সমর্থিত একটি বৈশিষ্ট্য যা একটি অ্যাপকে কম সর্বোচ্চ CPU ফ্রিকোয়েন্সি বেছে নিতে দেয়। সমর্থিত ডিভাইসগুলিতে চলার সময়, মাইক্রোবেঞ্চমার্ক লাইব্রেরি এই API-এর সংমিশ্রণ ব্যবহার করে এবং তাপীয় থ্রটলিং প্রতিরোধ এবং ফলাফল স্থিতিশীল করার জন্য নিজস্ব কার্যকলাপ চালু করে।

এই বৈশিষ্ট্যটি Android Gradle প্লাগইন দ্বারা সেট করা testInstrumentationRunner দ্বারা ডিফল্টরূপে সক্রিয় করা হয়েছে৷ আপনি যদি একটি কাস্টম রানার ব্যবহার করতে চান, তাহলে আপনি AndroidBenchmarkRunner সাবক্লাস করতে পারেন এবং এটিকে আপনার testInstrumentationRunner হিসাবে ব্যবহার করতে পারেন।

রানার একটি অস্বচ্ছ, পূর্ণস্ক্রীন ক্রিয়াকলাপ চালু করে তা নিশ্চিত করতে যে বেঞ্চমার্কটি অগ্রভাগে এবং অন্য কোনও অ্যাপ অঙ্কন ছাড়াই চলে।

স্বয়ংক্রিয় মৃত্যুদন্ড বিরতি

আপনি যদি ক্লক-লকিং বা টেকসই কর্মক্ষমতা ব্যবহার না করেন, তাহলে লাইব্রেরি স্বয়ংক্রিয় থার্মাল থ্রটলিং সনাক্তকরণ সঞ্চালন করে। যখন সক্ষম করা থাকে, তখন অভ্যন্তরীণ বেঞ্চমার্ক পর্যায়ক্রমে চলে তা নির্ধারণ করতে কখন ডিভাইসের তাপমাত্রা CPU কার্যক্ষমতা হ্রাস করার জন্য যথেষ্ট বেশি হয়। যখন এটি সিপিইউর নিম্ন কর্মক্ষমতা সনাক্ত করে, তখন লাইব্রেরি এক্সিকিউশনকে বিরতি দেয় যাতে ডিভাইসটিকে ঠান্ডা হতে দেয় এবং তারপরে বর্তমান বেঞ্চমার্কটি পুনরায় চেষ্টা করে।

AOT সংকলন

জটিল মাইক্রোবেঞ্চমার্ক স্থিতিশীল হতে দীর্ঘ সময় নিতে পারে এবং স্থিতিশীলতা সনাক্ত করা খুব কঠিন করে তোলে। যেহেতু সামঞ্জস্যপূর্ণ পরিমাপ এবং দ্রুত পুনরাবৃত্তির গতি শীর্ষ অগ্রাধিকার, androidx.benchmark প্লাগইন সম্পূর্ণরূপে আপনার মাইক্রোবেঞ্চমার্ক apk কে ডিফল্টরূপে কম্পাইল করে, CompilationMode.Full in Macrobenchmarks-এর মতো। এই আচরণের জন্য বেঞ্চমার্ক 1.3.0-beta01+ এবং Android Gradle Plugin 8.4.0+ প্রয়োজন। আপনি আপনার gradle.properties ফাইলে androidx.benchmark.forceaotcompilation=false সেট করে এই আচরণ থেকে বেরিয়ে আসতে পারেন।

নমুনা

GitHub সংগ্রহস্থলে নিম্নলিখিত নমুনাগুলি দেখুন:

অতিরিক্ত সম্পদ

মতামত প্রদান

বেঞ্চমার্কিং ব্যবহার করার সময় সমস্যার রিপোর্ট করতে বা বৈশিষ্ট্যের অনুরোধ জমা দিতে, পাবলিক ইস্যু ট্র্যাকার দেখুন।

{% শব্দার্থে %} {% endverbatim %} {% শব্দার্থে %} {% endverbatim %}