وتزامن إشارة VSYNC مسار العرض. شاشة العرض عرض التطبيق، وتركيب SurfaceFlinger، والأجهزة الملحن (HWC) يعرض الصور على الشاشة يقوم VSYNC بمزامنة الوقت الذي تستيقظ فيه التطبيقات لبدء العرض، والوقت الذي يستيقظ فيه SurfaceFlinger الشاشة، ودورة تحديث العرض. هذه المزامنة ويزيل التعثر ويحسن الأداء المرئي للرسومات.
ينشئ مركز HWC أحداث 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. في حدث VSYNC، تبدأ الشاشة في عرض الإطار N أثناء يبدأ SurfaceFlinger في تركيب النوافذ للإطار 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 التي يستخدمها مصمم الرقصات وSurfaceFlinger، حتى إذا لا تتم إزاحتها من جهاز VSYNC.
الصفات التالية في DispSync:
- المرجع — HW_VSYNC_0.
- الإخراج: VSYNC وSF_VSYNC
- الملاحظات والآراء: الطوابع الزمنية لإشارات إيقاف ميزة "جدار الدعم" من أداة Machine Composer
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
بشكل متحفظ استنادًا إلى
حالات الاستخدام الشديدة الحِمل، مثل تركيب وحدة معالجة الرسومات جزئيًا أثناء الانتقال بين النافذة
أو تصفُّح Chrome في صفحة ويب تحتوي على رسوم متحركة هذه الاعتمادات
تتيح وقتًا طويلاً لعرض التطبيق ووقتًا طويلاً في تركيب وحدة معالجة الرسومات.
ويكون وقت الاستجابة أكثر من ميلي ثانية أو اثنتين. لتقليل وقت الاستجابة بدون زيادة كبيرة في عدد الأخطاء، أو دمج أخطاء آلية شاملة اختبار الفرضية.