طبقات وشاشات

تعد الطبقات وشاشات العرض عنصرين أساسيين يمثلان أعمال التركيب والتفاعلات مع أجهزة العرض.

طبقات

الطبقة هي الوحدة الأكثر أهمية في التكوين. الطبقة عبارة عن مزيج من السطح ومثيل SurfaceControl . تحتوي كل طبقة على مجموعة من الخصائص التي تحدد كيفية تفاعلها مع الطبقات الأخرى. يتم وصف خصائص الطبقة في الجدول أدناه.

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

يعرض

العرض هو وحدة مهمة أخرى للتكوين. يمكن أن يحتوي النظام على شاشات عرض متعددة ويمكن إضافة شاشات العرض أو إزالتها أثناء عمليات النظام العادية. تتم إضافة/إزالة شاشات العرض بناءً على طلب HWC أو بناءً على طلب الإطار. يطلب جهاز HWC إضافة شاشات عرض أو إزالتها عند توصيل شاشة خارجية أو فصلها عن الجهاز، وهو ما يسمى التوصيل السريع . يطلب العملاء شاشات عرض افتراضية ، والتي يتم عرض محتوياتها في مخزن مؤقت خارج الشاشة بدلاً من عرضها فعليًا.

العروض الافتراضية

يدعم SurfaceFlinger شاشة عرض داخلية (مدمجة في الهاتف أو الجهاز اللوحي)، وشاشات عرض خارجية (مثل تلفزيون متصل عبر HDMI)، وواحدة أو أكثر من شاشات العرض الافتراضية التي تجعل الإخراج المركب متاحًا داخل النظام. يمكن استخدام شاشات العرض الافتراضية لتسجيل الشاشة أو إرسال الشاشة عبر الشبكة. تتم كتابة الإطارات التي تم إنشاؤها للعرض الظاهري إلى BufferQueue.

قد تشترك شاشات العرض الافتراضية في نفس مجموعة الطبقات مثل الشاشة الرئيسية (مكدس الطبقات) أو يكون لها مجموعتها الخاصة. لا يوجد VSYNC للشاشة الافتراضية، لذا فإن VSYNC للشاشة الداخلية يؤدي إلى تشغيل التكوين لجميع شاشات العرض.

في تطبيقات HWC التي تدعمها، يمكن تركيب شاشات العرض الافتراضية باستخدام OpenGL ES (GLES)، أو HWC، أو كليهما GLES وHWC. في التطبيقات غير الداعمة، يتم دائمًا تكوين شاشات العرض الافتراضية باستخدام GLES.

دراسة الحالة: سجل الشاشة

يسمح أمر screenrecord للمستخدم بتسجيل كل ما يظهر على الشاشة كملف .mp4 على القرص. لتنفيذ ذلك، يتلقى النظام الإطارات المركبة من SurfaceFlinger، ويكتبها إلى برنامج تشفير الفيديو، ثم يكتب بيانات الفيديو المشفرة إلى ملف. تتم إدارة برامج ترميز الفيديو من خلال عملية منفصلة ( mediaserver )، لذلك يجب أن تتحرك مخازن الرسومات المؤقتة الكبيرة في جميع أنحاء النظام. ولجعل الأمر أكثر صعوبة، الهدف هو تسجيل فيديو بمعدل 60 إطارًا في الثانية بدقة كاملة. المفتاح لإنجاز هذا العمل بكفاءة هو BufferQueue.

تسمح فئة MediaCodec للتطبيق بتوفير البيانات كبايتات أولية في المخازن المؤقتة، أو من خلال السطح. عندما يطلب screenrecord الوصول إلى برنامج تشفير الفيديو، تقوم عملية mediaserver بإنشاء قائمة انتظار مؤقتة، وتربط نفسها بجانب المستهلك، ثم تمرر جانب المنتج مرة أخرى إلى screenrecord كسطح.

ثم تطلب الأداة المساعدة screenrecord من SurfaceFlinger إنشاء شاشة عرض افتراضية تعكس شاشة العرض الرئيسية (أي أنها تحتوي على جميع الطبقات نفسها)، وتوجهها لإرسال الإخراج إلى السطح الذي يأتي من عملية mediaserver . في هذه الحالة، SurfaceFlinger هو منتج المخازن المؤقتة وليس المستهلك.

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

دراسة الحالة: محاكاة العروض الثانوية

يمكن لـ WindowManager أن يطلب من SurfaceFlinger إنشاء طبقة مرئية يعمل SurfaceFlinger لها كمستهلك BufferQueue. من الممكن أيضًا أن تطلب من SurfaceFlinger إنشاء شاشة عرض افتراضية، حيث يعمل SurfaceFlinger كمنتج BufferQueue.

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