اختبار برنامج جودة drawElements

يتضمّن AOSP حزمة اختبار وحدة معالجة الرسومات في برنامج drawElements Quality Program‏ (deqp) على الرابط https://android.googlesource.com/platform/external/deqp. توضّح هذه الصفحة بالتفصيل كيفية نشر مجموعة اختبارات deqp في بيئة جديدة.

للعمل مع أحدث رمز تم إرساله، استخدِم الفرع deqp-dev. بالنسبة إلى الرمز الذي يتطابق مع إصدار معيّن من CTS لنظام التشغيل Android، استخدِم الفرع release-code-name-release (على سبيل المثال، لنظام التشغيل Android 6.0، استخدِم الفرع marshmallow-release).

تنسيق المصدر

يظهر في الجدول أدناه تنسيق رمز المصدر لوحدات اختبار deqp والمكتبات الداعمة (القائمة ليست شاملة ولكنها تُبرز الملفات الدليلية الأكثر أهمية).

الدليل الوصف
android

مصادر مختبِري Android والنصوص البرمجية لإنشاء الإصدارات

data

ملفات بيانات الاختبار

modules

مصادر وحدات الاختبار

modules/egl

وحدة EGL

modules/gles2

وحدة GLES2

modules/gles3

وحدة GLES3

modules/gles31

وحدة GLES3.1

modules/gles32

وحدة GLES3.2

targets

ملفات إعدادات الإنشاء الخاصة بالأجهزة المستهدفة

framework

إطار عمل وحدة اختبار deqp وأدواته

framework/delibs

قاعدة إمكانية النقل وإنشاء المكتبات

framework/platform

منافذ النظام الأساسي

framework/qphelper

مكتبة دمج برنامج الاختبار (C)

framework/common

إطار عمل Deqp (C++)

framework/opengl, framework/egl

الأدوات الخاصة بواجهة برمجة التطبيقات

execserver

مصدر ExecServer على الجهاز

executor

أداة shell الخاصة بتنفيذ الاختبارات وأدواتها من جهة المضيف

external

إنشاء دليل الرمز المرجعي للمكتبتَين الخارجيتَين libpng وzlib

المكوّنات المفتوحة المصدر

يستخدم deqp libpng وzlib، ويمكن جلبهما باستخدام النص البرمجي platform/external/deqp/external/fetch_sources.py أو من خلال git من platform/external/[libpng,zlib].

إنشاء برامج اختبار

تم تصميم إطار الاختبار مع مراعاة إمكانية نقله. إنّ المتطلبات الوحيدة الواجبة هي توفُّر مكتبة C++ الكاملة ومكتبات النظام العادية لعمليات قراءة/كتابة وعمليات المعالجة المتعدّدة وعمليات الإدخال/الإخراج.

نظام إنشاء CMake

تحتوي مصادر deqp على نصوص برمجية لإنشاء CMake، وهي الأداة المفضّلة ل compiling برامج الاختبار.

CMake هو نظام إنشاء مفتوح المصدر يتوافق مع أنظمة أساسية و سلاسل أدوات متعددة. تُنشئ أداة CMake ملفات makefiles أصلية أو ملفات مشاريع IDE من ملفات الإعداد غير المستندة إلى الهدف. لمزيد من المعلومات عن CMake، يُرجى الاطّلاع على مستندات CMake.

تتيح أداة CMake عمليات الإنشاء خارج شجرة المصدر، وننصح باستخدامها، أي أنّه يجب إنشاء ملفات makefiles أو ملفات مشاريع في دليل إنشاء منفصل خارج شجرة المصدر. لا تتضمّن أداة CMake أي نوع من الأهداف "distclean"، لذا يجب إزالة أي ملفات أنشأتها أداة CMake يدويًا.

يتم تقديم خيارات الإعداد إلى CMake باستخدام بنية -DOPTION_NAME=VALUE. في ما يلي بعض الخيارات الشائعة الاستخدام لـ deqp.

خيار الضبط الوصف
DEQP_TARGET

اسم الهدف، على سبيل المثال: "android"

ستتضمّن النصوص البرمجية deqp CMake الملف targets/DEQP_TARGET/DEQP_TARGET.cmake ومن المفترض أن تعثر على خيارات الإنشاء الخاصة بالهدف من هناك.

CMAKE_TOOLCHAIN_FILE

مسار ملف سلسلة الأدوات لـ CMake تُستخدَم لعملية الترجمة المتعدّدة.

CMAKE_BUILD_TYPE

نوع الإنشاء لاستهدافات ملف makefile القيم الصالحة هي: "تصحيح الأخطاء" و "الإصدار".

يُرجى العِلم أنّ التفسير والنوع التلقائي يعتمدان على نظام الإنشاء المستهدَف. راجِع مستندات CMake للاطّلاع على التفاصيل.

إنشاء ملف إنشاء هدف

يتم ضبط نظام إنشاء deqp للاستهدافات الجديدة باستخدام ملفات إنشاء الاستهدافات. يحدِّد ملف الإنشاء المستهدَف الميزات التي يتيحها النظام الأساسي والمكتبات أو مسارات التضمين الإضافية المطلوبة. تتّبع أسماء الملفات المستهدَفة تنسيق targets/NAME/NAME.cmake ويتم اختيار الهدف باستخدام مَعلمة الإنشاء DEQP_TARGET.

تكون مسارات الملفات في الملفات المستهدَفة نسبية إلى الدليل الأساسي deqp، وليس الدليل targets/NAME. يمكن ضبط المتغيّرات العادية التالية من خلال ملف الإنشاء المستهدَف.

متغير الوصف
DEQP_TARGET_NAME

اسم الهدف (سيتم تضمينه في سجلّات الاختبار)

DEQP_SUPPORT_GLES2

ما إذا كان GLES2 متوافقًا (الإعداد التلقائي: "إيقاف")

DEQP_GLES2_LIBRARIES

مكتبات GLES2 (اترك الحقل فارغًا إذا لم تكن متوافقة أو إذا تم استخدام التحميل الديناميكي)

DEQP_SUPPORT_GLES3

ما إذا كان GLES3.x متوافقًا (الإعداد التلقائي: "إيقاف")

DEQP_GLES3_LIBRARIES

مكتبات GLES3.x (اترك الحقل فارغًا إذا لم تكن متوافقة أو إذا تم استخدام التحميل الديناميكي)

DEQP_SUPPORT_VG

ما إذا كان معيار OpenVG متوافقًا (الإعداد التلقائي: غير مفعَّل)

DEQP_OPENVG_LIBRARIES

مكتبات OpenVG (اترك الحقل فارغًا إذا لم تكن متوافقة أو إذا تم استخدام التحميل الديناميكي)

DEQP_SUPPORT_EGL

ما إذا كان EGL متوافقًا (الإعداد التلقائي: إيقاف)

DEQP_EGL_LIBRARIES

مكتبات EGL (اترك الحقل فارغًا إذا لم تكن متوافقة أو إذا تم استخدام التحميل الديناميكي)

DEQP_PLATFORM_LIBRARIES

مكتبات إضافية خاصة بالمنصة مطلوبة للربط

DEQP_PLATFORM_COPY_LIBRARIES

قائمة بالمكتبات التي يتم نسخها إلى كل دليل إنشاء ملف ثنائي للاختبار يمكن استخدامه لنسخ المكتبات المطلوبة لتشغيل الاختبارات ولكنّها ليست في مسار البحث التلقائي.

TCUTIL_PLATFORM_SRCS

قائمة مصادر منافذ النظام الأساسي يتم تحديد المصادر التلقائية استنادًا إلى الإمكانات ونظام التشغيل.

ملاحظة: تكون المسارات نسبية إلى: framework/platform

يمكن لملف الإنشاء المستهدَف إضافة مسارات تضمين أو ربط إضافية باستخدام دالتَي CMake include_directories() وlink_directories().

إصدار Win32

إنّ أسهل طريقة لإنشاء وحدات deqp لنظام التشغيل Windows هي استخدام نظام الإنشاء CMake. ستحتاج إلى CMake 2.6.12 أو إصدار أحدث ومصحِّح Microsoft Visual C/C++. تم اختبار أداة deqp باستخدام Visual Studio 2013.

يمكن إنشاء ملفات مشاريع Visual Studio باستخدام الأمر التالي:

cmake path\to\src\deqp -G "Visual Studio 12"

يمكن إنشاء إصدار 64 بت من خلال اختيار "Visual Studio VERSION Win64" كمُنشئ الإصدار:

cmake path\to\src\deqp -G "Visual Studio 12 Win64"

يمكنك أيضًا إنشاء ملفات make الخاصة بـ NMake باستخدام الخيار -G "NMake Makefiles" بالإضافة إلى نوع الإنشاء (-DCMAKE_BUILD_TYPE="Debug" أو "Release").

إنشاء سياق العرض

يمكن إنشاء سياق العرض باستخدام WGL أو EGL على نظام التشغيل Windows.

توافق WGL

تتيح جميع ملفات Win32 الثنائية إنشاء سياق GL باستخدام WGL لأنّها لا تتطلّب سوى المكتبات العادية. يمكن اختيار سياق WGL باستخدام وسيطة سطر الأوامر --deqp-gl-context-type=wgl. في وضع WGL، يستخدم deqp إضافة WGL_EXT_create_context_es_profile لإنشاء سياقات OpenGL ES. تم اختبار هذه الطريقة للعمل مع أحدث برامج التشغيل من NVIDIA وIntel. لا تتوافق برامج تشغيل AMD مع الإضافة المطلوبة.

توافق EGL

يتم إنشاء deqp باستخدام التحميل الديناميكي لـ EGL على نظام التشغيل Windows إذا كان DEQP_SUPPORT_EGL مفعّلاً. وهذا هو الإعداد التلقائي في معظم الاستهدافات. بعد ذلك، إذا كان المضيف يتضمّن مكتبات EGL متاحة، من الممكن إجراء الاختبارات باستخدامها مع مَعلمة سطر الأوامر: --deqp-gl-context-type=egl

إصدار Android

يستخدم الإصدار المخصّص لنظام التشغيل Android نصوص إنشاء CMake لإنشاء رمز الاختبار الأصلي. يتم تجميع أجزاء Java، أي "خادم تنفيذ الاختبارات" و"الرمز البرمجي الأساسي لتطبيق الاختبار"، باستخدام أدوات إنشاء Android العادية.

لتجميع برامج اختبار deqp لنظام التشغيل Android باستخدام النصوص البرمجية لإنشاء الإصدارات المقدَّمة، ستحتاج إلى ما يلي:

  • أحدث إصدار من مجموعة تطوير البرامج (NDK) لنظام التشغيل Android، ويسرد ملف android/scripts/common.py الإصدار المطلوب
  • حزمة SDK مستقلة لنظام التشغيل Android تتضمّن واجهة برمجة التطبيقات 13 وحِزم أدوات حزمة SDK وأدوات حزمة SDK الأساسية وأدوات حزمة SDK لإنشاء البرامج
  • Apache Ant 1.9.4 (مطلوب لإنشاء رمز Java)
  • CMake 2.8.12 أو إصدار أحدث
  • Python 2.6 أو إصدار أحدث من سلسلة 2.x، ولا يتوافق Python 3.x
  • لنظام التشغيل Windows: إما NMake أو JOM في PATH
    • يتيح JOM إنشاء الإصدارات بشكل أسرع.
  • اختياري: يمكن أيضًا استخدام أداة Ninja make على نظام التشغيل Linux.

يتم العثور على الملفات الثنائية لـ Ant وSDK استنادًا إلى متغيّر البيئة PATH مع بعض الإعدادات التلقائية التي تلغي الإعدادات الأخرى. يتم التحكّم في المنطق من خلال android/scripts/common.py.

يجب أن يكون دليل NDK هو ~/android-ndk-VERSION أو C:/android/android-ndk-VERSION أو محدّدًا من خلال متغيّر البيئة ANDROID_NDK_PATH.

يتم برمجة مكونات Deqp على الجهاز وخدمة تنفيذ الاختبار وبرامج الاختبار من خلال تنفيذ النص البرمجي android/scripts/build.py. يتم إنشاء حزمة APK .النهائية في android/package/bin ويمكن تثبيتها باستخدام النص البرمجي install.py. في حال استخدام مشغِّل سطر الأوامر، يتم تشغيل ExecService باستخدام نص launch.py البرمجي على الجهاز من خلال ADB. يمكن تنفيذ النصوص البرمجية من أي دليل.

إصدار Linux

يمكن إنشاء الثنائيات الاختبارية وأدوات سطر الأوامر لنظام التشغيل Linux من خلال إنشاء ملفات make باستخدام CMake. هناك أهداف إنشاء متعددة محدّدة مسبقًا تكون مفيدة عند إنشاء حِزم لنظام التشغيل Linux.

إنشاء استهداف الوصف
default

الهدف التلقائي الذي يستخدم ميزة فحص CMake للنظام الأساسي لتحديد مدى توفّر واجهات برمجة تطبيقات مختلفة

x11_glx

يستخدم GLX لإنشاء سياقات OpenGL (ES).

x11_egl

يستخدم EGL لإنشاء سياقات OpenGL (ES).

x11_egl_glx

يتوافق مع كلّ من GLX وEGL مع X11.

استخدِم دائمًا -DCMAKE_BUILD_TYPE=<Debug|Release> لتحديد نوع الإصدار. Release هو خيار تلقائي جيد. وفي حال عدم توفّر هذه القيمة، يتم إنشاء إصدار تلقائي غير محسَّن.

يمكن استخدام وسيطات سطر الأوامر -DCMAKE_C_FLAGS و-DCMAKE_CXX_FLAGS لتمرير وسيطات إضافية إلى المُجمِّع. على سبيل المثال، يمكن إنشاء الإصدار 32 بت أو 64 بت من خلال ضبط -DCMAKE_C(XX)_FLAGS="-m32" أو "-m64" على التوالي. في حال عدم تحديد القيمة، يتم استخدام البنية الأصلية لسلسلة الأدوات، والتي تكون عادةً 64 بت على سلسلة أدوات 64 بت.

يمكن استخدام المَعلمتَين -DCMAKE_LIBRARY_PATH و-DCMAKE_INCLUDE_PATH لمنح CMake مكتبة إضافية أو تضمين مسارات البحث.

في ما يلي مثال على سطر أوامر كامل يُستخدَم لإجراء عملية تصحيح أخطاء لإصدار 32 بت باستخدام رؤوس برامج التشغيل والمكتبات في موقع مخصّص:

cmake <path to src>/deqp -DDEQP_TARGET=x11_egl -DCMAKE_C_FLAGS="-m32"
-DCMAKE_CXX_FLAGS="-m32" -DCMAKE_BUILD_TYPE=Debug
-DCMAKE_LIBRARY_PATH="PATH_TO_DRIVER/lib"
-DCMAKE_INCLUDE_PATH="PATH_TO_DRIVER/inc"
make -j4

الترجمة المتعدّدة

يمكن إجراء عملية الترجمة المتعدّدة باستخدام ملف سلسلة أدوات CMake. يحدد ملف Toolchain المحول البرمجي المراد استخدامه، إلى جانب مسارات البحث المخصصة للمكتبات والعناوين. يتم تضمين العديد من ملفات سلسلة الأدوات للسيناريوهات الشائعة في حزمة الإصدار في الدليل framework/delibs/cmake.

بالإضافة إلى متغيّرات CMake العادية، يمكن ضبط المتغيّرات التالية الخاصة بـ deqp من خلال ملف سلسلة الأدوات. يمكن عادةً لـ CMake رصد DE_OS وDE_COMPILER وDE_PTR_SIZE بشكل صحيح، ولكن يجب ضبط DE_CPU من خلال ملف سلسلة الأدوات.

متغير الوصف
DE_OS

نظام التشغيل القيم المسموح بها هي: DE_OS_WIN32, DE_OS_UNIX, DE_OS_WINCE, DE_OS_OSX, DE_OS_ANDROID, DE_OS_SYMBIAN, DE_OS_IOS

DE_COMPILER

نوع المُجمِّع القيم المسموح بها هي: DE_COMPILER_GCC, DE_COMPILER_MSC, DE_COMPILER_CLANG

DE_CPU

نوع وحدة المعالجة المركزية القيم المسموح بها هي: DE_CPU_ARM, DE_CPU_X86.

DE_PTR_SIZE

sizeof(void*) على المنصة. القيم المسموح بها هي: 4 و8

يمكن اختيار ملف سلسلة الأدوات باستخدام مَعلمة الإنشاء CMAKE_TOOLCHAIN_FILE. على سبيل المثال، سيؤدي ما يلي إلى إنشاء ملفات makefile لعملية إنشاء باستخدام المُجمِّع الشامل CodeSourcery لأجهزة ARM/Linux:

cmake PATH_TO_SRC/deqp –DDEQP_BUILD_TYPE="Release"
–DCMAKE_TOOLCHAIN_FILE=PATH_TO_SRC/delibs/cmake/toolchain-arm-cs.cmake
–DARM_CC_BASE=PATH_TO_CC_DIRECTORY

ربط مكتبتَي GLES وEGL أثناء التشغيل

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

في حال تفعيل واجهة برمجة تطبيقات في إعدادات التصميم وعدم توفير مكتبات الربط، سيحمِّل deqp نقاط الدخول المطلوبة في وقت التشغيل. إذا أردت استخدام الربط الثابت، قدِّم مكتبات الربط المطلوبة في متغيّر إعدادات الإنشاء DEQP_<API>_LIBRARIES.

نقل إطار عمل الاختبار

يتضمن نقل deqp ثلاث خطوات: تكييف مكتبات النقل الأساسية، وتنفيذ واجهات دمج منصة إطار العمل التجريبي، ونقل خدمة التنفيذ.

يسرد الجدول أدناه المواقع الجغرافية للتغييرات المحتمَلة في عملية النقل. ومن المحتمل أن يكون أي محتوى خارج هذه الفئات غريبًا.

الموقع الجغرافي الوصف
framework/delibs/debase
framework/delibs/dethread
framework/delibs/deutil

أي عمليات تنفيذ ضرورية للرمز البرمجي الخاص بنظام التشغيل

framework/qphelper/qpCrashHandler.c

اختياري: التنفيذ لنظام التشغيل

framework/qphelper/qpWatchDog.c

التنفيذ لنظام التشغيل يستند الإصدار الحالي إلى dethread ومكتبة C العادية.

framework/platform

يمكن تنفيذ منفذ المنصة الجديد ورمز التطبيق التمهيدي كما هو موضّح في منفذ منصة إطار عمل الاختبار.

مكتبات النقل الأساسية

تتوافق مكتبات النقل الأساسية حاليًا مع نظام التشغيل Windows ومعظم أنواع نظام التشغيل Linux ونظام التشغيل Mac OS وiOS وAndroid. إذا كان الهدف الاختباري يعمل على أحد أنظمة التشغيل هذه، من المرجّح ألا تكون هناك حاجة إلى تعديل مكتبات النقل الأساسية على الإطلاق.

منفذ منصة إطار عمل الاختبار

يتطلب منفذ منصة إطار عمل اختبار deqp مكوّنَين: نقطة دخول التطبيق وتنفيذ واجهة المنصة.

تتحمّل نقطة دخول التطبيق مسؤولية إنشاء عنصر النظام الأساسي، وإنشاء عنصر سطر الأوامر (tcu::CommandLine)، وفتح سجلّ اختبار (tcu::TestLog)، وتكرار تطبيق الاختبار (tcu::App). إذا كان نظام التشغيل المستهدَف يتيح نقطة دخول main() عادية، يمكن استخدامtcuMain.cpp كتطبيق نقطة الدخول.

يتم وصف واجهة برمجة التطبيقات لمنصّة deqp بالتفصيل في الملفات التالية.

ملف الوصف
framework/common/tcuPlatform.hpp

الفئة الأساسية لجميع منافذ المنصة

framework/opengl/gluPlatform.hpp

واجهة نظام OpenGL الأساسي

framework/egl/egluPlatform.hpp

واجهة منصة EGL

framework/platform/tcuMain.cpp

نقطة دخول التطبيق العادية

الفئة الأساسية لجميع منافذ المنصة هي tcu::Platform. يمكن أن يدعم منفذ النظام الأساسي اختياريًا واجهات خاصة بـ GL وEGL. اطّلِع على الجدول التالي للحصول على نظرة عامة على الإجراءات التي يجب تنفيذها لبدء الاختبارات.

الوحدة الواجهة

وحدات اختبار OpenGL (ES)

واجهة نظام GL الأساسي

وحدة اختبار EGL

واجهة منصة EGL

تتوفّر تعليمات مفصّلة لتنفيذ منافذ المنصة في عناوين ملف ‎.java لطبقة النقل.

خدمة تنفيذ الاختبار

لاستخدام البنية الأساسية لتنفيذ اختبار deqp أو أداة تنفيذ سطر الأوامر، يجب أن تكون خدمة تنفيذ الاختبار متاحة على الهدف. يتم توفير تنفيذ محمول للخدمة بلغة C++ في الدليل execserver. يتم إنشاء ملف الثنائي المستقل كجزء من عملية إنشاء ملف اختبار deqp لأجهزة الكمبيوتر الشخصي. يمكنك تعديل execserver/CMakeLists.txt لتفعيل إصدار على استهدافات أخرى.

يقبل إصدار C++ من خدمة تنفيذ الاختبار سمتَين لسطر الأوامر:

  • سيضبط --port=<port> منفذ TCP الذي يستمع إليه الخادم. القيمة التلقائية هي 50016.
  • سيؤدي --single إلى إنهاء عملية الخادم عند انقطاع اتصال العميل. بشكلٍ تلقائي، ستظل عملية الخادم نشطة لمعالجة المزيد من طلبات تنفيذ الاختبار.

إجراء الاختبارات

تقدّم هذه الصفحة تعليمات لتشغيل اختبارات deqp في بيئةَي Linux وWindows ، باستخدام مَعلمات سطر الأوامر والعمل مع حزمة تطبيق Android.

بيئات Linux وWindows

ابدأ بنسخ الملفات والأدلة التالية إلى الهدف.

الوحدة الدليل هدف
خادم التنفيذ build/execserver/execserver <dst>/execserver
وحدة EGL build/modules/egl/deqp-egl <dst>/deqp-egl
وحدة GLES2 build/modules/gles2/deqp-gles2 <dst>/deqp-gles2
data/gles2 <dst>/gles2
وحدة GLES3 build/modules/gles3/deqp-gles3 <dst>/deqp-gles3
data/gles3 <dst>/gles3
وحدة GLES3.1 build/modules/gles31/deqp-gles31 <dst>/deqp-gles31
data/gles31 <dst>/gles31
وحدة GLES3.2 build/modules/gles32/deqp-gles32 <dst>/deqp-gles32
data/gles32 <dst>/gles32

يمكنك نشر خدمة التنفيذ والاختبارات الثنائية في أي مكان في ملف النظام المستهدف، ولكن تتوقع الاختبارات الثنائية العثور على أدلة البيانات في الدليل الحالي للعمل. عند الاستعداد، ابدأ خدمة تنفيذ الاختبار على الجهاز المستهدَف. لمعرفة تفاصيل عن بدء الخدمة، اطّلِع على مقالة اختبار خدمة التنفيذ.

وسيطات سطر الأوامر

يسرد الجدول التالي وسيطات سطر الأوامر التي تؤثّر في تنفيذ جميع برامج الاختبار.

الوسيطة الوصف
--deqp-case=<casename> تشغيل الحالات التي تتطابق مع نمط معيّن يمكن استخدام حرف البدل (*).
--deqp-log-filename=<filename> اكتب نتائج الاختبار في الملف الذي تقدّم اسمه. ستضبط خدمة تنفيذ الاختبار اسم الملف عند بدء الاختبار.
--deqp-stdin-caselist
--deqp-caselist=<caselist>
--deqp-caselist-file=<filename>
قراءة قائمة الحالات من stdin أو من وسيطة معيّنة ستضبط خدمة تنفيذ الاختبار الوسيطة وفقًا لطلب التنفيذ الذي تم استلامه. راجِع القسم التالي للاطّلاع على وصف لتنسيق قائمة الطلبات.
--deqp-test-iteration-count=<count> إلغاء عدد التكرارات للاختبارات التي تتيح عددًا متغيرًا من التكرارات
--deqp-base-seed=<seed> البذرة الأساسية لحالات الاختبار التي تستخدِم العشوائية

الوسيطات الخاصة بـ GLES2 وGLES3

يسرد الجدول التالي الوسيطات الخاصة بـ GLES2 وGLES3.
الوسيطة الوصف
--deqp-gl-context-type=<type> نوع سياق OpenGL تعتمد أنواع السياق المتاحة على النظام الأساسي. على الأنظمة الأساسية التي تتيح استخدام EGL، يمكن استخدام القيمة egl لاختيار السياق EGL.
--deqp-gl-config-id=<id> يمكنك إجراء اختبارات لرقم تعريف إعدادات GL المقدَّم. يعتمد التفسير على النظام الأساسي. في منصة EGL، يُعرف هذا المعرّف باسم رقم تعريف إعدادات EGL.
--deqp-gl-config-name=<name> يمكنك إجراء اختبارات لإعداد GL مُعنوَن. يعتمد التفسير على النظام الأساسي. بالنسبة إلى EGL، يكون التنسيق هو rgb(a)<bits>d<bits>s<bits>. على سبيل المثال، ستؤدي قيمة rgb888s8 إلى اختيار الإعداد الأول الذي يكون فيه مخطّط تخزين مؤقت للألوان هو RGB888 ويكون مخطّط تخزين مؤقت للنموذج يحتوي على 8 بت.
--deqp-gl-context-flags=<flags> لإنشاء سياق حدِّد robust أو debug.
--deqp-surface-width=<width>
--deqp-surface-height=<height>
حاوِل إنشاء سطح بحجم معيّن. ويمكنك عدم تفعيل هذه الميزة.
--deqp-surface-type=<type> استخدِم نوع سطح معيّنًا كهدف التقديم الرئيسي للاختبار. وتشمل الأنواع المحتمَلة window وpixmap وpbuffer وfbo.
--deqp-screen-rotation=<rotation> اتجاه الشاشة بزيادات قدرها 90 درجة للأنظمة الأساسية التي تتيح ذلك

تنسيق قائمة حالات الاختبار

يمكن تقديم قائمة حالات الاختبار بتنسيقَين. الخيار الأول هو إدراج الاسم الكامل لكل اختبار في سطر منفصل في ملف ASCII عادي. مع نمو مجموعات الاختبار، يمكن أن تصبح البادئات المتكررة مرهقة. لتجنُّب تكرار البادئات، استخدِم بنية شجرة البحث التدرّجي (المعروفة أيضًا باسم شجرة البادئات) الموضّحة أدناه.

{nodeName{firstChild{…},…lastChild{…}}}

مثلاً:

{dEQP-EGL{config-list,create_context{rgb565_depth_stencil}}}

يُترجم ذلك إلى حالتَي الاختبار التاليتَين:

dEQP-EGL.config_list
dEQP-EGL.create_context.rgb565_depth_stencil

Android

تحتوي حزمة تطبيق Android على جميع المكوّنات المطلوبة، بما في ذلك خدمة تنفيذ الاختبار والملفات الثنائية للاختبار وملفات البيانات. نشاط الاختبار هو NativeActivity يستخدم EGL (يتطلب Android 3.2 أو إصدارًا أحدث).

يمكن تثبيت حزمة التطبيق باستخدام الأمر التالي (اسم المعروض هو اسم حزمة APK في حزمة Android CTS، ويعتمد الاسم على الإصدار):

adb –d install –r com.drawelements.deqp.apk

لبدء خدمة تنفيذ الاختبار وإعداد إعادة توجيه المنفذ، استخدِم الخطوات التالية:

adb –d forward tcp:50016 tcp:50016
adb –d shell am start –n com.drawelements.deqp/.execserver.ServiceStarter

يمكن تفعيل عمليات طباعة تصحيح الأخطاء من خلال تنفيذ ما يلي قبل بدء الاختبار:

adb –d shell setprop log.tag.dEQP DEBUG

تنفيذ الاختبارات على Android بدون مجموعة اختبار التوافق (CTS) لنظام التشغيل Android

لبدء نشاط تنفيذ الاختبار يدويًا، أنشئ نية Android تستهدف android.app.NativeActivity. يمكن العثور على الأنشطة في حزمة com.drawelements.deqp. يجب إرسال سطر الأوامر كسلسلة إضافية باستخدام المفتاح "cmdLine" في Intent.

يتمّ كتابة سجلّ اختبار في /sdcard/dEQP-log.qpa. إذا لم يبدأ تنفيذ الاختبار بشكلٍ طبيعي، تتوفّر معلومات إضافية لتصحيح الأخطاء في log الجهاز.

يمكنك بدء نشاط من سطر الأوامر باستخدام أداة am. على سبيل المثال، لإجراء اختبارات dEQP-GLES2.info على منصة تتوافق مع NativeActivity,، استخدِم الأوامر التالية.

adb -d shell am start -n com.drawelements.deqp/android.app.NativeActivity -e \
'cmdLine "deqp --deqp-case=dEQP-GLES2.info.* --deqp-log-filename=/sdcard/dEQP-Log.qpa"'

تصحيح الأخطاء على Android

لتنفيذ الاختبارات ضمن مصحِّح أخطاء GDB على Android، عليك أولاً تجميع ملف الإصدار المخصّص لتصحيح الأخطاء و تثبيته من خلال تشغيل النصين البرمجيَين التاليَين:

python android/scripts/build.py --native-build-type=Debug
python android/scripts/install.py

بعد تثبيت إصدار تصحيح الأخطاء على الجهاز، لبدء الاختبارات ضمن GDB الذي يعمل على المضيف، شغِّل الأمر التالي:

python android/scripts/debug.py \
--deqp-commandline="--deqp-log-filename=/sdcard/TestLog.qpa --deqp-case=dEQP-GLES2.functional.*"

يعتمد سطر الأوامر deqp على حالات الاختبار التي سيتم تنفيذها وغيرها من المَعلمات المطلوبة. يضيف النص البرمجي نقطة فاصلة تلقائية في بداية تنفيذ deqp (tcu::App::App).

يقبل النص البرمجي debug.py وسيطات متعددة لسطر الأوامر لتحديد الإجراءات، مثل ضبط نقاط التوقف لتصحيح الأخطاء، ومَعلمات اتصال gdbserver، ومسارات إلى برامج ثنائية إضافية لتصحيح الأخطاء (استخدِم debug.py --help لجميع الوسيطات والتفسيرات). ينسخ النص البرمجي أيضًا بعض المكتبات التلقائية من الجهاز المستهدَف للحصول على قوائم الرموز.

للتنقّل في رمز برنامج التشغيل (مثلاً عندما يحتاج GDB إلى معرفة مواقع الملفّات الثنائية التي تتضمّن معلومات تصحيح الأخطاء بالكامل)، أضِف المزيد من المكتبات من خلال مَعلمات سطر الأوامرdebug.py. يُنشئ هذا البرنامج النصي ملفًا للإعدادات في GDB بدءًا من السطر 132 من ملف البرنامج النصي. يمكنك تقديم مسارات إضافية إلى الملفات الثنائية وما إلى ذلك، ولكن من المفترض أن يكون تقديم مَعلمات سطر العبارة الصحيحة كافيًا.

ملاحظة: على نظام التشغيل Windows، يتطلّب ملف GDB الثنائي libpython2.7.dll. قبل تشغيل debug.py، أضِف <path-to-ndk>/prebuilt/windows/bin إلى متغيّر PATH.

ملاحظة: لا يعمل تصحيح أخطاء الرموز البرمجية الأصلية على الإصدار الأصلي من Android 4.3. وللاطّلاع على الحلول البديلة، يُرجى الرجوع إلى هذا الخطأ العلني. لا يتضمّن الإصدار 4.4 من نظام التشغيل Android والإصدارات الأحدث هذا الخطأ.

أتمتة الاختبارات

يمكن دمج وحدات اختبار Deqp في أنظمة الاختبار المبرمَج بعدة طرق. يعتمد النهج الأفضل على البنية الأساسية الحالية للاختبار والبيئة المستهدفة.

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

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

تأتي أداة deqp مزوّدة بأدوات تنفيذ الاختبارات من سطر الأوامر التي يمكن استخدامها مع خدمة التنفيذ لتحقيق عملية دمج أكثر فعّالية. يرصد المُنفِّذ انتهاء عملية الاختبار وسيستأنف تنفيذ الاختبار في الحالة التالية المتاحة. يتم إنشاء ملف سجلّ واحد من جلسة الاختبار الكاملة. هذا الإعداد مثالي لأنظمة الاختبار البسيطة التي لا توفّر مرافق لاسترداد الأعطال.

أدوات تنفيذ الاختبار من سطر الأوامر

تتضمّن مجموعة أدوات سطر الأوامر الحالية أداة تنفيذ اختبارات عن بُعد، ومُنشئ مقارنة لسجلّ الاختبار لتحليل الانحدار، ومحوِّل لسجلّ الاختبار إلى ملف CSV، ومحوِّل لسجلّ الاختبار إلى ملف XML، ومحوِّل لسجلّ الاختبار إلى JUnit.

يمكن العثور على الرمز المصدر لهذه الأدوات في الدليل executor، ويتم دمج الملفات الثنائية في الدليل <builddir>/executor.

أداة تنفيذ الاختبارات من سطر الأوامر

أداة تنفيذ اختبارات سطر الأوامر هي أداة محمولة لبرنامج C++ لبدء عملية تنفيذ اختبار على جهاز وجمع السجلات الناتجة منه عبر بروتوكول TCP/IP. يتصل "المنفِّذ" بخدمة التنفيذ (execserver) على الجهاز المستهدَف. وتوفر هذه الأدوات معًا وظائف مثل الاسترداد من الأعطال في عملية الاختبار. توضِّح الأمثلة التالية كيفية استخدام أداة تنفيذ الاختبارات من سطر الأوامر (استخدِم --help لمزيد من التفاصيل):

المثال 1: إجراء اختبارات وظيفية لواجهة برمجة التطبيقات GLES2 على جهاز Android
executor --connect=127.0.0.1 --port=50016 --binaryname=
com.drawelements.deqp/android.app.NativeActivity
--caselistdir=caselists
--testset=dEQP-GLES2.* --out=BatchResult.qpa
--cmdline="--deqp-crashhandler=enable --deqp-watchdog=enable
--deqp-gl-config-name=rgba8888d24s8"
المثال 2: مواصلة إجراء اختبار جزئي لـ OpenGL ES 2 على الجهاز
executor --start-server=execserver/execserver --port=50016
--binaryname=deqp-gles2 --workdir=modules/opengl
--caselistdir=caselists
--testset=dEQP-GLES2.* --exclude=dEQP-GLES2.performance.* --in=BatchResult.qpa
--out=BatchResult.qpa

تصدير ملف CSV لسجلّ الاختبار ومقارنته

يحتوي deqp على أداة لتحويل سجلّات الاختبار (ملفات ‎.qpa) إلى ملفات CSV. يحتوي ملف CSV الناتج على قائمة بحالات الاختبار ونتائجها. يمكن للّأداة أيضًا مقارنة نتيجتَين أو أكثر من نتائج الحِزم وعرض حالات الاختبار التي تتضمّن رموز حالة مختلفة فقط في نتائج حِزم الإدخال. ستُطبع مقارنة أيضًا عدد الحالات المطابقة.

إنّ الإخراج بتنسيق CSV عملي جدًا لإجراء المزيد من المعالجة باستخدام أدوات سطر الأوامر العادية أو باستخدام محرِّر جداول البيانات. يمكن اختيار تنسيق إضافي لنص عادي يمكن لشخص عادي قراءته باستخدام وسيطة سطر الأوامر التالية: --format=text

المثال 1: تصدير سجلّ الاختبار بتنسيق CSV
testlog-to-csv --value=code BatchResult.qpa > Result_statuscodes.csv
testlog-to-csv --value=details BatchResult.qpa > Result_statusdetails.csv
المثال 2: إدراج الاختلافات في نتائج الاختبار بين سجلَّي اختبار
testlog-to-csv --mode=diff --format=text Device_v1.qpa Device_v2.qpa

ملاحظة: تُخرج الوسيطة --value=code رمز نتيجة الاختبار ، مثل "اجتاز" أو "تعذّر اجتيازه". تختار الوسيطة --value=details توضيحًا إضافيًا للنتيجة أو القيمة الرقمية الناتجة عن اختبار الأداء أو الإمكانية أو الدقة.

تصدير سجلّ الاختبار بتنسيق XML

يمكن تحويل ملفات سجلّات الاختبار إلى مستندات XML صالحة باستخدام الأداة testlog-to-xml. يتوفّر وضعان للإخراج:

  • وضع المستندات المنفصلة، حيث يتم كتابة كل حالة اختبار ومستند caselist.xml summary في دليل وجهة
  • وضع الملف الفردي، حيث يتمّ كتابة جميع النتائج في ملف .qpa إلى مستند XML واحد.

يمكن عرض ملفات سجلّات الاختبار التي تم تصديرها في متصفّح باستخدام جدول تنسيقات XML. يتم توفير نماذج لمستندات جداول الأنماط (testlog.xsl وtestlog.css) في الدليل doc/testlog-stylesheet. لعرض ملفات السجلّ في متصفّح، انسخ ملفَي جدول الأنماط إلى الدليل نفسه الذي تتوفّر فيه مستندات XML التي تم تصديرها.

إذا كنت تستخدم Google Chrome، يجب الوصول إلى الملفات عبر بروتوكول HTTP لأنّ Chrome يقلل من إمكانية الوصول إلى الملفات المحلية لأسباب تتعلق بالأمان. يتضمّن تثبيت Python العادي خادم HTTP أساسيًا يمكن تشغيله لعرض الdirectory الحالي باستخدام الأمر python –m SimpleHTTPServer 8000. بعد تشغيل الخادم، ما عليك سوى توجيه متصفِّح Chrome إلى http://localhost:8000 لعرض سجلّ الاختبار.

التحويل إلى سجلّ اختبار JUnit

يمكن للعديد من أنظمة التشغيل الآلي للاختبار إنشاء تقارير نتائج عمليات تنفيذ الاختبار من ناتج JUnit. يمكن تحويل ملفات سجلّ اختبار deqp إلى تنسيق إخراج JUnit باستخدام أداة testlog-to-junit.

تتيح الأداة حاليًا ترجمة نتيجة حالة الاختبار فقط. بما أنّ JUnit لا يتوافق إلا مع النتيجة "اجتاز" و "تعذّر اجتياز"، يتم ربط نتيجة اجتياز deqp بـ "اجتاز JUnit"، وتعتبر النتائج الأخرى تعذُّر اجتياز. يتوفّر رمز نتيجة deqp الأصلي في مخرجات JUnit. ولا يتم الاحتفاظ بالبيانات الأخرى، مثل رسائل السجلّ وصور النتائج، في الإحالة الناجحة.

استخدام مجموعات اختبار خاصة

قد تحتاج بعض مجموعات الاختبار إلى خيارات خاصة لسطر الأوامر أو تتيح استخدامها، أو قد تتطلب عناية خاصة عند استخدامها على أنظمة معيّنة.

اختبارات الضغط لتخصيص الذاكرة

تُجري اختبارات الضغط لتحديد الذاكرة حالات نفاد الذاكرة من خلال تحديد موارد معيّنة باستمرار إلى أن يُبلغ برنامج التشغيل عن خطأ في الذاكرة.

على بعض المنصات، مثل Android ومعظم أنواع Linux، يمكن أن يحدث ما يلي: قد يُغلق نظام التشغيل عملية الاختبار بدلاً من السماح لبرنامج التشغيل بالتعامل مع الخطأ أو عرض خطأ "عدم توفّر ذاكرة". على هذه الأنظمة الأساسية، يتم تلقائيًا إيقاف الاختبارات المصمّمة لتسبب أخطاء تتعلق بنقص الذاكرة، ويجب تفعيلها باستخدام وسيطة سطر الأوامر --deqp-test-oom=enable. ننصحك بإجراء هذه الاختبارات يدويًا للتحقّق مما إذا كان النظام يعمل بشكل صحيح في ظل الضغط على الموارد. ومع ذلك، في مثل هذه الحالة، يجب تفسير تعطُّل عملية الاختبار على أنّه نجاح.

مجموعتا الاختبار

dEQP-GLES2.stress.memory.*
dEQP-GLES3.stress.memory.*

اختبارات الضغط لعمليات التقديم التي تستغرق وقتًا طويلاً

تم تصميم اختبارات الضغط لعرض المشاكل المتعلقة بالصلابة أثناء حمل المعالجة المتواصل. سيتم تنفيذ بضعة تكرارات فقط من الاختبارات تلقائيًا، ولكن يمكن ضبطها لتعمل إلى أجل غير مسمى من خلال تقديم --deqp-test-iteration-count=-1 مَعلمة سطر الأوامر. يجب إيقاف ميزة "مراقبة الاختبار" (--deqp-watchdog=disable) عند إجراء هذه الاختبارات لفترة طويلة.

مجموعتا الاختبار

dEQP-GLES2.stress.long.*
dEQP-GLES3.stress.long.*