أثناء تطوير ألعاب Android أو تحسينها، قد يكون من المفيد في كثير من الأحيان
فهم مسار الرسومات الذي يستخدمه محرّكك، فقد تختار المحرّكات
Vulkan أو GLES بدون إشارات واضحة يمكن للمطوّر الوصول إليها. للأسف،
هناك حالات قد لا يكون فيها الاعتماد على logcat للتحقّق مما إذا كانت اللعبة
تعمل على Vulkan أو عادت تلقائيًا إلى OpenGL ES موثوقًا به.
يوضّح لك هذا الدليل كيفية استخدام Android Performance Analyzer (APA) وطلبات البحث المخصّصة في Perfetto SQL لتحديد واجهة برمجة التطبيقات النشطة لعرض اللعبة بشكل نهائي.
القيود على التحقُّق المستند إلى السجلّات
- السجلّات المجرّدة: غالبًا ما تخفي إصدارات الإنتاج آثار التهيئة وتحميل برامج التشغيل.
- النتائج الموجبة الخاطئة: تحمّل بعض محرّكات الألعاب مكتبات Vulkan وOpenGL ES أثناء بدء التشغيل، وتعرض سجلّات الإعداد لكليهما، حتى إذا تعذّر تشغيل أحدهما في النهاية وتم استخدام الآخر كبديل.
- العودة إلى الإصدارات السابقة بدون إشعار: إذا تعذّر بدء Vulkan بسبب مشاكل في برامج التشغيل الخاصة بالجهاز، غالبًا ما تعود المحركات إلى OpenGL ES بدون ظهور أخطاء خطيرة.
القياس باستخدام APA
باستخدام Android Performance Analyzer، يمكنك تسجيل سجلّ تتبّع النظام وتحليل بيانات اللقطات بدقة من خلال طلبات البحث المستندة إلى SQL. اتّبِع الخطوات التالية لقياس استخدامك لـ Vulkan وGLES:
تسجيل تتبُّع النظام باستخدام APA: شغِّل لعبتك واستخدِم APA لتسجيل تتبُّع النظام خلال الجزء الذي تريد تحليله، مثل نقطة أثناء اللعب تشكّ في حدوث انخفاض في عدد اللقطات فيها. بعد توصيل الجهاز واكتمال تسجيل التتبُّع، يتم تحميل بيانات التتبُّع في واجهة APA.
انقر على علامة التبويب SQL في APA: عندما تكون شاشة تحليل التتبُّع مفتوحة، انقر على علامة التبويب SQL في قائمة التنقّل في واجهة المستخدم لفتح بيئة معالجة التتبُّع، حيث يمكنك الاستعلام عن البيانات مباشرةً.
الصِق طلب SQL التالي في علامة التبويب APA SQL: انسخ طلب SQL التالي والصِقه في حقل إدخال طلب البحث. يفحص هذا الطلب التتبُّع بحثًا عن أحداث واجهة برمجة التطبيقات للرسم، مثل
eglSwapBuffersوQueuePresentKHRوvkQueuePresentKHR. ويتم تجميعها حسب اسم العملية واحتساب عدد واجهات برمجة التطبيقات للعرض والنسبة المئوية لتوزيع طلبات العرض في Vulkan مقابل OpenGL ES:WITH raw_slices AS ( -- 1. Map each slice (API call) to its corresponding process or package via UTID and UPID SELECT p.name AS process_name, s.name AS slice_name FROM slice s JOIN thread_track tt ON s.track_id = tt.id JOIN thread t USING (utid) JOIN process p USING (upid) WHERE (s.name LIKE 'eglSwapBuffers%' OR s.name IN ('QueuePresentKHR', 'vkQueuePresentKHR')) -- Optional: To isolate your game, uncomment the following and filter by package name and thread name: -- AND p.name = 'com.example.mygame' -- AND t.name = 'RenderThread' ), process_stats AS ( -- 2. Aggregate counts per individual process SELECT process_name, SUM(CASE WHEN slice_name LIKE 'eglSwapBuffers%' THEN 1 ELSE 0 END) AS egl_count, SUM(CASE WHEN slice_name IN ('QueuePresentKHR', 'vkQueuePresentKHR') THEN 1 ELSE 0 END) AS vulkan_count FROM raw_slices GROUP BY process_name ), process_totals AS ( -- 3. Calculate total counts for denominator calculation SELECT process_name, egl_count, vulkan_count, (egl_count + vulkan_count) AS total_count FROM process_stats ) -- 4. Calculate final percentage shares per row, preventing division by zero errors SELECT process_name, egl_count, vulkan_count, total_count, ROUND(CAST(egl_count AS REAL) * 100 / NULLIF(total_count, 0), 2) AS "egl_percentage(%)", ROUND(CAST(vulkan_count AS REAL) * 100 / NULLIF(total_count, 0), 2) AS "vulkan_percentage(%)" FROM process_totals ORDER BY total_count DESC;تنفيذ طلب البحث: انقر على الزر تنفيذ طلب البحث بالقرب من حقل الإدخال. بعد تنفيذ طلب البحث، يظهر جدول في لوحة النتائج يعرض اسم العملية (
process_name) وعدد عروض OpenGL ES (egl_count) وعدد عروض Vulkan (vulkan_count) وإجمالي عدد العروض (total_count) والنسبة المئوية لكل واجهة برمجة تطبيقات مستخدَمة (egl_percentage(%)وvulkan_percentage(%)).
شاشة تعرض طلب البحث الذي تم تنفيذه بلغة SQL ومقاييس واجهة برمجة التطبيقات الناتجة عن العرض في جدول
الأخطاء الشائعة
تجنُّب الالتباس بشأن
SurfaceFlinger: يجب دائمًا تحديد نطاق البحث ليشمل سلسلة عمليات تطبيق اللعبة (RenderThread). قد تعرض عمليات المُركِّب على مستوى النظام، مثلSurfaceFlinger، مسارات Vulkan أو EGL التي تمثّل عرض واجهة مستخدم النظام، وليس مسار العرض الداخلي للعبة. لعزل لعبتك، عليك إزالة التعليق من الفلاتر الاختيارية في عبارةWHEREلطلب البحث الرئيسي في SQL واستبدال'com.example.mygame'باسم حزمة لعبتك:-- AND p.name = 'com.example.mygame' -- AND t.name = 'RenderThread'فترة الإحماء: سجِّل دائمًا بيانات التتبُّع بعد تحميل المشهد الرئيسي الثلاثي الأبعاد للّعبة بالكامل. قد يؤدي التقاط البيانات أثناء شاشات البداية أو انتقالات التحميل إلى عمليات تهيئة مضللة.
متطلبات تتبُّع الإعفاء من برنامج LevelUp
إذا كنت تستخدم Android Performance Analyzer (APA) لتسجيل تتبُّع من أجل التأهُّل للحصول على إعفاء من برنامج ألعاب Google Play LevelUp، هناك متطلبات محدّدة للأجهزة لكي يكون التتبُّع صالحًا.
يُفضَّل بشدة تسجيل التتبُّع باستخدام أحد الأجهزة المرجعية المستهدَفة في برنامج Level Up.
علاوةً على ذلك، لضمان دقة عملية التحقّق، يجب عدم تتبُّع الأداء على جهاز يستخدم وحدة معالجة رسومات ANGLE. على وجه التحديد، لا يمكنك استخدام الأجهزة التالية لتسجيل تتبُّع إعفاء LevelUp:
- أي جهاز تكون فيه وحدة معالجة الرسومات من إنتاج SLSI (Samsung) وتستخدم وحدات معالجة الرسومات AMD Xclipse
- هاتف Pixel 11