يتيح لك محلّل إطارات AGI فحص تصاريح العرض الفردية التي تُستخدَم لإنشاء إطار واحد من تطبيقك. ويتم ذلك عن طريق اعتراض وتسجيل جميع الحالات اللازمة لتنفيذ كل طلب بيانات من واجهة برمجة التطبيقات للرسومات. في Vulkan، يتم ذلك محليًا باستخدام نظام طبقات Vulkan. على OpenGL، يتم اعتراض الأوامر باستخدام ANGLE، الذي يحوّل أوامر OpenGL إلى استدعاءات Vulkan حتى يمكن تنفيذها على الأجهزة.
أجهزة Adreno
لتحديد تصاريح العرض الباهظة الثمن، ألقِ نظرة أولاً على عرض المخطط الزمني لمعهد AGI في أعلى النافذة. يوضح ذلك جميع بطاقات العرض التي تشتمل على تركيب إطار معين بترتيب زمني. وهي طريقة العرض ذاتها التي ستراها في محلّل النظام إذا كانت لديك معلومات عن قائمة انتظار وحدة معالجة الرسومات. ويقدِّم أيضًا معلومات أساسية حول تمريرة العرض، مثل درجة دقة الموارد الاحتياطية التي يتم عرض الإطارات لها، ما يمكن أن يوفّر بعض المعلومات حول ما يحدث في تصريح العرض نفسه.
![عرض المخطط الزمني للإطار](https://developer.android.com/static/images/agi/renderpass-images/image6.png?authuser=6&hl=ar)
إنّ المعايير الأولى التي يمكنك استخدامها للتحقّق من بطاقات العرض هي مقدار الوقت الذي تستغرقه هذه البطاقات. من المرجح أن تكون أطول فترة عرض هي تلك التي تنطوي على أكبر إمكانية للتحسين، لذا ننصحك بإلقاء نظرة عليها أولاً.
![تحديد أطول إذن عرض في عرض "المخطط الزمني للإطار"](https://developer.android.com/static/images/agi/renderpass-images/image5.png?authuser=6&hl=ar)
ستعرض شريحة وحدة معالجة الرسومات المرتبطة بإذن العرض ذي الصلة بعض المعلومات حول ما يحدث في إذن العرض:
- الربط: مكان وضع الرؤوس في سلال حسب المكان الذي تصل إليه على الشاشة
- العرض: حيث يتم تظليل وحدات البكسل أو الأجزاء
- تحميل/تخزين GMEM: عند تحميل محتوى المخزن المؤقت للإطارات أو تخزينها من ذاكرة وحدة معالجة الرسومات الداخلية إلى الذاكرة الرئيسية
يمكنك الحصول على فكرة جيدة عن المعوقات المحتملة من خلال الاطّلاع على مقدار الوقت الذي يستغرقه كل من هذه الإجراءات في إطار العرض. مثلاً:
- إذا كان الدمج يستغرق جزءًا كبيرًا من الوقت، فهذا يشير إلى وجود مؤثِّر سلبي ببيانات الرأس التي توحي بوجود عدد كبير جدًا من الرؤوس أو الرؤوس الكبيرة أو مشاكل أخرى متعلقة بالرؤوس.
- إذا استغرق العرض معظم الوقت، فهذا يشير إلى أن التظليل هو المأزق. قد تكمن الأسباب المحتملة لذلك في أدوات التظليل المعقّدة أو جلب عدد كبير جدًا من عمليات جلب زخارف أو عرض المحتوى في مخزن إطارات مؤقت عالي الدقة عندما لا يكون ذلك ضروريًا أو حدوث مشاكل أخرى ذات صلة.
من الأمور التي يجب وضعها في الاعتبار أيضًا تحميل ومتاجر GMEM. يعد نقل الأشياء من ذاكرة الرسومات إلى الذاكرة الرئيسية أمرًا مكلفًا، لذا فإن تقليل حجم عمليات التحميل أو التخزين سيساعد في تحسين الأداء أيضًا. ومن الأمثلة الشائعة على ذلك وجود عمق/استينسل تخزين GMEM الذي يرسم المخزن المؤقت للعمق/الاستنسل في الذاكرة الرئيسية؛ وإذا كنت لا تستخدم هذا المخزن المؤقت في تصاريح العرض المستقبلية، يمكن إلغاء عملية التخزين هذه وتوفير وقت عرض الإطار ومعدل نقل بيانات الذاكرة.
![تحديد عمليات تحميل ومخازن GMEM](https://developer.android.com/static/images/agi/renderpass-images/image8.png?authuser=6&hl=ar)
التحقيق في تمريرة عرض كبيرة
للاطّلاع على جميع أوامر الرسم الفردية التي تم إصدارها أثناء العرض:
انقر على بطاقة العرض في المخطط الزمني. يؤدي ذلك إلى فتح بطاقة العرض في التسلسل الهرمي الموجود في جزء الأوامر في أداة تحليل الإطارات.
انقر على قائمة بطاقة العرض التي تعرض جميع أوامر السحب الفردية التي تم إصدارها أثناء العرض. وإذا كان هذا تطبيق OpenGL، فيمكنك البحث أكثر والاطّلاع على أوامر Vulkan الصادرة عن ANGLE.
![جزء الأوامر](https://developer.android.com/static/images/agi/renderpass-images/image4.png?authuser=6&hl=ar)
اختَر أحد طلبات السحب. يؤدي ذلك إلى فتح جزء Framebuffer الذي يعرض جميع مرفقات المخزن المؤقت للإطارات التي تم ربطها أثناء هذا الرسم، بالإضافة إلى النتيجة النهائية للرسم في المخزن المؤقت المرفق للإطارات المرفق. يمكنك هنا أيضًا استخدام AGI لفتح كل من طلبَي السحب السابق والتالية، ومقارنة الفرق بين الاثنين. إذا كانتا متطابقتين تقريبًا، فهذا يشير إلى فرصة للتخلص من استدعاء الرسم الذي لا يساهم في الصورة النهائية.
![اختيار استدعاءات الرسم الفردية في جزء الأوامر](https://developer.android.com/static/images/agi/renderpass-images/image5.png?authuser=6&hl=ar)
يؤدي فتح لوحة Pipeline لهذا الرسم إلى عرض الحالة التي يستخدمها مسار الرسومات لتنفيذ طلب الرسم هذا.
![جزء مسار الأنابيب](https://developer.android.com/static/images/agi/renderpass-images/image10.png?authuser=6&hl=ar)
توفّر مجمّعة الإدخال معلومات حول كيفية ربط بيانات الرأس بهذا الرسم. ننصحك بالتحقّق في هذا القسم إذا لاحظت أنّ عملية الربط تستغرق جزءًا كبيرًا من وقت العرض. يمكنك هنا الحصول على معلومات حول تنسيق الرأس وعدد الرؤوس المرسومة وكيفية وضع الرؤوس في الذاكرة. للمزيد من المعلومات عن هذا الأمر، يُرجى الاطّلاع على تحليل تنسيقات الرأس.
![إدخال قسم مجمّع البيانات في جزء "خط الأنابيب"](https://developer.android.com/static/images/agi/renderpass-images/image11.png?authuser=6&hl=ar)
يوفر قسم Vertex Shader معلومات عن أداة تظليل الرأس التي استخدمتها أثناء الرسم، ويمكن أن يكون أيضًا مكانًا جيدًا لفحص ما إذا تم تحديد مشكلة التجميع. يمكنك عرض SPIR-V وبروتوكول GLSL للتظليل المستخدَم، والتحقق من الموارد الاحتياطية الموحّدة المرتبطة لهذه المكالمة. راجِع تحليل أداء أداة التظليل للحصول على مزيد من التفاصيل.
![قسم Vertex Shader في جزء Pipeline](https://developer.android.com/static/images/agi/renderpass-images/image3.png?authuser=6&hl=ar)
يعرض لك قسم أداة تحويل النقاط معلومات حول الإعداد الأكثر ثباتًا لخط الأنابيب، ويمكنك استخدامه بشكل أكبر لأغراض تصحيح الأخطاء المتعلقة بحالة الدالة الثابتة مثل إطار العرض، والمقص، وحالة العمق، ووضع المضلّع.
![قسم أداة تحويل الصور الخطية إلى نقطية في جزء Pipeline](https://developer.android.com/static/images/agi/renderpass-images/image2.png?authuser=6&hl=ar)
يوفر قسم Fragment Shader الكثير من المعلومات نفسها الموجودة في قسم Vertex Shader، إلا أنه خاص بـ Fragment Shader. في هذه الحالة، يمكنك فعلاً معرفة الزخارف التي يتم ربطها والتحقق منها من خلال النقر على المقبض.
![قسم Fragment Shader في جزء Pipeline](https://developer.android.com/static/images/agi/renderpass-images/image7.png?authuser=6&hl=ar)
التحقيق في تمريرة أصغر للعرض
ومن المعايير الأخرى التي يمكنك استخدامها لتحسين أداء وحدة معالجة الرسومات النظر في مجموعات من بطاقات العرض الأصغر حجمًا. بشكل عام، أنت بحاجة إلى تقليل عدد تمريرات العرض قدر الإمكان، لأن وحدة معالجة الرسومات تستغرق بعض الوقت لتحديث الحالة من بطاقة عرض إلى أخرى. وعادةً ما يتم استخدام هذه البطاقات الصغيرة في إنشاء خرائط الظل أو تطبيق تمويه غاوسي أو تقدير درجة السطوع أو تطبيق تأثيرات ما بعد المعالجة أو عرض واجهة المستخدم. ويمكن دمج بعض هذه الطرق في تصريح عرض واحد، أو حتى التخلص منها بالكامل إذا لم تؤثر في الصورة بأكملها بما يكفي لتبرير التكلفة.
![تمريرات عرض أصغر حجمًا يتم استخدامها لتقليل دقة المخزن المؤقت الأصلي](https://developer.android.com/static/images/agi/renderpass-images/image9.png?authuser=6&hl=ar)