يتيح نظام 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
API. تسمح هذه السمة للمورّدين بتجميع
إعدادات العرض معًا. تتيح الإعدادات في المجموعة نفسها
التبديل السلس بينها في معظم الحالات. تستخدِم المنصة مجموعة الإعدادات
للتمييز بين الإعدادات التي يمكن التبديل بينها
من أجل تبديل معدّل التحديث وليس السمات الأخرى لإعداد
معيّن.
راجِع المثال التالي الذي يوضّح مزايا استخدام مجموعات الضبط مع جهاز يتيح أربع إعدادات للشاشة:
- 1080p بمعدل 60 هرتز
- 1080p بمعدل 90 هرتز
- 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
معدّل إعادة التحميل الحالي (من حيث فترة vsync) الذي تعمل به الشاشة. ويُعدّ ذلك مفيدًا بشكل خاص أثناء الانتقال بين معدّل التحديث ومعدّل التحديث الحالي، إذ يحتاجه النظام الأساسي لتحديد وقت بدء اللقطة التالية. - setActiveConfigWithConstraints
- طريقة
setActiveConfigWithConstraints
هي إضافة جديدة إلى طريقةsetActiveConfig
الحالية، وتقدّم المزيد من المعلومات عن تغيير الإعدادات. يتم تقديم القيود كجزء من مَعلماتvsyncPeriodChangeConstraints
وتحتوي على المَعلمات التالية: - desiredTimeNanos
- الوقت بالثواني الذي بعد انقضائه قد
تتغيّر فترة vsync (أي أنّ فترة vsync يجب ألا تتغيّر قبل هذا الوقت).
CLOCK_MONOTONIC
يكون ذلك مفيدًا عندما تريد المنصة التخطيط مسبقًا لتغيير معدل التحديث ولكن لديها بعض العناصر المخزّنة في "قائمة المحتوى التالي" لعرضها. وتحدّد المنصة هذه المدة وفقًا لذلك لمراعاة هذه الفواصل الزمنية والتأكّد من أنّ عملية الانتقال إلى معدل التحديث ستكون سلسة قدر الإمكان. - seamlessRequired
- في حال ضبطها على "صحيح"، يجب أن يحدث تغيير فترة vsync بسلاسة
بدون حدوث عيوب مرئية ملحوظة. يستخدم النظام الأساسي هذا الإعداد عندما يكون هناك حاجة إلى
تغيير في معدّل التحديث نتيجة تغيير في المحتوى (على سبيل المثال، عندما يكون
الجهاز في وضع السكون وتبدأ الصورة المتحركة). يمنح ذلك المورّد فرصة
عدم السماح بتغييرات معيّنة في الإعدادات إذا كان من المحتمل أن تؤدي إلى اختلاف ملحوظ
في المحتوى المرئي. إذا تعذّر تغيير الإعدادات بسلاسة وتم ضبط
seamlessRequired
علىtrue
، من المفترض أن يعرض التنفيذSEAMLESS_NOT_POSSIBLE
كرمز الإرجاع ويُستدعي الإجراء الجديدonSeamlessPossible
عند إجراء تغيير الإعدادات نفسه بسلاسة. عند نجاح التنفيذ، يعرض الإجراء
VsyncPeriodChangeTimeline
الذي يُعلم المنصة بالوقت المتوقع فيه حدوث تغيير في معدّل التحديث.newVsyncAppliedTimeNanos
يجب ضبط المَعلمات على الوقت الوارد فيCLOCK_MONOTONIC
عندما ستبدأ الشاشة الجديدة في إعادة التحميل خلال فترة vsync الجديدة. ويسمح ذلك، إلى جانبdesiredTimeNanos
، للمنصة بالتخطيط مسبقًا لتبديل معدل التحديث وبدء وضع علامة على التطبيقات لمعدل التحديث الجديد مسبقًا. ويسمح ذلك بإجراء عملية انتقال سلسة لمعدّل التحديث.تتطلّب بعض عمليات التنفيذ إرسال إطار تحديث قبل أن يتم إرسال معدل التحديث. لهذا الغرض، يحتوي HAL على المَعلمة
refreshRequired
للإشارة إلى أنّه يجب إرسال إطار إعادة عرض، وrefreshTimeNanos
للإشارة إلى أول vsync يجب إرسال إطار إعادة عرض بعده.- 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، لذا لا يوجد حدّ أدنى تلقائي. - Application requested 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، سيتم استخدام معدل التحديث تلقائي عند تشغيل الشاشة (أو عند الخروج من وضع AOD) خلال مهلة الانتظار التي تم ضبطها.
Frame Rate API
تتيح واجهة برمجة التطبيقات لمعدل اللقطات في الثانية للتطبيقات إبلاغ نظام Android بمعدّل اللقطات في الثانية المقصود، وهي متاحة للتطبيقات التي تستهدف الإصدار Android 11. للتعرّف على مزيد من المعلومات حول واجهة برمجة التطبيقات لمعدل عرض اللقطات، يمكنك الاطّلاع على مستندات المطوّرين على developer.android.com.
خيارات المطوّرين

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