معدّلات إعادة تحميل متعددة

يتيح نظام التشغيل Android 11 إمكانية استخدام الأجهزة التي تتضمّن معدلات إعادة تحميل متعددة. تتوفر ثلاثة مكونات رئيسية لهذه الميزة، وهي:

  • تقديم واجهات برمجة تطبيقات HAL جديدة في android.hardware.graphics.composer@2.4
  • رمز النظام الأساسي لتحليل إعدادات الجهاز لمعدلات إعادة تحميل مختلفة ضبط معدّل التحديث المطلوب
  • واجهات برمجة تطبيقات جديدة لكل من حزمة تطوير البرامج (SDK) وNDK للسماح للتطبيقات بضبط عدد اللقطات في الثانية المطلوب

التنفيذ

تمت إضافة ميزة مخصّصة لتبديل معدل التحديث في android.hardware.graphics.composer@2.4 HAL. ننصحك بشدة باستخدام هذا الإصدار لأنّ الإصدارات السابقة من composer HAL تتيح إمكانية محدودة للتبديل بين معدّلات إعادة التحميل.

مجموعات الضبط

تمت إضافة سمة جديدة CONFIG_GROUP إلى IComposerClient::Attribute التي يمكن الاستعلام عنها باستخدام واجهة برمجة تطبيقات getDisplayAttribute_2_4. تسمح هذه السمة للمورّدين بتجميع إعدادات العرض معًا. تسمح الإعدادات في المجموعة نفسها التبديل السلس بينهما في معظم الحالات. تُستخدَم مجموعة الضبط بواسطة المنصة لتمييز الإعدادات التي يمكن التبديل بينها لتغيير معدل التحديث وليس التصنيفات الأخرى .

راجِع المثال التالي الذي يوضّح مزايا استخدام مجموعات الضبط مع جهاز يتيح أربع إعدادات للشاشة:

  • ‫1080p بمعدل 60 هرتز
  • ‫1080p بمعدل 90 هرتز
  • 1080i@72 هرتز
  • ‫1080i@48Hz

على الرغم من أنّ الجهاز متوافق مع معدلات التحديث 48 هرتز و60 هرتز و72 هرتز و90 هرتز، تعمل الشاشة في وضع مختلف، ويؤدي التبديل من 60 هرتز إلى 72 هرتز إلى تغيير إعدادات الشاشة من 1080p إلى 1080i، ما قد لا يكون السلوك المطلوب. يمكن حلّ هذه المشكلة باستخدام مجموعات الضبط. من خلال تجميع 60 هرتز و90 هرتز معًا في مكان واحد مجموعة ضبط و48 هرتز و72 هرتز في مجموعة ضبط أخرى. تعرف المنصة أن يمكنه التبديل بين 60 هرتز و90 هرتز وبين 48 هرتز و72 هرتز، ولكن ليس بين 60 هرتز و72 هرتز لأنّ ذلك سيؤدي إلى تغيير الإعدادات بدلاً من مجرد تغيير معدّل التحديث

تحديثات واجهة برمجة التطبيقات Composer API

getDisplayVsyncPeriod
للتحكّم بشكل أفضل في معدّلات التحديث وإمكانية توقّعها عند تغييرها، تمت إضافة getDisplayVsyncPeriod . تعرض getDisplayVsyncPeriod معدّل إعادة التحميل الحالي (من حيث فترة vsync) الذي تعمل به الشاشة. يعد ذلك مفيدًا بشكل خاص في حين يجب أن يكون الانتقال بين معدل التحديث ومعدل التحديث الحالي مطلوبًا بواسطة منصة لتقرير وقت بدء الإطار التالي.
setActiveConfigWithConstraints
الطريقة setActiveConfigWithConstraints هي إضافة جديدة إلى طريقة setActiveConfig الحالية وتوفّر المزيد من للحصول على معلومات حول تغيير التهيئة. يتم تقديم القيود كجزء من مَعلمات vsyncPeriodChangeConstraints وتحتوي على المَعلمات التالية:
    الوقت المطلوب لعرضه (TimeNanos)
    الوقت في CLOCK_MONOTONIC الذي قد تليه فترة vsync تغيير (أي يجب ألا تتغير فترة vsync قبل هذا الوقت). يكون هذا مفيدًا عندما تريد المنصة التخطيط المسبق لمعدل التحديث غير أنه يحتوي بالفعل على بعض الموارد الاحتياطية في قائمة الانتظار لتقديمها. النظام الأساسي تحدد هذا الوقت وفقًا لذلك لمراعاة تلك الموارد الاحتياطية والتأكد من ستكون عملية الانتقال إلى معدّل التحديث سلسة قدر الإمكان.
    seamlessRequired
    في حال ضبطها على "صحيح"، يجب أن يحدث تغيير فترة vsync بسلاسة بدون حدوث عيوب مرئية ملحوظة. يستخدم النظام الأساسي هذه العلامة عندما يجب الحاجة إلى تغيير معدل التحديث نتيجة لتغيير المحتوى (على سبيل المثال، الجهاز في وضع الخمول وتبدأ الرسوم المتحركة). يمنح هذا البائع الفرصة عدم السماح بتغييرات معينة في التهيئة عندما قد تؤدي إلى ظهور أداة بصرية. إذا تعذر تغيير التكوينات بسلاسة تم ضبط seamlessRequired على true، وقد تم تنفيذ عملية التنفيذ. من المتوقع أن يعرض SEAMLESS_NOT_POSSIBLE كرمز الإرجاع باستدعاء معاودة اتصال onSeamlessPossible الجديدة عندما تستخدم الإعدادات نفسها ويمكن إجراء التغيير بسلاسة.

عند نجاح التنفيذ، يعرض الإجراء VsyncPeriodChangeTimeline الذي يُعلم المنصة بالوقت المتوقع فيه حدوث تغيير في معدّل التحديث. يجب ضبط مَعلمات newVsyncAppliedTimeNanos على الوقت الوارد في CLOCK_MONOTONIC عندما ستبدأ الشاشة الجديدة في إعادة التحميل خلال فترة vsync الجديدة. قد يؤدي ذلك إلى جانب يسمح desiredTimeNanos للمنصة بالتخطيط لعملية إعادة التحميل مسبقًا. مفتاح التبديل وبدء وضع علامات على التطبيقات لمعدّل التحديث الجديد مسبقًا. هذا النمط انتقالاً سلسًا لمعدّل التحديث

تتطلب بعض عمليات التنفيذ إرسال إطار تحديث قبل إعادة التحميل السعر. لهذا السبب، تحتوي دالة HAL على refreshRequired. للإشارة إلى الحاجة إلى إطار تحديث refreshTimeNanos للإشارة إلى أول vsync عندما يكون إطار إعادة التحميل يجب إرسالها بعد ذلك.

onVsyncPeriodTimingChanged [callback]
مكالمة جديدة يمكن أن يطلبها HAL للإشارة إلى المنصة بأنّه تم تغيير بعض المَعلمات في المخطط الزمني وأنّ المنصة بحاجة إلى تعديل المخطط الزمني من المتوقّع أن يتمّ استدعاء هذا الإجراء المُعاد الاتصال به إذا تمّت تخطّي المخطط الزمني القديم لعدة أسباب، مثل وقت المعالجة الطويل في HAL أو إطار التحديث المتأخر.

كيف تقرّر المنصة تغيير معدّل التحديث؟

يتم اختيار معدّل إعادة التحميل في خدمتَي النظام التاليتَين:

مدير الشبكة الإعلانية
يضبط DisplayManager السياسة عالية المستوى. معدّل التحديث تقريبًا. فهي تضبط تهيئة افتراضية للعرض، وتكون مماثلة تهيئة HAL للمؤلف. بالإضافة إلى ذلك، تُعيِّن نطاق الحد الأدنى والأقصى قيمتان (SurfaceFlinger) لاختيارهما كإعادة تحميل المعدل.
سطح قاطع
يتم تحديد معدّل التحديث من خلال ضبط إعداد ضِمن الإعدادات نفسها. كإعداد تلقائي ومع معدّل إعادة تحميل يتراوح بين الحدّ الأدنى والأقصى النطاق.

يمر مدير الشبكة الإعلانية بالخطوات التالية لتحديد السياسة:

  • يبحث عن رقم تعريف الإعداد التلقائي من خلال طلب المعلومات من الإعداد النشط من SurfaceFlinger
  • تقييد نطاق القيم الدنيا والقصوى بالتكرار على حالات النظام
    • إعداد معدل التحديث التلقائي: يتم ضبط قيمة معدل التحديث التلقائي في تراكب الإعدادات R.integer.config_defaultRefreshRate. تُستخدَم هذه القيمة لتحديد معدّل إعادة تحميل الجهاز العادي للصور المتحركة والتفاعلات باللمس.
    • إعداد معدّل التحديث الأقصى: أعلى قيمة لمعدّل إعادة التحميل تتم قراءته من Settings.System.PEAK_REFRESH_RATE. يتم تغيير هذه القيمة أثناء التشغيل لتعكس إعداد الجهاز الحالي (مثلاً من أحد خيارات القائمة). يتم ضبط القيمة التلقائية في R.integer.config_defaultPeakRefreshRate ملف التداخل الخاص بالإعدادات.
    • إعداد الحد الأدنى لمعدل التحديث: الحد الأدنى لمعدل التحديث تتم قراءة القيمة من Settings.System.MIN_REFRESH_RATE. يمكن لهذه القيمة أن يتم تغييرها في وقت التشغيل لتعكس إعداد الجهاز الحالي (على سبيل المثال من قائمة هذا الخيار). القيمة التلقائية هي 0، لذا لا يوجد حدّ أدنى تلقائي.
    • رقم تعريف الوضع المطلوب لطلب التطبيق: يمكن للتطبيقات ضبط WindowManager.LayoutParams.preferredDisplayModeId لتعكس الإعدادات المفضلة التي يجب أن تعمل بها شاشة العرض. في معظم الحالات يضبط DisplayManager معرّف الإعدادات التلقائي. وفقًا لذلك، وتضبط الحدّ الأدنى والأقصى لمعدّل إعادة التحميل لتتوافق مع إعدادات الإعدادات معدل التحديث.
    • توفير شحن البطارية: يتم ضبط معدل التحديث على 60 هرتز أو أقل عندما يكون الجهاز في وضع استهلاك الطاقة المنخفض، ويتم الإشارة إلى ذلك من خلال Settings.Global.LOW_POWER_MODE.

بعد ضبط السياسة من قِبل DisplayManager، يضبط SurfaceFlinger معدّل التحديث استنادًا إلى الطبقات النشطة (الطبقات التي قائمة في الانتظار). تحديثات الإطار). إذا عيّن مالك الطبقة معدل الإطارات، فسيعمل SurfaceFlinger. ضبط معدّل التحديث على قيمة يضاعف هذا المعدل على سبيل المثال، إذا ضبطت طبقتان نشِطتان معدّل عرض اللقطات على 24 و60، سيختار SurfaceFlinger ‏120 هرتز إذا كان متاحًا. إذا لم يكن معدل التحديث هذا متاحًا لتطبيق SurfaceFlinger، سيحاول اختيار معدل التحديث الذي يتضمن الحد الأدنى من الخطأ لمعدل عرض اللقطات. لمزيد من المعلومات، يمكنك الاطّلاع على مستندات المطوّرين على developer.android.com

يحافظ SurfaceFlinger على العلامات التالية للتحكّم في كيفية تحديد معدّل التحديث:

  • ro.surface_flinger.use_content_detection_for_refresh_rate: في حال تحديد معدل التحديث، يتم تحديده استنادًا إلى الطبقات النشطة، حتى إذا لم يتم ضبط معدل عرض اللقطات. تحتفظ SurfaceFlinger إرشاديًا حيث يعثر على متوسط عدد اللقطات في الثانية التي تنشر الطبقة فيها الموارد الاحتياطية بالنظر إلى الطابع الزمني للعرض التقديمي المرتبط بالمخزن المؤقت.
  • ro.surface_flinger.set_touch_timer_ms: إذا كانت > 0، الإعداد التلقائي سيتم استخدام معدّل إعادة التحميل عندما يلمس المستخدم شاشة الإعدادات المهلة. يتم استخدام هذه الطريقة الاستقرائية للاستعداد مع معدّل التحديث التلقائي للصور المتحركة.
  • ro.surface_flinger.set_idle_timer_ms: إذا كانت > 0، الحد الأدنى لمعدّل التحديث سيتم استخدامهما في حال عدم توفُّر تحديثات للشاشة للمهلة التي تم ضبطها.
  • ro.surface_flinger.set_display_power_timer_ms: إذا كانت القيمة أكبر من 0، سيتم استخدام معدل التحديث تلقائي عند تشغيل الشاشة (أو عند الخروج من وضع AOD) خلال مهلة الانتظار التي تم ضبطها.

واجهة برمجة تطبيقات عدد اللقطات في الثانية

تتيح واجهة برمجة التطبيقات لمعدل اللقطات في الثانية للتطبيقات إبلاغ نظام Android بمعدّل اللقطات في الثانية المقصود، وهي متاحة للتطبيقات التي تستهدف الإصدار Android 11. للتعرّف على مزيد من المعلومات عن واجهة برمجة التطبيقات لمعدل عرض اللقطات، يمكنك الاطّلاع على مستندات المطوّرين على developer.android.com.

خيارات المطوّرين

تمت إضافة خيار مطوّر جديد إلى القائمة يؤدي إلى تفعيل التراكب الشاشة ذات معدّل التحديث الحالي يتوفر الخيار الجديد ضمن الإعدادات > النظام > المطوّر الخيارات > إظهار معدّل إعادة التحميل: