Google 致力于为黑人社区推动种族平等。查看具体举措
ترجمت واجهة Cloud Translation API‏ هذه الصفحة.
Switch to English

VSYNC

تقوم إشارة VSYNC بمزامنة خط أنابيب العرض. يتكون خط أنابيب العرض من عرض التطبيق وتكوين SurfaceFlinger و Hardware Composer (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 . يمكّن setVsyncEnabled من إنشاء أحداث VSYNC بحيث يمكن مزامنتها مع دورة تحديث الشاشة. عندما تتم مزامنة setVsyncEnabled مع دورة تحديث العرض ، يعطل 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 - يقرأ التطبيق المدخلات VSYNC الإطار التالي.
  • SF_VSYNC - يبدأ SF_VSYNC التركيب للإطار التالي.

باستخدام إزاحة VSYNC ، يتلقى SurfaceFlinger المخزن المؤقت ويقوم بتركيب الإطار بينما يعالج التطبيق الإدخال في نفس الوقت ويعرض الإطار.

ديسبسينك

يحتفظ DispSync بنموذج لأحداث VSYNC الدورية المستندة إلى الأجهزة للعرض ويستخدم هذا النموذج لتنفيذ عمليات الاسترجاعات عند إزاحات طور معينة من أحداث VSYNC للأجهزة.

DispSync عبارة عن حلقة قفل طور برمجية (PLL) تولد إشارات VSYNC و SF_VSYNC التي يستخدمها مصمم الرقصات و SurfaceFlinger ، حتى لو لم يتم تعويضها من أجهزة VSYNC.

تدفق ديسبسينك

الشكل 1. تدفق DispSync

تتمتع ديسبسينك بالصفات التالية:

  • المرجع - HW_VSYNC_0.
  • الإخراج - VSYNC و SF_VSYNC.
  • الملاحظات - تقاعد الطوابع الزمنية لإشارة السياج من مؤلف الأجهزة.

تعويض 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 عبر صفحة ويب تحتوي على رسوم متحركة. تتيح هذه الإزاحات وقتًا طويلاً لعرض التطبيق ووقت تكوين GPU طويل.

يمكن ملاحظة أكثر من مللي ثانية أو اثنتين من وقت الاستجابة. لتقليل زمن الوصول دون زيادة كبيرة في عدد الأخطاء ، قم بدمج اختبار الأخطاء التلقائي.