অ্যান্ড্রয়েড ১৫-এ অ্যাডাপ্টিভ রিফ্রেশ রেট (ARR) ফিচারটি চালু করা হয়েছে, যা নির্দিষ্ট VSync ধাপ ব্যবহার করে ডিসপ্লের রিফ্রেশ রেটকে কন্টেন্টের ফ্রেম রেটের সাথে খাপ খাইয়ে নিতে সাহায্য করে।
ARR ফিচারটি নিম্নলিখিত সুবিধাগুলো প্রদান করে:
- বিদ্যুৎ খরচ হ্রাস: ডিফল্টরূপে, ARR ডিভাইসগুলিকে তাদের সর্বোচ্চ রিফ্রেশ রেটের চেয়ে কম হারে কাজ করতে দেয় এবং শুধুমাত্র ব্যবহারকারীর অভিজ্ঞতার জন্য অপরিহার্য হলেই উচ্চতর হারে স্থানান্তরিত হয়, যা অপ্রয়োজনীয় বিদ্যুৎ খরচ কমিয়ে আনে।
- জ্যাঙ্ক হ্রাস: ARR মোড স্যুইচিংয়ের প্রয়োজনীয়তা দূর করে, যা জ্যাঙ্কের একটি পরিচিত কারণ।
সংক্ষিপ্ত বিবরণ
নন-এআরআর প্যানেলগুলিতে, সক্রিয় ডিসপ্লে মোড দ্বারা নির্ধারিত একটি নির্দিষ্ট বিরতিতে ডিসপ্লে রিফ্রেশ হয়।
ARR প্যানেলগুলিতে, ডিসপ্লের VSync রেট এবং রিফ্রেশ রেট পরস্পর বিচ্ছিন্ন থাকে, যা কন্টেন্ট আপডেটের গতির উপর ভিত্তি করে একটি ডিসপ্লে মোডের মধ্যেই রিফ্রেশ রেট পরিবর্তন করতে দেয়। প্যানেলগুলি এমন রিফ্রেশ রেটে চলতে পারে যা প্যানেলের টিয়ারিং এফেক্ট (TE)-এর বিভাজ্য। OEM-রা তাদের পছন্দসই পাওয়ার ট্রেড-অফের উপর ভিত্তি করে ARR প্রয়োগ করতে পারে।
নিম্নলিখিত চিত্রে এমন একটি ডিসপ্লে দেখানো হয়েছে যার vsyncPeriod ২৪০ Hz এবং minFrameIntervalNs (সর্বোচ্চ রিফ্রেশ রেট) ১২০ Hz। প্রতি ৪.১৬ মিলিসেকেন্ডে VSync ঘটে। শেষ ফ্রেম থেকে minFrameIntervalNs সময় পর VSync-এর যেকোনো গুণিতকে একটি ফ্রেম প্রদর্শন করা যেতে পারে।

চিত্র ১. ARR-এর উদাহরণ।
বাস্তবায়ন
অ্যান্ড্রয়েড ১৫ নতুন হার্ডওয়্যার কম্পোজার (HWC) HAL API এবং প্ল্যাটফর্ম পরিবর্তনের সাথে ARR সমর্থন করে। ARR সক্রিয় করতে, OEM-দের অবশ্যই অ্যান্ড্রয়েড ১৫ এবং তার পরবর্তী সংস্করণে চালিত ডিভাইসগুলিতে কার্নেল ও সিস্টেম পরিবর্তন সমর্থন করতে হবে এবং নিম্নলিখিত বিভাগগুলিতে তালিকাভুক্ত android.hardware.graphics.composer3 API-এর সংস্করণ ৩ প্রয়োগ করতে হবে।
আরও তথ্যের জন্য ARR সমর্থনকারী API-গুলোর পিক্সেলের রেফারেন্স ইমপ্লিমেন্টেশন দেখুন।
DisplayConfiguration.aidl
DisplayConfiguration.aidl API-টি ডিসপ্লে অ্যাট্রিবিউট ব্যবহার করে ডিসপ্লে কনফিগারেশন নির্দিষ্ট করে, এবং এর সাথে ARR-এর জন্য নিম্নলিখিত অ্যাট্রিবিউটগুলোও অন্তর্ভুক্ত থাকে:
- ঐচ্ছিক
vrrConfig: এটি সেট করা থাকলে, নির্দিষ্ট কনফিগারেশনের জন্য ARR সক্রিয় হয়। এটিnullএ সেট করা থাকলে, ডিসপ্লে মোড মাল্টিপল রিফ্রেশ রেট (MRR)- এর মতো নন-ARR মোডে সেট করা হয়। এই অ্যাট্রিবিউটের সাহায্যে, একটি ডিসপ্লেকে MRR অথবা ARR হিসেবে কনফিগার করা যেতে পারে, কিন্তু উভয় হিসেবে নয়। vsyncPeriod: ডিসপ্লের VSync রেট। ARR ডিসপ্লেতে, এই মানটি সমর্থিত পৃথক রিফ্রেশ রেটগুলো নির্ধারণ করতে ব্যবহৃত হয়।বিক্রেতাদের অবশ্যই সমস্ত ডিভাইসের জন্য
DisplayConfiguration.vsyncPeriodমানটি সেট করতে হবে। নন-এআরআর (ARR) ডিসপ্লেগুলির ক্ষেত্রে,DisplayConfiguration.vsyncPeriodহলো ডিসপ্লে রিফ্রেশ রেট। যদি কোনো ডিভাইস ১২০ হার্টজ (Hz) সমর্থন করে, তাহলে এই মানটি অবশ্যই ৮.৩ মিলিসেকেন্ড (ms) হতে হবে।ARR ডিসপ্লেগুলির জন্য,
DisplayConfiguration.vsyncPeriodহলো TE সিগন্যাল ফ্রিকোয়েন্সি। যদি কোনো ডিভাইসেরminFrameIntervalNs৮.৩ ms হয় কিন্তু TE ২৪০ Hz হয়, তবে এই মানটি অবশ্যই ৪.১৬ ms হতে হবে।
VrrConfig.aidl
VrrConfig.aidl API-তে নিম্নলিখিত অ্যাট্রিবিউটগুলো অন্তর্ভুক্ত রয়েছে:
-
minFrameIntervalNs: ডিসপ্লেটির সর্বোচ্চ রিফ্রেশ রেট যা এটি সমর্থন করতে পারে। -
NotifyExpectedPresentConfig: ডিসপ্লেতে কখন আসন্ন ফ্রেমের জন্য অগ্রিম বিজ্ঞপ্তির প্রয়োজন হবে, তার উপর ভিত্তি করে এটি নির্ধারিত হয়।
IComposerClient.notifyExpectedPresent একটি সম্ভাব্য প্রদর্শিত হতে চলা ফ্রেমের জন্য একটি ইঙ্গিত প্রদান করে, যাতে ডিসপ্লে সেই অনুযায়ী তার সেলফ-রিফ্রেশ সময়কালকে মানিয়ে নিতে পারে। frameIntervalNs হলো expectedPresentTime এর পরে আসা বর্তমান ফ্রেমের ব্যবধান। উদাহরণস্বরূপ, যদি notifyExpectedPresent expectedPresentTime N এবং frameIntervalNs 16.6 ms দিয়ে কল করা হয়, তাহলে পরবর্তী ফ্রেমটি বর্তমান সময় N-এর N + 16.6 ms পরে আসবে। বর্তমান সময় N-এর পরে, পরবর্তী কোনো পরিবর্তন না হওয়া পর্যন্ত ফ্রেমের ব্যবধান 16.6 ms থাকে।
IComposerClient.notifyExpectedPresent শুধুমাত্র তখনই কল করা হয় যখন DisplayConfiguration.notifyExpectedPresentConfig সেট করা থাকে এবং নিম্নলিখিত সময়-শর্তগুলির মধ্যে একটি ঘটে:
- ছন্দহীন বর্তমান সময়: পরবর্তী ফ্রেমের প্রত্যাশিত প্রদর্শনের সময়,
frameIntervalNsদ্বারা সংজ্ঞায়িত ডিসপ্লের নিয়মিত রিফ্রেশ রেট থেকে বিচ্যুত হয়। - সময়সীমা অতিক্রম করেছে: পূর্ববর্তী ফ্রেমগুলোর মধ্যবর্তী সময়ের ব্যবধান
notifyExpectedPresentConfig.timeoutNsএর চেয়ে বেশি বা সমান।
DisplayCommand.frameIntervalNs
DisplayCommand.frameIntervalNs আসন্ন ফ্রেমগুলোর গতিবেগ সম্পর্কে ন্যানোসেকেন্ডে একটি ইঙ্গিত প্রদান করে।
পরীক্ষা
ডিবাগিংয়ের জন্য onRefreshRateChangedDebug ব্যবহার করুন। এই মেথডটি ক্লায়েন্টকে জানায় যে ডিসপ্লের রিফ্রেশ রেট পরিবর্তিত হয়েছে।
চিত্র ২-এ দেখানো পদ্ধতি অনুযায়ী ম্যানুয়াল পরীক্ষার জন্য TouchLatency টেস্ট অ্যাপটি ব্যবহার করুন:

চিত্র ২. টাচলেটেন্সি টেস্ট অ্যাপ।
টেস্ট অ্যাপটিতে, স্লাইডারটি ব্যবহার করে ডিসপ্লের রিফ্রেশ রেটের ভাজক রিফ্রেশ রেটগুলোর বিভিন্ন মানে রেন্ডার রেট অ্যাডজাস্ট করুন। লক্ষ্য করুন, অনুরোধ করা রেটের উপর ভিত্তি করে ফ্রেম রেট কীভাবে পরিবর্তিত হয়।