تعمل إشارة VSYNC على مزامنة مسار العرض. يتألّف مسار معالجة الشاشة من معالجة التطبيقات وإنشاء SurfaceFlinger وعرض الصور على الشاشة من خلال Hardware Composer (HWC). تعمل تقنية VSYNC على مزامنة الوقت الذي تستيقظ فيه التطبيقات لبدء العرض، والوقت الذي يستيقظ فيه SurfaceFlinger ل دمج الشاشة، ودورة إعادة تحميل الشاشة. وتؤدي هذه المزامنة إلى إزالة الارتباك وتحسين الأداء المرئي للرسومات.
يُنشئ "العرض الموحّد للأجهزة" أحداث VSYNC ويرسلها إلى SurfaceFlinger من خلال عملية ردّ الاتصال:
typedef void (*HWC2_PFN_VSYNC)(hwc2_callback_data_t callbackData, hwc2_display_t display, int64_t timestamp);
يتحكّم SurfaceFlinger في ما إذا كان HWC يُنشئ أحداث VSYNC أم لا من خلال
الاتصال setVsyncEnabled
. يتيح SurfaceFlinger لتطبيق
setVsyncEnabled
إنشاء أحداث VSYNC حتى تتمكّن من المزامنة مع
دورة إعادة التحميل للشاشة. عندما تتم مزامنة SurfaceFlinger مع
دورة تحديث الشاشة، يوقف SurfaceFlinger setVsyncEnabled
لمحاولة
منع وحدة HWC من إنشاء أحداث VSYNC. إذا رصد SurfaceFlinger اختلافًا بين VSYNC الفعلي وVSYNC الذي تم إنشاؤه سابقًا، يعيد SurfaceFlinger تفعيل إنشاء حدث VSYNC.
تأخُّر VSYNC
يعرض تطبيق المزامنة وSurfaceFlinger الحلقات إلى مزامنة الأجهزة. في حدث VSYNC، يبدأ العرض بعرض الإطار N بينما يبدأ SurfaceFlinger بإنشاء نوافذ للإطار N+1. يعالج التطبيق الإدخال المعلّق وينشئ الإطار N+2.
تؤدي المزامنة مع VSYNC إلى توفير وقت استجابة ثابت. ويحدّ من الأخطاء في التطبيقات وSurfaceFlinger، ويقلل من انحراف شاشات العرض عن الطور مع بعضها البعض. ويفترض ذلك أنّ وقت معالجة اللقطة في كل من التطبيق وSurfaceFlinger لا يختلف كثيرًا. تبلغ مدة الاستجابة إطارَين على الأقل.
لحلّ هذه المشكلة، يمكنك استخدام Offsets VSYNC لتقليل وقت الاستجابة من الإدخال إلى الشاشة من خلال ضبط إشارة التطبيق والتركيب بالنسبة إلى إشارة VSYNC في الأجهزة. ويعود ذلك إلى أنّ التطبيق بالإضافة إلى التركيب يستغرقان عادةً أقل من 33 ملي ثانية.
نتيجة بدء VSYNC هي ثلاث إشارات لها الفترة والطور نفسهان عند البدء:
HW_VSYNC_0
- يبدأ العرض في عرض الإطار التالي.VSYNC
- يقرأ التطبيق الإدخال وينشئ الإطار التالي.SF_VSYNC
- يبدأ SurfaceFlinger عملية دمج الإطار التالي.
باستخدام ميزة VSYNC offset، يتلقّى SurfaceFlinger المخزن المؤقت ويُنشئ الإطار بينما يعالج التطبيق الإدخال ويعرض الإطار في الوقت نفسه.
DispSync
يحتفظ DispSync بنموذج لأحداث VSYNC الدورية المستندة إلى الأجهزة في الشاشة ويستخدم هذا النموذج لتنفيذ عمليات الاستدعاء عند Offsets محددة للمرحلة من أحداث VSYNC للأجهزة.
DispSync هي حلقة قفل الطور (PLL) للبرامج التي تنشئ إشارة VSYNC وSF_VSYNC التي يستخدمها Choreographer وSurfaceFlinger، حتى إذا كانت الإشارة لا تتوافق مع إشارة VSYNC للأجهزة.

الشكل 1: مسار DispSync
تتسم DispSync بالسمات التالية:
- مرجع: HW_VSYNC_0.
- الإخراج: VSYNC وSF_VSYNC
- ملاحظات: إيقاف الطوابع الزمنية لإشارة السياج من "أداة إنشاء الأجهزة"
VSYNC/offset retire
يجب أن يتطابق الطابع الزمني للإشارة في حدود الفاصل الزمني لإعادة استخدام الإطارات مع توقيت VSYNC للأجهزة القوية، حتى على الأجهزة التي لا تستخدم مرحلة التقديم/الترجيع. وإلا، ستبدو الأخطاء أكثر خطورة مما هي عليه. غالبًا ما تحتوي اللوحات الذكية على فرق حيث يكون الفاصل الزمني لإعادة التقديم هو نهاية إمكانية الوصول المباشر إلى الذاكرة (DMA) لعرض الذاكرة، ولكن يتم تبديل الشاشة الفعلي وعملية التزامن العمودي للأجهزة بعد فترة.
تم ضبط PRESENT_TIME_OFFSET_FROM_VSYNC_NS
في ملف الإنشاء
BoardConfig.mk
للجهاز. ويستند ذلك إلى خصائص وحدة التحكّم في الشاشة والشاشة. يتم قياس الوقت المستغرَق من طابع وقت انتهاء الفاصل إلى إشارة VSYNC
للأجهزة القوية بالنانوسثانية.
Offsets VSYNC وSF_VSYNC
يتم ضبط VSYNC_EVENT_PHASE_OFFSET_NS
و
SF_VSYNC_EVENT_PHASE_OFFSET_NS
بشكل متحفظ استنادًا إلى
حالات الاستخدام ذات الحمل العالي، مثل تركيب وحدة معالجة الرسومات الجزئية أثناء انتقال النافذة
أو الانتقال في Chrome عبر صفحة ويب تحتوي على صور متحركة. تسمح هذه العناصر المقابلة
بزيادة وقت عرض التطبيق ووقت دمج وحدة معالجة الرسومات.
ملاحظة وقت استجابة يتجاوز ملّي ثانية أو اثنين للحدّ من وقت الاستجابة بدون زيادة عدد الأخطاء بشكل كبير، يمكنك دمج اختبارات برمجية شاملة لفحص الأخطاء.