AOSP شامل مجموعه آزمایش GPU برنامه کیفیت drawElements (deqp) در https://android.googlesource.com/platform/external/deqp است. این صفحه نحوه استقرار مجموعه آزمایشی deqp در محیط جدید را شرح میدهد.
برای کار کردن با جدیدترین کد ارسالشده، از شاخه deqp-dev استفاده کنید.
برای کدی که با نسخه خاصی از Android CTS مطابقت دارد، از شاخه
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 |
ابزار و کاربریهای پوسته اجراکننده آزمایش سمت میزبان |
external |
ساختن فهرست راهنمای تهی برای کتابخانههای خارجی libpng و zlib |
اجزای متنباز
deqp از libpng و zlib استفاده میکند که میتوان آنها را بااستفاده از اسکریپت
platform/external/deqp/external/fetch_sources.py یا ازطریق git
از platform/external/[libpng,zlib] واکشی کرد.
ساختن برنامههای آزمایشی
چارچوب آزمایش با درنظر گرفتن قابلیت انتقال طراحی شده است. تنها الزامات اجباری، پشتیبانی کامل از ++C و کتابخانههای سیستم استاندارد برای I/O، رشتهها، و سوکتها است.
سیستم ساخت CMake
منابع deqp دارای دستورگانهای ساخت برای CMake است که ابزار ترجیحی برای گردآوری برنامههای آزمایشی است.
CMake یک سیستم ساخت متنباز است که از چندین پلاتفرم و زنجیره ابزار پشتیبانی میکند. CMake فایلهای makefile بومی یا فایلهای پروژه IDE را از فایلهای پیکربندی مستقل از هدف تولید میکند. برای کسب اطلاعات بیشتر درباره CMake، لطفاً به مستندات CMake مراجعه کنید.
CMake از ساختهای خارج از درخت منبع پشتیبانی میکند و آنها را توصیه میکند، یعنی باید همیشه فایلهای ساخت یا فایلهای پروژه را در یک دایرکتوری ساخت جداگانه خارج از درخت منبع ایجاد کنید. CMake هیچ نوع هدف «distclean» ندارد، بنابراین حذف هر فایلی که CMake تولید کرده است باید بهصورت دستی انجام شود.
گزینههای پیکربندی بااستفاده از -DOPTION_NAME=VALUE
نحو به CMake داده میشود. برخیاز گزینههای معمولاً استفادهشده برای deqp در زیر فهرست شده است.
| گزینه پیکربندی | شرح |
|---|---|
DEQP_TARGET |
نام هدف، برای مثال: «android» اسکریپتهای deqp CMake شامل فایل
|
CMAKE_TOOLCHAIN_FILE |
مسیر فایل زنجیره ابزار برای CMake. برای ترجمه متقابل استفاده میشود. |
CMAKE_BUILD_TYPE |
نوع ساخت برای هدفهای فایل ساخت. مقادیر معتبر عبارتاند از: «اشکالزدایی» و «انتشار» توجه داشته باشید که تفسیر و نوع پیشفرض به سیستم ساخت هدف بستگی دارد. برای جزئیات بیشتر، مستندات 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 |
فهرست منبع درگاه پلاتفرم. منابع پیشفرض براساس قابلیتها و سیستمعامل تعیین میشوند. توجه: مسیرها نسبت به این مورد هستند: |
فایل ساخت هدف میتواند بااستفاده از توابع include_directories() و link_directories() CMake مسیرهای پیوند یا گنجاندن اضافی اضافه کند.
ساخت Win32
آسانترین راه برای ساختن واحدهای deqp برای Windows استفاده از سیستم ساخت CMake است. به CMake نسخه ۲.۶.۱۲ یا جدیدتر و کامپایلر Microsoft Visual C/C++ نیاز دارید. deqp با Visual Studio 2013 آزمایش شده است.
فایلهای پروژه Visual Studio را میتوان با فرمان زیر تولید کرد:
cmake path\to\src\deqp -G "Visual Studio 12"
با انتخاب «Visual Studio VERSION Win64» بهعنوان تولیدکننده ساخت میتوان ساخت ۶۴ بیتی ایجاد کرد:
cmake path\to\src\deqp -G "Visual Studio 12 Win64"
همچنین میتوانید فایلهای ساخت 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_SUPPORT_EGL روشن باشد، deqp با بارگیری پویا برای EGL در Windows ساخته میشود. این گزینه در اکثر هدفها پیشفرض است. سپس، اگر میزبان کتابخانههای EGL دردسترس داشته باشد، میتوان با پارامتر خط فرمان با آنها آزمایش اجرا کرد: --deqp-gl-context-type=egl
ساخت Android
ساخت Android از دستورگان ساخت CMake برای ساختن کد آزمایشی بومی استفاده میکند. بخشهای Java، یعنی «سرور اجرای آزمایش» و «تهمان برنامه آزمایش»، بااستفاده از ابزارهای ساخت استاندارد Android کامپایل میشوند.
برای گردآوری برنامههای آزمایشی deqp برای Android بااستفاده از نوشتههای ساختار ارائهشده، به موارد زیر نیاز دارید:
- جدیدترین نسخه
Android NDK؛ فایل
android/scripts/common.pyنسخه موردنیاز را فهرست میکند - کیت توسعه نرمافزار مستقل Android با API 13، «ابزارهای کیت توسعه نرمافزار»، «ابزارهای پلاتفرم کیت توسعه نرمافزار»، و «ابزارهای ساخت کیت توسعه نرمافزار» بستهها نصب شد
- Apache Ant 1.9.4 (موردنیاز برای ساخت کد جاوا)
- CMake 2.8.12 یا جدیدتر
- Python 2.6 یا جدیدتر در سری 2.x؛ از Python 3.x پشتیبانی نمیشود
- برای Windows: NMake یا JOM در
PATH- JOM ساخت سریعتر را ممکن میکند
- اختیاری: Ninja make نیز در Linux پشتیبانی میشود
فایلهای اجرایی Ant و کیت توسعه نرمافزار براساس متغیر محیطی PATH با
پیشفرضهای معین لغوکننده مکانیابی میشوند. منطق توسط android/scripts/common.py کنترل میشود.
دایرکتوری NDK باید ~/android-ndk-VERSION یا
C:/android/android-ndk-VERSION باشد یا ازطریق متغیر محیطی ANDROID_NDK_PATH
تعریف شود.
عناصر دروندستگاهی deqp، سرویس اجرای آزمایش، و برنامههای آزمایش با اجرای
نوشتار android/scripts/build.py ساخته میشوند. «کیت بسته Android» (APK) نهایی در
android/package/bin ایجاد میشود و با دستورگان install.py قابلنصب است. اگر از
مجری خط فرمان استفاده شود، ExecService
با اسکریپت launch.py ازطریق ADB در دستگاه راهاندازی میشود. اسکریپتها را میتوان از هر دایرکتوری اجرا کرد.
ساخت Linux
با تولید فایلهای ساخت بااستفاده از CMake، میتوان فایلهای اجرایی آزمایشی و ابزارهای خط فرمان را برای Linux ساخت. چندین هدف ساخت ازپیشتعریفشده وجود دارد که هنگام ساخت برای 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 میتوان برای ارسال متغیرهای مستقل اضافی به کامپایلر استفاده کرد. برای مثال، ساخت ۳۲ بیتی یا ۶۴ بیتی را میتوان با تنظیم بهترتیب -DCMAKE_C(XX)_FLAGS="-m32" یا "-m64" انجام داد. اگر مشخص نشده باشد، از معماری بومی زنجیره ابزار، که معمولاً ۶۴ بیتی در زنجیره ابزار ۶۴ بیتی است، استفاده میشود.
از آرگومانهای -DCMAKE_LIBRARY_PATH و -DCMAKE_INCLUDE_PATH میتوان برای CMake استفاده کرد
تا مسیرهای جستجوی کتابخانه یا گنجاندن اضافی را به CMake بدهد.
نمونهای از خط فرمان کامل که برای ساختن اشکالزدایی ۳۲ بیتی دربرابر سرایندها و کتابخانههای درایور در مکان سفارشی استفاده میشود به این صورت است:
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 میتوان به ترجمه متقابل دست یافت. فایل زنجیره ابزار
کامپایلر مورد استفاده را بههمراه مسیرهای جستجوی سفارشی برای
کتابخانهها و سرایندها مشخص میکند. چندین فایل زنجیره ابزار برای سناریوهای رایج در
بسته انتشار در دایرکتوری framework/delibs/cmake گنجانده شده است.
علاوهبر متغیرهای استاندارد CMake، متغیرهای ویژه deqp زیر را میتوان با فایل زنجیره ابزار تنظیم کرد. CMake معمولاً میتواند DE_OS، DE_COMPILER
و DE_PTR_SIZE را بهدرستی شناسایی کند، اما DE_CPU باید توسط فایل زنجیره ابزار تنظیم شود.
| متغیر | شرح |
|---|---|
DE_OS |
سیستمعامل. مقادیر پشتیبانیشده: |
DE_COMPILER |
نوع گردآورنده. مقادیر پشتیبانیشده: |
DE_CPU |
نوع CPU. مقادیر پشتیبانیشده عبارتاند از: |
DE_PTR_SIZE |
sizeof(void*) در پلاتفرم. مقادیر پشتیبانیشده: ۴ و ۸ |
فایل زنجیره ابزار را میتوان بااستفاده از پارامتر ساخت CMAKE_TOOLCHAIN_FILE انتخاب کرد.
برای مثال، دستور زیر فایلهای make را برای ساختن بااستفاده از کامپایلر متقابل 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/qphelper/qpCrashHandler.c |
اختیاری: پیادهسازی برای سیستمعامل شما. |
framework/qphelper/qpWatchDog.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 |
دستورالعملهای دقیق برای پیادهسازی درگاههای پلاتفرم در سرایندهای لایه انتقال موجود است.
سرویس اجرای آزمایش
برای استفاده از زیرساخت اجرای آزمون deqp یا اجراکننده خط فرمان،
خدمات اجرای آزمون باید در هدف دردسترس باشد. پیادهسازی قابلحمل C++
از این سرویس در دایرکتوری execserver ارائه شده است. باینری مستقل بهعنوان بخشی از ساختار
واحد آزمایشی deqp برای هدفهای رایانه ساخته میشود. میتوانید execserver/CMakeLists.txt را تغییر دهید تا ساخت در
هدفهای دیگر فعال شود.
نسخه C++ سرویس اجرای آزمایش دو پارامتر خط فرمان را میپذیرد:
-
--port=<port>درگاه TCP را که سرور در آن گوش میدهد تنظیم میکند. پیشفرض ۵۰۰۱۶ است. - وقتی اتصال کارخواه قطع شود،
--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 |
فهرست پرونده را از 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 است و میانگیر شابلون ۸ بیت دارد. |
--deqp-gl-context-flags=<flags> |
زمینهای ایجاد میکند. robust یا debug را مشخص کنید. |
--deqp-surface-width=<width> |
سطحی با اندازه معین ایجاد کنید. پشتیبانی از این مورد اختیاری است. |
--deqp-surface-type=<type> |
از نوع سطح دادهشده بهعنوان هدف اصلی پردازنده آزمایشی استفاده کنید. انواع
احتمالی عبارتاند از window، pixmap، pbuffer،
و fbo. |
--deqp-screen-rotation=<rotation> |
جهت صفحه در گامهای ۹۰ درجه برای پلاتفرمهایی که از آن پشتیبانی میکنند. |
قالب فهرست چارچوب تست
فهرست چارچوب تست را میتوان در دو قالب ارائه کرد. اولین گزینه این است که نام کامل هر آزمایش را در یک خط جداگانه در یک فایل استاندارد 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:50016adb –d shell am start –n com.drawelements.deqp/.execserver.ServiceStarter
با اجرای دستور زیر قبلاز شروع آزمایشها، میتوان چاپ اشکالزدایی را فعال کرد:
adb –d shell setprop log.tag.dEQP DEBUG
اجرای آزمایشها در Android بدون Android CTS
برای شروع کردن دستی فعالیت اجرای آزمایش، هدف Android را بسازید
که android.app.NativeActivity را هدفیابی میکند. فعالیتها را میتوانید در بسته com.drawelements.deqp پیدا کنید. خط فرمان باید
بهصورت رشته اضافی با کلید "cmdLine" در «هدف» ارائه شود.
گزارش آزمایشی در /sdcard/dEQP-log.qpa نوشته میشود. اگر اجرای آزمایشی
بهطور عادی شروع نشود، اطلاعات اشکالزدایی اضافی در گزارش
دستگاه دردسترس است.
میتوانید فعالیتی را از خط فرمان بااستفاده از ابزار 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
برای اجرای آزمایشها تحت «اشکالزدای GNU» (GDB) در Android، ابتدا ساخت اشکالزدایی را با اجرای دو دستورگان زیر کامپایل و نصب کنید:
python android/scripts/build.py --native-build-type=Debugpython 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 مینویسد که از خط ۱۳۲ فایل اسکریپت شروع میشود. میتوانید مسیرهای اضافی برای فایلهای اجرایی ارائه دهید، اما ارائه پارامترهای خط فرمان صحیح باید کافی باشد.
توجه: در Windows، فایل اجرایی GDB به
libpython2.7.dll نیاز دارد. قبلاز راهاندازی debug.py،
<path-to-ndk>/prebuilt/windows/bin را به متغیر PATH اضافه کنید.
توجه: اشکالزدایی کد بومی در Android 4.3 اصلی کار نمیکند؛ برای راهحلهای موقت، به این اشکال عمومی مراجعه کنید. Android نسخه ۴.۴ و بالاتر این اشکال را ندارند.
خودکارسازی کردن آزمایشها
واحدهای آزمایشی Deqp را میتوان به روشهای مختلفی در سیستمهای آزمایشی خودکارشده ادغام کرد. بهترین رویکرد به زیرساخت آزمایش موجود و محیط هدف بستگی دارد.
برونداد اصلی از اجرای آزمایشی همیشه فایل گزارش آزمایشی است، یعنی فایلی
با پسوند .qpa. نتایج کامل آزمایش را میتوان از گزارش آزمایش تجزیه کرد. برونداد کنسول
فقط اطلاعات اشکالزدایی است و ممکن است در همه پلاتفرمها دردسترس نباشد.
دودوییهای آزمایشی را میتوان مستقیماً از سیستم خودکارسازی آزمایشی فراخوانی کرد. باینری آزمایش را میتوان برای موردی خاص، برای مجموعهای آزمایشی، یا برای همه آزمایشهای دردسترس راهاندازی کرد. اگر درطول اجرا خطای مهلکی رخ دهد (مثل برخیاز خطاهای API یا خرابی)، اجرای آزمایش متوقف خواهد شد. برای آزمایش پسرفت، بهترین رویکرد این است که فایلهای اجرایی آزمایش را برای موارد جداگانه یا مجموعههای آزمایش کوچک بهصورت جداگانه فراخوانی کنید تا حتی درصورت بروز خطای سخت، نتایج جزئی دردسترس باشد.
deqp همراه با ابزارهای اجرای آزمایشی خط فرمان ارائه میشود که میتوان از آنها در ترکیب با سرویس اجرا برای دستیابی به یکپارچگی قویتر استفاده کرد. مجری پایان فرایند آزمایش را تشخیص میدهد و اجرای آزمایش را در مورد بعدی دردسترس ازسر میگیرد. یک فایل گزارش از کل جلسه آزمایشی تولید میشود. این راهاندازی برای سیستمهای آزمایشی سبک که امکانات بازیابی خرابی ارائه نمیدهند ایدهآل است.
ابزارهای اجرای آزمایش خط فرمان
مجموعه ابزار خط فرمان فعلی شامل یک ابزار اجرای آزمایشی از راه دور، یک تولیدکننده مقایسه گزارش آزمایشی برای تحلیل رگرسیون، یک تبدیلکننده گزارش آزمایشی به CSV، یک تبدیلکننده گزارش آزمایشی به XML، و یک تبدیلکننده گزارش آزمایشی به JUnit است.
کد منبع این ابزارها در پوشه executor قرار دارد و فایلهای اجرایی در پوشه <builddir>/executor ساخته شدهاند.
مجری آزمایش خط فرمان
اجراکننده آزمایش خط فرمان ابزار C++ قابل حملی برای راهاندازی اجرای آزمایش
در دستگاه و جمعآوری گزارشهای نتیجه از آن ازطریق TCP/IP است. «اجراکننده»
با سرویس اجرا (execserver) در دستگاه هدف ارتباط برقرار میکند.
این دو با هم عملکردهایی مثل بازیابی از خرابیهای فرایند آزمایش را ارائه میدهند.
مثالهای زیر نحوه استفاده از «مجری آزمایش» خط فرمان را نشان میدهد
(برای جزئیات بیشتر، از --help استفاده کنید):
مثال ۱: اجرای آزمایشهای عملکردی 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"
مثال ۲: ادامه اجرای آزمایشی جزئی 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
مثال ۱: صادر کردن گزارش آزمایش در قالب CSV
testlog-to-csv --value=code BatchResult.qpa > Result_statuscodes.csvtestlog-to-csv --value=details BatchResult.qpa > Result_statusdetails.csv
مثال ۲: فهرست کردن تفاوتهای نتایج آزمایش بین دو گزارش آزمایش
testlog-to-csv --mode=diff --format=text Device_v1.qpa Device_v2.qpa
توجه: آرگومان --value=code کد نتیجه آزمایش را، مانند «قبول» یا «رد»، برونبرد میکند. آرگومان --value=details توضیح بیشتر
درباره نتیجه یا مقدار عددی تولیدشده توسط آزمون عملکرد، قابلیت، یا دقت را انتخاب میکند.
صادر کردن XML گزارش آزمایشی
فایلهای گزارش آزمایش را میتوان بااستفاده از ابزار testlog-to-xml
به اسناد XML معتبر تبدیل کرد. از دو حالت برونداد پشتیبانی میشود:
- حالت اسناد جداگانه، که در آن هر مورد آزمون و سند خلاصه
caselist.xmlدر فهرست راهنمای مقصد نوشته میشود - حالت تکفایلی، که در آن همه نتایج موجود در فایل
.qpaدر یک سند XML نوشته میشوند.
فایلهای گزارش آزمایش صادرشده را میتوان بااستفاده از برگه سبک زبان نشانهگذاری توسعهپذیر در مرورگر مشاهده کرد.
نمونه اسناد برگه سبک (testlog.xsl و testlog.css)
در فهرست راهنمای doc/testlog-stylesheet ارائه شده است. برای رندر کردن فایلهای گزارش در مرورگر، دو فایل برگ سبک را در همان دایرکتوری که اسناد XML صادرشده قرار دارند کپی کنید.
اگر از Google Chrome استفاده میکنید، فایلها باید ازطریق HTTP دردسترس قرار گیرند زیرا Chrome
دسترسی به فایل محلی را بهدلایل امنیتی محدود میکند. نصب استاندارد Python شامل یک سرور HTTP پایه است که میتواند برای ارائه دایرکتوری فعلی با فرمان python –m SimpleHTTPServer 8000 راهاندازی شود. پساز راهاندازی سرور،
کافی است مرورگر Chrome را به http://localhost:8000 هدایت کنید تا گزارش آزمایش را مشاهده کنید.
تبدیل به گزارش آزمون JUnit
بسیاری از سیستمهای خودکارسازی آزمایش میتوانند گزارشهای نتیجه اجرای آزمایش را از برونداد JUnit تولید کنند. فایلهای گزارش آزمایش deqp را میتوان بااستفاده از ابزار testlog-to-junit به قالب برونداد 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.*