VSync

VSync সিগন্যাল ডিসপ্লে পাইপলাইনকে সিঙ্ক্রোনাইজ করে। ডিসপ্লে পাইপলাইনে অ্যাপ রেন্ডারিং, সারফেসফ্লিংগার কম্পোজিশন এবং হার্ডওয়্যার কম্পোজার (HWC) থাকে যা ডিসপ্লেতে ছবি উপস্থাপন করে। VSync রেন্ডারিং শুরু করার জন্য অ্যাপগুলি জেগে ওঠার সময়, স্ক্রিন কম্পোজিট করার জন্য সারফেসফ্লিংগার জেগে ওঠার সময় এবং ডিসপ্লে রিফ্রেশ চক্রকে সিঙ্ক্রোনাইজ করে। এই সিঙ্ক্রোনাইজেশন তোতলানো দূর করে এবং গ্রাফিক্সের ভিজ্যুয়াল পারফরম্যান্স উন্নত করে।

HWC VSync ইভেন্ট তৈরি করে এবং কলব্যাকের মাধ্যমে ইভেন্টগুলি SurfaceFlinger-এ পাঠায়:

typedef void (*HWC2_PFN_VSYNC)(hwc2_callback_data_t callbackData,
        hwc2_display_t display, int64_t timestamp);

SurfaceFlinger setVsyncEnabled এ কল করে HWC VSync ইভেন্ট তৈরি করে কিনা তা নিয়ন্ত্রণ করে। SurfaceFlinger setVsyncEnabled VSync ইভেন্ট তৈরি করতে সক্ষম করে যাতে এটি ডিসপ্লের রিফ্রেশ চক্রের সাথে সিঙ্ক্রোনাইজ করতে পারে। যখন SurfaceFlinger ডিসপ্লে রিফ্রেশ চক্রের সাথে সিঙ্ক্রোনাইজ করা হয়, তখন SurfaceFlinger HWC কে VSync ইভেন্ট তৈরি করা থেকে বিরত রাখতে setVsyncEnabled অক্ষম করে। যদি SurfaceFlinger প্রকৃত VSync এবং VSync এর মধ্যে পার্থক্য সনাক্ত করে যা পূর্বে প্রতিষ্ঠিত SurfaceFlinger VSync ইভেন্ট তৈরি পুনরায় সক্ষম করে।

VSync অফসেট

সিঙ্ক অ্যাপ এবং সারফেসফ্লিংগার হার্ডওয়্যার VSync-এ লুপ রেন্ডার করে। VSync ইভেন্টে, ডিসপ্লে ফ্রেম N দেখাতে শুরু করে এবং সারফেসফ্লিংগার ফ্রেম N+1-এর জন্য উইন্ডো কম্পোজিটিং শুরু করে। অ্যাপটি মুলতুবি থাকা ইনপুট পরিচালনা করে এবং ফ্রেম N+2 তৈরি করে।

VSync এর সাথে সিঙ্ক্রোনাইজ করার ফলে সামঞ্জস্যপূর্ণ ল্যাটেন্সি পাওয়া যায়। এটি অ্যাপ এবং SurfaceFlinger এর ত্রুটি কমায় এবং একে অপরের সাথে ডিসপ্লে ড্রিফট করা কমিয়ে দেয়। এর ফলে ধরে নেওয়া হয় যে অ্যাপ এবং SurfaceFlinger এর ফ্রেম প্রতি সময় ব্যাপকভাবে পরিবর্তিত হয় না। ল্যাটেন্সি কমপক্ষে দুটি ফ্রেম।

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

একটি VSync অফসেটের ফলাফল হল একই সময়কাল এবং অফসেট পর্যায়ের তিনটি সংকেত:

  • HW_VSYNC_0 — ডিসপ্লে পরবর্তী ফ্রেম দেখাতে শুরু করে।
  • VSYNC — অ্যাপ ইনপুট পড়ে এবং পরবর্তী ফ্রেম তৈরি করে।
  • SF_VSYNC — SurfaceFlinger পরবর্তী ফ্রেমের জন্য কম্পোজিটিং শুরু করে।

VSync অফসেটের সাহায্যে, SurfaceFlinger বাফার গ্রহণ করে এবং ফ্রেমটি কম্পোজিট করে, যখন অ্যাপটি একই সাথে ইনপুট প্রক্রিয়া করে এবং ফ্রেমটি রেন্ডার করে।

ডিসপসিঙ্ক

DispSync একটি ডিসপ্লের পর্যায়ক্রমিক হার্ডওয়্যার-ভিত্তিক VSync ইভেন্টগুলির একটি মডেল বজায় রাখে এবং হার্ডওয়্যার VSync ইভেন্টগুলি থেকে নির্দিষ্ট ফেজ অফসেটে কলব্যাকগুলি কার্যকর করতে সেই মডেলটি ব্যবহার করে।

DispSync হল একটি সফটওয়্যার ফেজ-লক লুপ (PLL) যা কোরিওগ্রাফার এবং সারফেসফ্লিংগার দ্বারা ব্যবহৃত VSYNC এবং SF_VSYNC সিগন্যাল তৈরি করে, এমনকি হার্ডওয়্যার VSync থেকে অফসেট না হলেও।

DispSync প্রবাহ নিম্নলিখিত চিত্রে দেখানো হয়েছে:

ডিসপসিঙ্ক প্রবাহ

চিত্র ১. ডিসপসিঙ্ক প্রবাহ।

DispSync এর নিম্নলিখিত গুণাবলী রয়েছে:

  • তথ্যসূত্রHW_VSYNC_0
  • আউটপুটVSYNC এবং SF_VSYNC
  • প্রতিক্রিয়া — HWC থেকে বেড়া সংকেত টাইমস্ট্যাম্পগুলি অবসর নিন।

VSync অফসেটগুলি বন্ধ করে দেয়

রিটায়ার ফেন্সের সিগন্যাল টাইমস্ট্যাম্প অবশ্যই HW VSync এর সাথে মিলতে হবে, এমনকি যেসব ডিভাইস অফসেট ফেজ ব্যবহার করে না তাদের ক্ষেত্রেও। অন্যথায়, ত্রুটিগুলি তাদের চেয়ে বেশি গুরুতর বলে মনে হয়। স্মার্ট প্যানেলে প্রায়শই একটি ডেল্টা থাকে যেখানে রিটায়ার ফেন্স হল মেমরি প্রদর্শনের জন্য ডাইরেক্ট মেমরি অ্যাক্সেস (DMA) এর শেষ, কিন্তু প্রকৃত ডিসপ্লে সুইচ এবং HW VSync কিছু সময় পরে থাকে।

PRESENT_TIME_OFFSET_FROM_VSYNC_NS ডিভাইসের BoardConfig.mk makefile-এ সেট করা আছে। এটি ডিসপ্লে কন্ট্রোলার এবং প্যানেলের বৈশিষ্ট্যের উপর ভিত্তি করে তৈরি। রিটায়ার ফেন্স টাইমস্ট্যাম্প থেকে HW VSync সিগন্যাল পর্যন্ত সময় ন্যানোসেকেন্ডে পরিমাপ করা হয়।

VSYNC এবং SF_VSYNC অফসেট

VSYNC_EVENT_PHASE_OFFSET_NS এবং SF_VSYNC_EVENT_PHASE_OFFSET_NS উচ্চ-লোড ব্যবহারের ক্ষেত্রে, যেমন উইন্ডো ট্রানজিশনের সময় আংশিক GPU রচনা বা অ্যানিমেশনযুক্ত ওয়েব পৃষ্ঠার মাধ্যমে Chrome স্ক্রোলিংয়ের উপর ভিত্তি করে রক্ষণশীলভাবে সেট করা হয়। এই অফসেটগুলি দীর্ঘ অ্যাপ রেন্ডার সময় এবং দীর্ঘ GPU রচনা সময়কে অনুমতি দেয়।

এক বা দুই মিলিসেকেন্ডের বেশি ল্যাটেন্সি লক্ষণীয়। ত্রুটির সংখ্যা উল্লেখযোগ্যভাবে না বাড়িয়ে ল্যাটেন্সি কমাতে, পুঙ্খানুপুঙ্খ স্বয়ংক্রিয় ত্রুটি পরীক্ষা সংহত করুন।