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

الشكل 1. كيف يتم عرض الأسطح
المكونات الرئيسية موضحة أدناه:
منتجو دفق الصور
يمكن أن يكون منتج دفق الصور أي شيء ينتج مخازن رسومية للاستهلاك. تتضمن الأمثلة OpenGL ES و Canvas 2D وأجهزة فك ترميز فيديو خادم الوسائط.
المستهلكين تيار الصورة
المستهلك الأكثر شيوعًا لتدفقات الصور هو SurfaceFlinger ، خدمة النظام التي تستهلك الأسطح المرئية حاليًا وتضعها على الشاشة باستخدام المعلومات التي يوفرها Window Manager. SurfaceFlinger هي الخدمة الوحيدة التي يمكنها تعديل محتوى الشاشة. يستخدم SurfaceFlinger OpenGL و Hardware Composer لتكوين مجموعة من الأسطح.
يمكن أن تستهلك تطبيقات OpenGL ES الأخرى تدفقات الصور أيضًا ، مثل تطبيق الكاميرا الذي يستهلك تدفق صور معاينة الكاميرا. يمكن أن تكون التطبيقات بخلاف GL من المستهلكين أيضًا ، على سبيل المثال فئة ImageReader.
مؤلف الأجهزة
تجريد الأجهزة لنظام العرض الفرعي. يمكن لـ SurfaceFlinger تفويض بعض أعمال التركيب إلى مؤلف الأجهزة لإلغاء تحميل العمل من OpenGL ووحدة معالجة الرسومات. يعمل SurfaceFlinger كمجرد عميل OpenGL ES آخر. لذلك عندما يقوم SurfaceFlinger بتكوين مخزن مؤقت واحد أو اثنين في ثلث ، على سبيل المثال ، فإنه يستخدم OpenGL ES. هذا يجعل التركيب أقل من أن تقوم وحدة معالجة الرسومات بإجراء جميع العمليات الحسابية.
يقوم HAL Composer HAL بإجراء النصف الآخر من العمل وهو النقطة المركزية لجميع عمليات عرض رسومات Android. يجب أن يدعم مؤلف الأجهزة الأحداث ، أحدها هو VSYNC (آخر هو hotplug لدعم التوصيل والتشغيل HDMI).
جرالوك
مطلوب مخصص ذاكرة الرسومات (Gralloc) لتخصيص الذاكرة التي يطلبها منتجو الصور. لمزيد من التفاصيل ، انظر Gralloc HAL .
تدفق البيانات
راجع الرسم التخطيطي التالي للحصول على تصوير لخط أنابيب رسومات Android:

الشكل 2. تتدفق البيانات الرسومية عبر Android
الكائنات الموجودة على اليسار هي أجهزة عرض تنتج مخازن رسومات مؤقتة ، مثل الشاشة الرئيسية وشريط الحالة وواجهة مستخدم النظام. SurfaceFlinger هو الملحن و Hardware Composer هو الملحن.
العازلة
توفر BufferQueues الالتصاق بين مكونات رسومات Android. هذان زوجان من قوائم الانتظار التي تتوسط الدورة المستمرة للمخازن المؤقتة من المنتج إلى المستهلك. بمجرد أن يسلم المنتجون مخازنهم المؤقتة ، يكون SurfaceFlinger مسؤولاً عن تركيب كل شيء على الشاشة.
انظر الرسم البياني التالي لعملية الاتصال BufferQueue.

الشكل 3. عملية الاتصال BufferQueue
يحتوي BufferQueue على المنطق الذي يربط بين منتجي دفق الصور ومستهلكي دفق الصور معًا. بعض الأمثلة على منتجي الصور هي معاينات الكاميرا التي تنتجها ألعاب الكاميرا HAL أو OpenGL ES. بعض الأمثلة على مستهلكي الصور هي SurfaceFlinger أو تطبيق آخر يعرض تدفق OpenGL ES ، مثل تطبيق الكاميرا الذي يعرض عدسة الكاميرا.
BufferQueue عبارة عن بنية بيانات تجمع بين مخزن مؤقت مع قائمة انتظار وتستخدم Binder IPC لتمرير المخازن المؤقتة بين العمليات. واجهة المنتج ، أو ما تمرره إلى شخص ما يريد إنشاء مخازن مؤقتة للرسومات ، هي IGraphicBufferProducer (جزء من SurfaceTexture ). غالبًا ما يتم استخدام BufferQueue للعرض على السطح والاستهلاك مع مستهلك GL ، من بين مهام أخرى.
يمكن أن يعمل BufferQueue في ثلاثة أوضاع مختلفة:
الوضع المتزامن - يعمل BufferQueue افتراضيًا في وضع يشبه المتزامن ، حيث يخرج كل مخزن مؤقت يأتي من المنتج إلى المستهلك. لا يتم تجاهل أي مخزن مؤقت في هذا الوضع. وإذا كان المنتج سريعًا جدًا وقام بإنشاء مخازن مؤقتة أسرع مما يتم استنزافها ، فسوف يقوم بحظر وانتظار المخازن المؤقتة المجانية.
وضع عدم الحظر - يمكن أن يعمل BufferQueue أيضًا في وضع عدم الحظر حيث يُنشئ خطأً بدلاً من انتظار وجود مخزن مؤقت في تلك الحالات. لا يتم تجاهل أي مخزن مؤقت في هذا الوضع أيضًا. هذا مفيد لتجنب المآزق المحتملة في برامج التطبيقات التي قد لا تفهم التبعيات المعقدة لإطار عمل الرسومات.
وضع الإلغاء - أخيرًا ، قد يتم تكوين BufferQueue لتجاهل المخازن المؤقتة القديمة بدلاً من إنشاء أخطاء أو الانتظار. على سبيل المثال ، في حالة إجراء عرض GL لعرض النسيج والرسم بأسرع ما يمكن ، يجب إسقاط المخازن المؤقتة.
لإجراء معظم هذا العمل ، يعمل SurfaceFlinger كعميل OpenGL ES آخر. لذلك عندما يقوم SurfaceFlinger بتكوين مخزن مؤقت واحد أو اثنين في ثلث ، على سبيل المثال ، فإنه يستخدم OpenGL ES.
يقوم HAL Composer HAL بإجراء النصف الآخر من العمل. يعمل HAL كنقطة مركزية لجميع عمليات عرض رسومات Android.