VSYNC

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

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

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

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

VSYNC অফসেট

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

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

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

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

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

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

DispSync

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

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

DispSync প্রবাহ

চিত্র 1. DispSync প্রবাহ

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

  • রেফারেন্স — HW_VSYNC_0।
  • আউটপুট — VSYNC এবং SF_VSYNC।
  • প্রতিক্রিয়া — হার্ডওয়্যার কম্পোজার থেকে রিটায়ার ফেন্স সিগন্যাল টাইমস্ট্যাম্প।

VSYNC/অফসেট অবসর

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

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

VSYNC এবং SF_VSYNC অফসেট

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

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