التصميم لتقليل زمن الاستجابة

أدخل إصدار Android 4.1 تغييرات على إطار العمل الداخلي لمسار إخراج الصوت بهدف خفض وقت الاستجابة. حدثت تغييرات طفيفة على واجهة برمجة التطبيقات المفتوحة للعميل أو واجهة برمجة التطبيقات HAL. يصف هذا المستند التصميم الأوّلي الذي استمرّت عملية تطويره بمرور الوقت. من المفترض أن يساعد فهم هذا التصميم جيدًا المصنّعين الأصليين للأجهزة وموفّري منظومة المعالجة على الرقاقة (SoC) على تنفيذ التصميم بشكل صحيح على أجهزتهم ومقاييس الشرائح المحدّدة. هذه المقالة ليست مخصّصة لمطوّري التطبيقات.

إنشاء أغنية

يمكن للعميل اختياريًا ضبط القيمة AUDIO_OUTPUT_FLAG_FAST في المَعلمة audio_output_flags_t لإنشاء AudioTrack في C++ أو AudioTrack::set(). في الوقت الحالي، لا يتوفّر هذا الخيار إلا للعملاء التاليين:

يراجع تنفيذ AudioTrack C++ AUDIO_OUTPUT_FLAG_FAST الطلب وقد يرفضه اختياريًا على مستوى العميل. وإذا قرر تمرير الطلب، يتم ذلك باستخدام TRACK_FAST بت من المَعلمة track_flags_t لطريقة المصنع IAudioTrack IAudioFlinger::createTrack().

يراجع خادم الصوت AudioFlinger طلب TRACK_FAST وقد يرفضه اختياريًا على مستوى الخادم. ويُعلم الخادم العميل بقبول الطلب أو رفضه من خلال النقطة CBLK_FAST من وحدة التحكّم في الذاكرة المشتركة.

تشمل العوامل التي تؤثّر في القرار ما يلي:

  • توفُّر سلسلة مخطّط معالجة سريع لهذا الناتج (راجِع المعلومات أدناه)
  • معدّل أخذ العينات
  • توفُّر سلسلة محادثات عميل لتنفيذ معالجات طلب إعادة الاتصال لهذا المقطع الصوتي
  • حجم ذاكرة التخزين المؤقت للأغنية
  • خانات المسار السريع المتاحة (راجِع المعلومات أدناه)

إذا تم قبول طلب العميل، يُعرف ذلك باسم "المسار السريع". وبخلاف ذلك، يُطلق عليه "مسار عادي".

سلاسل المحادثات في Mixer

في الوقت الذي ينشئ فيه AudioFlinger سلسلة محادثات عادية للمزج، يقرِّر ما إذا كان سيتم أيضًا إنشاء سلسلة محادثات للمزج السريع أم لا. لا يرتبط كل من أداة التحكم العادية في السرعة وتلك السريعة بمسار معيّن، بل بمجموعة من المسارات. هناك دائمًا مناقشة عادية في سلسلت الرسائل. يكون خيط الخلاط السريع، في حال توفّره، تابعًا لسلسلة محادثات الخلاط العادي ويعمل تحت سيطرتها.

أداة مزج سريع

الميزات

يوفّر خيط الخلاط السريع الميزات التالية:

  • مزج المحتوى الفرعي للجهاز العادي و7 مسارات سريعة للعملاء كحد أقصى
  • خفض الصوت لكل مسار

الميزات التي تم حذفها:

  • تحويل معدّل البيانات في الملف الصوتي لكل أغنية
  • تأثيرات لكل أغنية
  • تأثيرات كل مزيج

نقطة

يتم تشغيل أداة المزج السريع بشكل دوري، مع فترة مقترَحة تتراوح بين اثنين وثلاثة مللي ثانية (ms)، أو فترة أعلى قليلاً تبلغ خمسة مللي ثانية إذا لزم الأمر لضمان ثبات الجدول الزمني. تم اختيار هذا الرقم بحيث يكون إجمالي وقت الاستجابة في حدود 10 ملي ثانية، مع الأخذ في الاعتبار مسار تدفق ملف التخزين المؤقت بالكامل. ويمكن استخدام قيم أصغر، ولكن قد يؤدي ذلك إلى زيادة استهلاك الطاقة وزيادة احتمال حدوث مشاكل في الأداء، وذلك استنادًا إلى مدى إمكانية توقّع جدولة وحدة المعالجة المركزية. من الممكن استخدام قيم أكبر، تصل إلى 20 ملي ثانية، ولكنّها تؤدي إلى تفاقم وقت الاستجابة الإجمالي، لذا يجب تجنُّبها.

الجدولة

يتم تشغيل أداة المزج السريع بأولوية SCHED_FIFO مرتفعة. لا يحتاج إلى سوى وقت قصير جدًا من وحدة المعالجة المركزية، ولكن يجب تشغيله بشكل متكرر وبمعدّل تذبذب منخفض في تحديد المواعيد. يعبّر التشويش عن التباين في مدة الدورة: وهو الفرق بين مدة الدورة الفعلية ومدة الدورة المتوقّعة. سيؤدي تشغيل الإعلان بعد وقت متأخر جدًا إلى حدوث مشاكل بسبب عدم اكتمال عرض الإعلان. سيؤدي إجراء الاختبار مبكرًا جدًا إلى حدوث مشاكل بسبب سحب البيانات من مسار سريع قبل أن يقدّم المسار بيانات.

تؤدي إلى الحظر

من الناحية المثالية، لا يتم حظر سلسلة المخطِّط السريع أبدًا، باستثناء HAL write(). وحالات الحظر الأخرى في أداة المزج السريع تُعدّ أخطاء. وعلى وجه الخصوص، يتم تجنُّب استخدام آليات قفل المهام المتعدّدة. وبدلاً من ذلك، يتم استخدام الخوارزميات غير المحظورة (المعروفة أيضًا باسم الخوارزميات غير المحظورة). اطّلِع على تجنُّب انعكاس الأولوية لمعرفة المزيد من المعلومات حول هذا الموضوع.

العلاقة بالمكونات الأخرى

لا يتفاعل أداة المزج السريعة مع العملاء بشكل مباشر. وعلى وجه التحديد، لا تظهر له العمليات على مستوى الرابط، ولكنه يحصل على إذن بالوصول إلى كتلة التحكّم في الذاكرة المشتركة للعميل.

يتلقّى الخلاط السريع الأوامر من الخلاط العادي من خلال قائمة انتظار الحالات.

بالإضافة إلى سحب بيانات الأغاني، يتم التفاعل مع العملاء من خلال أداة المزج العادية.

وحدة الاستقبال الأساسية لمحرر الصوت السريع هي HAL للصوت.

خلاط عادي

الميزات

جميع الميزات مفعّلة:

  • ما يصل إلى 32 أغنية
  • خفض الصوت لكل مسار
  • تحويل معدّل البيانات في الملف الصوتي لكل أغنية
  • معالجة التأثيرات

نقطة

يتم احتساب الفترة لتكون أول عدد صحيح مضاعَف ل فترة أداة المزج السريع التي تزيد عن أو تساوي 20 ملي ثانية.

الجدولة

يتم تشغيل أداة المزج العادية بأولوية SCHED_OTHER مرتفعة.

تؤدي إلى الحظر

يُسمح لمحرر الخلاصة العادي بحظر الخلاصة، وغالبًا ما يفعل ذلك عند استخدام موانع مختلفة بالإضافة إلى استخدام أنبوب حظر لكتابة الخلاصة الفرعية.

العلاقة بالمكونات الأخرى

يتفاعل أداة المزج العادية بشكل مكثّف مع العالم الخارجي، بما في ذلك سلاسل محادثات الربط ومدير سياسة الصوت وسلسلة محادثات أداة المزج السريع، ومقاطع صوت العميل.

إنّ مسار الإخراج للجهاز العادي هو مسار حظر لمسار 0 للجهاز السريع.

أعلام

AUDIO_OUTPUT_FLAG_FAST بت هو تلميح. لا يمكننا ضمان تنفيذ الطلب.

AUDIO_OUTPUT_FLAG_FAST هو مفهوم على مستوى العميل. لا يظهر في الخادم.

TRACK_FAST هو مفهوم من العميل إلى الخادم.