يتيح نظام التشغيل Android 11 استخدام معدّلات تحديث متعدّدة على الأجهزة. تتضمّن هذه الميزة ثلاثة مكوّنات رئيسية:
- تم طرح واجهات برمجة تطبيقات جديدة لطبقة تجريد الأجهزة (HAL) في الإصدار
android.hardware.graphics.composer@2.4. - رمز النظام الأساسي لتحليل إعدادات الجهاز لمعدلات إعادة التحميل المختلفة وضبط معدل إعادة التحميل المطلوب
- واجهات برمجة تطبيقات جديدة لحزمة تطوير البرامج (SDK) وNDK تتيح للتطبيقات ضبط عدد اللقطات المطلوب في الثانية
التنفيذ
تمت إضافة دعم مخصّص لتبديل معدّل إعادة التحميل إلى … ننصح بشدة باستخدام هذا الإصدار لأنّ الإصدارات السابقة من composer HAL توفّر دعمًا محدودًا لتبديل معدّل إعادة التحميل.
مجموعات الضبط
تمت إضافة سمة جديدة، CONFIG_GROUP، إلى
IComposerClient::Attribute يمكن البحث فيها باستخدام
واجهة برمجة التطبيقات getDisplayAttribute_2_4. تتيح هذه السمة للمورّدين تجميع إعدادات العرض معًا. تتيح الإعدادات في المجموعة نفسها التبديل السلس بينها في معظم الحالات. تستخدم المنصة مجموعة الضبط للتمييز بين عمليات الضبط التي يمكن التبديل بينها من أجل تغيير معدل التحديث وليس السمات الأخرى لعملية الضبط.
لنأخذ المثال التالي الذي يوضّح مزايا استخدام مجموعات الضبط مع جهاز يتوافق مع أربعة إعدادات عرض:
- 1080p@60Hz
- 1080p@90Hz
- 1080i@72Hz
- 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معدّل إعادة التحميل الحالي (من حيث فترة المزامنة العمودية) الذي تعمل به الشاشة. ويكون ذلك مفيدًا بشكل خاص أثناء الانتقال بين معدّلَي تحديث، عندما تحتاج المنصة إلى معدّل التحديث الحالي لتحديد وقت بدء عرض الإطار التالي. - setActiveConfigWithConstraints
- الطريقة
setActiveConfigWithConstraintsهي إضافة جديدة إلى الطريقة الحاليةsetActiveConfig، وتوفّر المزيد من المعلومات حول تغيير الإعدادات. يتم تقديم القيود كجزء من مَعلماتvsyncPeriodChangeConstraints، وهي تحتوي على المَعلمات التالية. - desiredTimeNanos
- الوقت في
CLOCK_MONOTONICالذي يمكن بعده تغيير فترة المزامنة العمودية (أي يجب ألا تتغير فترة المزامنة العمودية قبل هذا الوقت). يكون ذلك مفيدًا عندما تريد المنصة التخطيط مسبقًا لتغيير معدّل التحديث، ولكن لديها بعض المخازن المؤقتة في قائمة الانتظار لعرضها. تضبط المنصة هذا الوقت وفقًا لذلك من أجل مراعاة هذه الفواصل الزمنية وضمان أن يكون الانتقال إلى معدل التحديث سلسًا قدر الإمكان. - seamlessRequired
- إذا كانت القيمة صحيحة، يجب أن يتم تغيير فترة المزامنة العمودية بسلاسة
بدون أي تشوّهات مرئية ملحوظة. تستخدم المنصة هذا العلامة عندما يكون من الضروري تغيير معدل التحديث نتيجةً لتغيير في المحتوى (على سبيل المثال، يكون الجهاز غير نشط وتبدأ الرسوم المتحركة). ويمنح ذلك المورّد فرصة عدم السماح بإجراء تغييرات معيّنة في الإعدادات عندما قد تؤدي إلى ظهور تشوّهات مرئية ملحوظة. إذا تعذّر تغيير الإعدادات بسلاسة وتم ضبط
seamlessRequiredعلىtrue، من المتوقّع أن تعرض عملية التنفيذSEAMLESS_NOT_POSSIBLEكرمز إرجاع وأن تستدعي معاودة الاتصال الجديدةonSeamlessPossibleعند إمكانية إجراء التغيير نفسه في الإعدادات بسلاسة. عند النجاح، تعرض عملية التنفيذ
VsyncPeriodChangeTimelineالتي تحدّد للمنصة الوقت المتوقّع لحدوث تغيير معدّل التحديث. يجب ضبط المَعلمات على الوقت فيCLOCK_MONOTONICعندما يبدأ تحديث الشاشة الجديدة في فترة المزامنة العمودية الجديدة.newVsyncAppliedTimeNanosيسمح هذا الإعداد، إلى جانبdesiredTimeNanos، للنظام الأساسي بالتخطيط مسبقًا للتبديل بين معدلات التحديث وبدء احتساب عدد مرات التحديث للتطبيقات وفقًا لمعدل التحديث الجديد مسبقًا. يتيح ذلك الانتقال بسلاسة بين معدّلات التحديث.تتطلّب بعض عمليات التنفيذ إرسال إطار معدّل قبل إرسال معدّل التحديث. لهذا الغرض، يحتوي HAL على المَعلمة
refreshRequiredللإشارة إلى ضرورة عرض إطار جديد، وعلى المَعلمةrefreshTimeNanosللإشارة إلى أول عملية مزامنة عمودية يجب بعدها إرسال إطار جديد.- onVsyncPeriodTimingChanged [callback]
- دالة رد نداء جديدة يمكن أن تستدعيها طبقة تجريد الأجهزة (HAL) لإبلاغ النظام الأساسي بأنّ بعض مَعلمات المخطط الزمني قد تغيّرت وأنّ النظام الأساسي بحاجة إلى تعديل المخطط الزمني. من المتوقّع أن يتم استدعاء وظيفة رد الاتصال هذه إذا لم يتم تلقّي المخطط الزمني القديم لسبب ما بسبب طول مدة المعالجة في طبقة تجريد الأجهزة (HAL) أو بسبب تأخّر عرض إطار التحديث.
كيف تقرّر المنصة تغيير معدّل التحديث؟
يتم اختيار معدّل التحديث في خدمتَي النظام التاليتَين:
- DisplayManager
- تحدّد السمة
DisplayManagerالسياسة ذات المستوى الأعلى في ما يتعلّق بمعدّل إعادة التحميل. ويضبط هذا الملف إعدادات العرض التلقائية، وهي نفسها إعدادات HAL الخاصة بمكوّن العرض. بالإضافة إلى ذلك، يحدّد نطاقًا من القيم الدنيا والقصوى التي يمكن أن يختارهاSurfaceFlingerكعدد مرات إعادة التحميل. - SurfaceFlinger
- تحدّد معدّل التحديث من خلال ضبط إعدادات ضمن مجموعة الإعدادات نفسها التي تتضمّن الإعدادات التلقائية، مع معدّل تحديث ضمن النطاق الأدنى/الأقصى.
تتّبع "أداة إدارة العرض" الخطوات التالية لتحديد السياسة:
- تعثر هذه الدالة على رقم تعريف الإعدادات التلقائية من خلال طلب البحث عن الإعدادات النشطة من
SurfaceFlinger - تقييد نطاق الحدّ الأدنى والأقصى للقيم من خلال التكرار على مستوى شروط النظام
- إعداد معدّل التحديث التلقائي: يتم ضبط قيمة معدّل التحديث التلقائي في
R.integer.config_defaultRefreshRate. تُستخدَم هذه القيمة لتحديد معدّل إعادة تحميل الجهاز التلقائي للرسوم المتحركة والتفاعلات باللمس. - إعداد أعلى معدّل إعادة تحميل: تتم قراءة قيمة أعلى معدّل إعادة تحميل من
Settings.System.PEAK_REFRESH_RATE. يتم تغيير هذه القيمة في وقت التشغيل لتعكس إعداد الجهاز الحالي (مثل خيار من القائمة). يتم ضبط القيمة التلقائية في تراكب الإعدادR.integer.config_defaultPeakRefreshRate. - إعداد الحدّ الأدنى لمعدّل إعادة التحميل: تتم قراءة الحدّ الأدنى لمعدّل إعادة التحميل من
Settings.System.MIN_REFRESH_RATE. يمكن تغيير هذه القيمة في وقت التشغيل لتعكس إعداد الجهاز الحالي (مثل خيار من القائمة). القيمة التلقائية هي 0، لذا لا يوجد حدّ أدنى تلقائي. - المعرّف ModeId الذي طلبه التطبيق: يمكن للتطبيقات ضبط
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، سيتم استخدام معدّل التحديث التلقائي عند تشغيل الشاشة (أو عند الخروج من وضع "الشاشة قيد التشغيل دائمًا") للمهلة التي تم ضبطها.
Frame Rate API
تتيح واجهة برمجة التطبيقات الخاصة بمعدّل عرض اللقطات للتطبيقات إبلاغ منصة Android بمعدّل عرض اللقطات المطلوب، وهي متاحة للتطبيقات التي تستهدف الإصدار 11 من نظام التشغيل Android. لمزيد من المعلومات حول واجهة برمجة التطبيقات الخاصة بمعدّل عرض اللقطات، يُرجى الاطّلاع على مستندات المطوّرين على developer.android.com.
خيارات المطوّرين
تمت إضافة خيار مطوّر برامج جديد إلى القائمة التي تتيح تفعيل أو إيقاف تراكب على الشاشة يعرض معدّل إعادة التحميل الحالي. يتوفّر الخيار الجديد ضمن الإعدادات > النظام > خيارات المطوّرين > عرض معدّل التحديث.