تصميم لتقليل الكمون

قدم إصدار Android 4.1 تغييرات في إطار العمل الداخلي لمسار إخراج الصوت بزمن وصول أقل . كان هناك الحد الأدنى من التغييرات في واجهة برمجة تطبيقات العميل العام أو واجهة برمجة تطبيقات HAL. تصف هذه الوثيقة التصميم الأولي، الذي استمر في التطور مع مرور الوقت. إن الفهم الجيد لهذا التصميم من شأنه أن يساعد موردي الأجهزة OEM و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 الخاص بكتلة التحكم في الذاكرة المشتركة.

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

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

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

خيوط خلاط

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

خلاط سريع

سمات

يوفر خيط الخلاط السريع هذه الميزات:

  • خلط المزيج الفرعي للخلاط العادي وما يصل إلى 7 مسارات سريعة للعميل
  • لكل مسار التوهين

الميزات المحذوفة:

  • لكل مسار تحويل معدل العينة
  • لكل آثار المسار
  • لكل تأثيرات المزيج

فترة

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

الجدولة

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

الحظر

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

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

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

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

بخلاف سحب بيانات المسار، يتم التفاعل مع العملاء عبر الخلاط العادي.

الحوض الأساسي للخلاط السريع هو الصوت HAL.

خلاط عادي

سمات

تم تمكين كافة الميزات:

  • ما يصل إلى 32 مسارًا
  • لكل مسار التوهين
  • لكل مسار تحويل معدل العينة
  • معالجة التأثيرات

فترة

يتم حساب الفترة لتكون المضاعف التكاملي الأول لفترة الخلط السريع التي تكون >= 20 مللي ثانية.

الجدولة

يعمل الخلاط العادي بأولوية SCHED_OTHER مرتفعة.

الحظر

يُسمح للخلاط العادي بالحظر، وغالبًا ما يفعل ذلك عند العديد من كائنات المزامنة وكذلك عند أنبوب الحجب لكتابة المزيج الفرعي الخاص به.

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

يتفاعل الخلاط العادي على نطاق واسع مع العالم الخارجي، بما في ذلك خيوط الموثق، ومدير سياسة الصوت، وخيط الخلاط السريع، ومسارات العميل.

حوض الخلاط العادي عبارة عن ماسورة تسد مسار الخلاط السريع 0.

أعلام

بت AUDIO_OUTPUT_FLAG_FAST هو تلميح. ليس هناك ما يضمن تلبية الطلب.

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

TRACK_FAST هو عميل -> مفهوم الخادم.