Pengujian Program Kualitas drawElements (deqp)

AOSP menyertakan rangkaian pengujian GPU drawElements Quality Program (deqp) di https://android.googlesource.com/platform/external/deqp . Halaman ini menjelaskan cara men-deploy deqp test suite ke lingkungan baru.

Untuk bekerja dengan kode terbaru yang dikirimkan, gunakan cabang deqp-dev . Untuk kode yang cocok dengan rilis Android CTS tertentu, gunakan cabang release-code-name -release (misalnya untuk Android 6.0, gunakan cabang marshmallow-release ).

Tata letak sumber

Tata letak kode sumber untuk modul pengujian deqp dan pustaka pendukung ditunjukkan pada tabel di bawah ini (daftarnya tidak lengkap tetapi menyoroti direktori yang paling penting).

Direktori Keterangan
android

Sumber penguji Android dan skrip build

data

File data uji

modules

Sumber modul uji

modules/egl

modul EGL

modules/gles2

modul GLES2

modules/gles3

modul GLES3

modules/gles31

modul GLES3.1

modules/gles32

Modul GLES3.2

targets

File konfigurasi build khusus target

framework

kerangka dan utilitas modul pengujian deqp

framework/delibs

Portabilitas dasar dan bangun perpustakaan

framework/platform

Port platform

framework/qphelper

Pustaka integrasi program uji (C)

framework/common

Kerangka kerja deqp (C++)

framework/opengl, framework/egl

Utilitas khusus API

execserver

Sumber ExecServer sisi perangkat

executor

Alat dan utilitas shell eksekutor pengujian sisi host

external

Bangun direktori rintisan untuk libs eksternal libpng dan zlib

Komponen sumber terbuka

Deqp menggunakan libpng dan zlib , yang dapat diambil menggunakan skrip platform/external/deqp/external/fetch_sources.py atau melalui git dari platform/external/[libpng,zlib] .

Membangun program uji

Kerangka uji telah dirancang dengan mempertimbangkan portabilitas. Satu-satunya persyaratan wajib adalah dukungan penuh C++ dan pustaka sistem standar untuk I/O, utas, dan soket.

CMake sistem build

Sumber deqp memiliki skrip build untuk CMake, yang merupakan alat pilihan untuk mengkompilasi program pengujian.

CMake adalah sistem pembangunan sumber terbuka yang mendukung banyak platform dan rantai alat. CMake menghasilkan makefile asli atau file proyek IDE dari file konfigurasi target-independen. Untuk informasi lebih lanjut tentang CMake, silakan lihat dokumentasi CMake .

CMake mendukung dan merekomendasikan build out-of-source-tree, yaitu, Anda harus selalu membuat makefile atau file proyek dalam direktori build terpisah di luar pohon sumber. CMake tidak memiliki target "distclean", jadi menghapus file apa pun yang dihasilkan oleh CMake harus dilakukan secara manual.

Opsi konfigurasi diberikan ke CMake menggunakan sintaks -D OPTION_NAME = VALUE . Beberapa opsi yang umum digunakan untuk deqp tercantum di bawah ini.

Opsi konfigurasi Keterangan
DEQP_TARGET

Nama target, misalnya: "android"

Skrip CMake deqp akan menyertakan file targets/ DEQP_TARGET / DEQP_TARGET .cmake dan berharap untuk menemukan opsi build spesifik target dari sana.

CMAKE_TOOLCHAIN_FILE

Path ke file toolchain untuk CMake. Digunakan untuk kompilasi silang.

CMAKE_BUILD_TYPE

Tipe build untuk target makefile. Nilai yang valid adalah: "Debug" dan "Rilis"

Perhatikan interpretasi dan tipe default bergantung pada sistem build yang ditargetkan. Lihat dokumentasi CMake untuk detailnya.

Membuat file build target

Sistem build deqp dikonfigurasi untuk target baru menggunakan file build target. File build target menentukan fitur mana yang didukung platform dan pustaka atau jalur penyertaan tambahan apa yang diperlukan. Nama file target mengikuti format targets/ NAME / NAME .cmake dan target dipilih menggunakan parameter build DEQP_TARGET .

Jalur file dalam file target relatif terhadap direktori deqp dasar, bukan direktori targets/ NAME . Variabel standar berikut dapat diatur oleh file build target.

Variabel Keterangan
DEQP_TARGET_NAME

Nama target (akan dimasukkan ke dalam log pengujian)

DEQP_SUPPORT_GLES2

Apakah GLES2 didukung (default: OFF)

DEQP_GLES2_LIBRARIES

Pustaka GLES2 (biarkan kosong jika tidak didukung atau pemuatan dinamis digunakan)

DEQP_SUPPORT_GLES3

Apakah GLES3.x didukung (default: OFF)

DEQP_GLES3_LIBRARIES

Pustaka GLES3.x (biarkan kosong jika tidak didukung atau pemuatan dinamis digunakan)

DEQP_SUPPORT_VG

Apakah OpenVG didukung (default: OFF)

DEQP_OPENVG_LIBRARIES

Pustaka OpenVG (biarkan kosong jika tidak didukung atau pemuatan dinamis digunakan)

DEQP_SUPPORT_EGL

Apakah EGL didukung (default: OFF)

DEQP_EGL_LIBRARIES

Pustaka EGL (biarkan kosong jika tidak didukung atau pemuatan dinamis digunakan)

DEQP_PLATFORM_LIBRARIES

Pustaka khusus platform tambahan diperlukan untuk menautkan

DEQP_PLATFORM_COPY_LIBRARIES

Daftar pustaka yang disalin ke setiap direktori build biner pengujian. Dapat digunakan untuk menyalin pustaka yang diperlukan untuk menjalankan pengujian tetapi tidak berada di jalur pencarian default.

TCUTIL_PLATFORM_SRCS

Daftar sumber port platform. Sumber default ditentukan berdasarkan kemampuan dan OS.

Catatan: Jalur relatif terhadap: framework/platform

File build target dapat menambahkan jalur penyertaan atau tautan tambahan menggunakan fungsi include_directories() dan link_directories() CMake.

Membangun Win32

Cara termudah untuk membangun modul deqp untuk Windows adalah dengan menggunakan sistem build CMake. Anda memerlukan CMake 2.6.12 atau yang lebih baru dan kompiler Microsoft Visual C/C++. Deqp telah diuji dengan Visual Studio 2013.

File proyek Visual Studio dapat dibuat dengan perintah berikut:

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

Build 64-bit dapat dibuat dengan memilih "Visual Studio VERSION Win64" sebagai generator build:

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

Anda juga dapat membuat NMake makefiles dengan opsi -G "NMake Makefiles" serta tipe build ( -DCMAKE_BUILD_TYPE="Debug" atau "Release" ).

Membuat pembuatan konteks

Konteks rendering dapat dibuat dengan WGL atau dengan EGL di Windows.

dukungan WGL

Semua binari Win32 mendukung pembuatan konteks GL dengan WGL karena hanya memerlukan pustaka standar. Konteks WGL dapat dipilih menggunakan argumen baris perintah --deqp-gl-context-type=wgl . Dalam mode WGL, deqp menggunakan ekstensi WGL_EXT_create_context_es_profile untuk membuat konteks OpenGL ES. Ini telah diuji untuk bekerja dengan driver terbaru dari NVIDIA dan Intel. Driver AMD tidak mendukung ekstensi yang diperlukan.

dukungan EGL

deqp dibangun dengan pemuatan dinamis untuk EGL di Windows jika DEQP_SUPPORT_EGL AKTIF. Ini adalah default di sebagian besar target. Kemudian, jika host memiliki library EGL yang tersedia, Anda dapat menjalankan pengujian dengannya dengan parameter baris perintah: --deqp-gl-context-type=egl

Android membangun

Build Android menggunakan skrip build CMake untuk membuat kode pengujian asli. Bagian Java, yaitu Test Execution Server dan Test Application Stub, dikompilasi menggunakan alat build Android standar.

Untuk mengompilasi program pengujian deqp untuk Android dengan skrip build yang disediakan, Anda memerlukan:

  • Versi terbaru Android NDK ; file android/scripts/common.py mencantumkan versi yang diperlukan
  • SDK Android yang berdiri sendiri dengan API 13, SDK Tools, SDK Platform-tools, dan paket SDK Build-tools diinstal
  • Apache Ant 1.9.4 (diperlukan oleh kode Java build)
  • CMake 2.8.12 atau lebih baru
  • Python 2.6 atau yang lebih baru dalam seri 2.x; Python 3.x tidak didukung
  • Untuk Windows: Baik NMake atau JOM di PATH
    • JOM memungkinkan pembuatan yang lebih cepat
  • Opsional: Ninja make juga didukung di Linux

Binari Ant dan SDK terletak berdasarkan variabel lingkungan PATH dengan default utama tertentu. Logikanya dikendalikan oleh android/scripts/common.py .

Direktori NDK harus berupa ~/android-ndk- VERSION atau C:/android/android-ndk- VERSION atau ditentukan melalui variabel lingkungan ANDROID_NDK_PATH .

Komponen pada perangkat Deqp, layanan eksekusi pengujian, dan program pengujian dibuat dengan menjalankan android/scripts/build.py . .apk terakhir dibuat di android/package/bin dan dapat diinstal dengan skrip install.py . Jika eksekutor baris perintah digunakan, ExecService diluncurkan dengan skrip launch.py ​​pada perangkat melalui ADB. Script dapat dieksekusi dari direktori manapun.

membangun Linux

Biner uji dan utilitas baris perintah dapat dibuat untuk Linux dengan membuat makefile menggunakan CMake. Ada beberapa target build yang telah ditentukan sebelumnya yang berguna saat membangun untuk Linux.

Membangun target Keterangan
default

Target default yang menggunakan introspeksi platform CMake untuk menentukan dukungan untuk berbagai API.

x11_glx

Menggunakan GLX untuk membuat konteks OpenGL (ES).

x11_egl

Menggunakan EGL untuk membuat konteks OpenGL (ES).

x11_egl_glx

Mendukung GLX dan EGL dengan X11.

Selalu gunakan -DCMAKE_BUILD_TYPE=<Debug|Release> untuk menentukan tipe build. Release adalah default yang bagus. Tanpanya, build rilis default yang tidak dioptimalkan akan dibuat.

Argumen baris perintah -DCMAKE_C_FLAGS dan -DCMAKE_CXX_FLAGS dapat digunakan untuk meneruskan argumen tambahan ke kompiler. Misalnya build 32-bit atau 64-bit dapat dilakukan dengan mengatur -DCMAKE_C(XX)_FLAGS="-m32" atau "-m64" masing-masing. Jika tidak ditentukan, arsitektur asli toolchain, biasanya 64-bit pada toolchain 64-bit, digunakan.

-DCMAKE_LIBRARY_PATH dan -DCMAKE_INCLUDE_PATH dapat digunakan untuk CMake untuk memberikan pustaka tambahan kepada CMake atau menyertakan jalur pencarian.

Contoh baris perintah lengkap yang digunakan untuk melakukan build debug 32-bit terhadap header driver dan library di lokasi kustom adalah sebagai berikut:

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

Kompilasi silang

Kompilasi silang dapat dilakukan dengan menggunakan file rantai alat CMake. File rantai alat menentukan kompiler yang akan digunakan, bersama dengan jalur pencarian khusus untuk pustaka dan header. Beberapa file rantai alat untuk skenario umum disertakan dalam paket rilis di direktori framework/delibs/cmake .

Selain variabel CMake standar, variabel khusus deqp berikut dapat disetel oleh file rantai alat. CMake biasanya dapat mendeteksi DE_OS , DE_COMPILER dan DE_PTR_SIZE dengan benar tetapi DE_CPU harus disetel oleh file rantai alat.

Variabel Keterangan
DE_OS

Sistem operasi. Nilai yang didukung adalah: DE_OS_WIN32, DE_OS_UNIX, DE_OS_WINCE, DE_OS_OSX, DE_OS_ANDROID, DE_OS_SYMBIAN, DE_OS_IOS

DE_COMPILER

Jenis kompiler. Nilai yang didukung adalah: DE_COMPILER_GCC, DE_COMPILER_MSC, DE_COMPILER_CLANG

DE_CPU

jenis CPU. Nilai yang didukung adalah: DE_CPU_ARM, DE_CPU_X86 .

DE_PTR_SIZE

sizeof(void*) pada platform. Nilai yang didukung adalah: 4 dan 8

File rantai alat dapat dipilih menggunakan parameter pembuatan CMAKE_TOOLCHAIN_FILE . Misalnya, berikut ini akan membuat makefile untuk build menggunakan kompiler silang CodeSourcery untuk 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

Penautan run-time dari perpustakaan GLES dan EGL

Deqp tidak memerlukan titik masuk API yang sedang diuji selama penautan. Kode pengujian selalu mengakses API melalui pointer fungsi. Titik masuk kemudian dapat dimuat secara dinamis pada waktu berjalan atau port platform dapat menyediakannya pada waktu tautan.

Jika dukungan untuk API diaktifkan di pengaturan build dan pustaka tautan tidak disediakan, deqp akan memuat titik masuk yang diperlukan pada waktu proses. Jika penautan statis diinginkan, sediakan pustaka tautan yang diperlukan dalam variabel konfigurasi pembangunan DEQP_<API>_LIBRARIES .

Memindahkan kerangka pengujian

Porting deqp melibatkan tiga langkah: mengadaptasi pustaka portabilitas dasar, mengimplementasikan antarmuka integrasi platform kerangka uji, dan mem-porting layanan eksekusi.

Tabel di bawah ini mencantumkan lokasi untuk kemungkinan perubahan porting. Apa pun di luar mereka cenderung eksotis.

Lokasi Keterangan
framework/delibs/debase
framework/delibs/dethread
framework/delibs/deutil

Setiap implementasi yang diperlukan dari kode khusus OS.

framework/qphelper/qpCrashHandler.c

Opsional: Implementasi untuk OS Anda.

framework/qphelper/qpWatchDog.c

Implementasi untuk OS Anda. Yang saat ini didasarkan pada dethread dan pustaka C standar.

framework/platform

Port platform baru dan rintisan aplikasi dapat diimplementasikan seperti yang dijelaskan dalam Port platform kerangka kerja uji .

Pustaka portabilitas dasar

Pustaka portabilitas dasar sudah mendukung Windows, sebagian besar varian Linux, Mac OS, iOS, dan Android. Jika target pengujian berjalan di salah satu sistem operasi tersebut, kemungkinan besar tidak perlu menyentuh pustaka portabilitas dasar sama sekali.

Uji port platform kerangka kerja

Port platform kerangka kerja pengujian deqp memerlukan dua komponen: Titik masuk aplikasi dan implementasi antarmuka platform.

Titik masuk aplikasi bertanggung jawab untuk membuat objek platform, membuat objek baris perintah ( tcu::CommandLine ), membuka log pengujian ( tcu::TestLog ), dan mengulangi aplikasi pengujian ( tcu::App ). Jika OS target mendukung titik masuk main() standar, tcuMain.cpp dapat digunakan sebagai implementasi titik masuk.

API platform deqp dijelaskan secara rinci dalam file berikut.

Mengajukan Keterangan
framework/common/tcuPlatform.hpp

Kelas dasar untuk semua port platform

framework/opengl/gluPlatform.hpp

Antarmuka platform OpenGL

framework/egl/egluPlatform.hpp

Antarmuka platform EGL

framework/platform/tcuMain.cpp

Titik masuk aplikasi standar

Kelas dasar untuk semua port platform adalah tcu::Platform . Port platform secara opsional dapat mendukung antarmuka khusus GL dan EGL. Lihat tabel berikut untuk ikhtisar tentang apa yang perlu diterapkan untuk menjalankan pengujian.

Modul Antarmuka

Modul uji OpenGL (ES)

Antarmuka platform GL

Modul uji EGL

Antarmuka platform EGL

Instruksi terperinci untuk mengimplementasikan port platform ada di header lapisan porting.

Layanan eksekusi tes

Untuk menggunakan infrastruktur eksekusi pengujian deqp atau eksekutor baris perintah, layanan eksekusi pengujian harus tersedia pada target. Implementasi layanan C++ portabel disediakan di direktori execserver . Biner yang berdiri sendiri dibuat sebagai bagian dari modul uji deqp yang dibuat untuk target PC. Anda dapat memodifikasi execserver/CMakeLists.txt untuk mengaktifkan build pada target lain.

Versi C++ dari layanan eksekusi pengujian menerima dua parameter baris perintah:

  • --port=<port> akan mengatur port TCP yang didengarkan server. Standarnya adalah 50016.
  • --single akan menghentikan proses server ketika klien terputus. Secara default, proses server akan tetap aktif untuk melayani permintaan eksekusi pengujian lebih lanjut.

Menjalankan tes

Halaman ini memberikan instruksi untuk menjalankan pengujian deqp di lingkungan Linux dan Windows, menggunakan argumen baris perintah, dan bekerja dengan paket aplikasi Android.

Lingkungan Linux dan Windows

Mulailah dengan menyalin file dan direktori berikut ke target.

Modul Direktori Target
Server Eksekusi build/execserver/execserver <dst>/execserver
Modul EGL build/modules/egl/deqp-egl <dst>/deqp-egl
Modul GLES2 build/modules/gles2/deqp-gles2 <dst>/deqp-gles2
data/gles2 <dst>/gles2
Modul GLES3 build/modules/gles3/deqp-gles3 <dst>/deqp-gles3
data/gles3 <dst>/gles3
Modul GLES3.1 build/modules/gles31/deqp-gles31 <dst>/deqp-gles31
data/gles31 <dst>/gles31
Modul GLES3.2 build/modules/gles32/deqp-gles32 <dst>/deqp-gles32
data/gles32 <dst>/gles32

Anda dapat menerapkan layanan eksekusi dan menguji binari di mana saja di sistem file target; namun, binari uji berharap menemukan direktori data di direktori kerja saat ini. Saat siap, mulai Layanan Eksekusi Uji pada perangkat target. Untuk detail tentang memulai layanan, lihat Layanan eksekusi pengujian .

Argumen baris perintah

Tabel berikut mencantumkan argumen baris perintah yang memengaruhi eksekusi semua program pengujian.

Argumen Keterangan
--deqp-case=<casename> Jalankan kasus yang cocok dengan pola yang diberikan. Wildcard (*) didukung.
--deqp-log-filename=<filename> Tulis hasil tes ke file yang namanya Anda berikan. Layanan eksekusi pengujian akan menetapkan nama file saat memulai pengujian.
--deqp-stdin-caselist
--deqp-caselist=<caselist>
--deqp-caselist-file=<filename>
Baca daftar kasus dari stdin atau dari argumen yang diberikan. Layanan eksekusi tes akan mengatur argumen sesuai dengan permintaan eksekusi yang diterima. Lihat bagian berikutnya untuk deskripsi format daftar kasus.
--deqp-test-iteration-count=<count> Ganti jumlah iterasi untuk pengujian yang mendukung sejumlah variabel iterasi.
--deqp-base-seed=<seed> Benih dasar untuk kasus uji yang menggunakan pengacakan.

Argumen khusus GLES2 dan GLES3

Tabel berikut mencantumkan argumen khusus GLES2 dan GLES3.
Argumen Keterangan
--deqp-gl-context-type=<type> Jenis konteks OpenGL. Jenis konteks yang tersedia bergantung pada platform. Pada platform yang mendukung EGL, nilai egl dapat digunakan untuk memilih konteks EGL.
--deqp-gl-config-id=<id> Jalankan pengujian untuk ID konfigurasi GL yang disediakan. Interpretasi bergantung pada platform. Pada platform EGL, ini adalah ID konfigurasi EGL.
--deqp-gl-config-name=<name> Jalankan pengujian untuk konfigurasi GL bernama. Interpretasi bergantung pada platform. Untuk EGL, formatnya adalah rgb(a)<bits>d<bits>s<bits> . Misalnya, nilai rgb888s8 akan memilih konfigurasi pertama di mana buffer warna adalah RGB888 dan buffer stensil memiliki 8 bit.
--deqp-gl-context-flags=<flags> Menciptakan konteks. Tentukan robust atau debug .
--deqp-surface-width=<width>
--deqp-surface-height=<height>
Cobalah untuk membuat permukaan dengan ukuran tertentu. Dukungan untuk ini adalah opsional.
--deqp-surface-type=<type> Gunakan jenis permukaan tertentu sebagai target rendering pengujian utama. Jenis yang mungkin adalah window , pixmap , pbuffer , dan fbo .
--deqp-screen-rotation=<rotation> Orientasi layar dengan peningkatan 90 derajat untuk platform yang mendukungnya.

Format daftar kasus uji

Daftar kasus uji dapat diberikan dalam dua format. Opsi pertama adalah mencantumkan nama lengkap setiap tes pada baris terpisah dalam file ASCII standar. Saat set tes tumbuh, awalan yang berulang dapat menjadi rumit. Untuk menghindari pengulangan awalan, gunakan sintaks trie (juga dikenal sebagai pohon awalan) yang ditunjukkan di bawah ini.

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

Sebagai contoh:

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

Diterjemahkan ke dalam dua kasus uji berikut:

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

Android

Paket aplikasi Android berisi semua komponen yang diperlukan, termasuk layanan eksekusi pengujian, biner pengujian, dan file data. Aktivitas pengujian adalah NativeActivity yang menggunakan EGL (memerlukan Android 3.2 atau lebih tinggi).

Paket aplikasi dapat diinstal dengan perintah berikut (nama yang ditampilkan adalah nama APK dalam paket Android CTS; yang namanya tergantung pada build):

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

Untuk meluncurkan layanan eksekusi pengujian dan untuk menyiapkan penerusan porta, gunakan yang berikut ini:

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

Cetakan debug dapat diaktifkan dengan menjalankan yang berikut ini sebelum memulai pengujian:

adb –d shell setprop log.tag.dEQP DEBUG

Menjalankan pengujian di Android tanpa Android CTS

Untuk memulai aktivitas eksekusi pengujian secara manual, buat maksud Android yang menargetkan android.app.NativeActivity . Aktivitas dapat ditemukan di paket com.drawelements.deqp . Baris perintah harus diberikan sebagai string tambahan dengan kunci "cmdLine" di Intent.

Log pengujian ditulis ke /sdcard/dEQP-log.qpa . Jika uji coba tidak dimulai secara normal, informasi debug tambahan tersedia di log perangkat.

Anda dapat meluncurkan aktivitas dari baris perintah menggunakan utilitas am . Misalnya, untuk menjalankan pengujian dEQP-GLES2.info pada platform yang mendukung NativeActivity, gunakan perintah berikut.

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"'

Men-debug di Android

Untuk menjalankan pengujian di bawah debugger GDB di Android, pertama-tama kompilasi dan instal build debug dengan menjalankan dua skrip berikut:

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

Setelah build debug diinstal pada perangkat, untuk meluncurkan pengujian di bawah GDB yang berjalan di host, jalankan perintah berikut:

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

Baris perintah deqp tergantung pada kasus uji yang akan dieksekusi dan parameter lain yang diperlukan. Script menambahkan breakpoint default di awal eksekusi deqp ( tcu tcu::App::App ).

Skrip debug.py menerima beberapa argumen baris perintah untuk tindakan seperti menyetel breakpoint untuk debugging, parameter koneksi gdbserver, dan jalur ke biner tambahan untuk debug (gunakan debug.py --help untuk semua argumen dan penjelasan). Script juga menyalin beberapa pustaka default dari perangkat target untuk mendapatkan daftar simbol.

Untuk menelusuri kode driver (seperti saat GDB perlu mengetahui lokasi biner dengan informasi debug lengkap), tambahkan lebih banyak pustaka melalui parameter baris perintah debug.py . Skrip ini menulis file konfigurasi untuk GDB mulai dari baris 132 file skrip. Anda dapat memberikan jalur tambahan ke binari, dll., tetapi menyediakan parameter baris perintah yang benar sudah cukup.

Catatan: Di Windows, biner GDB memerlukan libpython2.7.dll . Sebelum meluncurkan debug.py , tambahkan <path-to-ndk>/prebuilt/windows/bin ke variabel PATH.

Catatan: Debug kode asli tidak berfungsi pada stok Android 4.3; untuk solusi, lihat bug publik ini . Android 4.4 dan lebih tinggi tidak mengandung bug ini.

Mengotomatiskan tes

Modul pengujian Deqp dapat diintegrasikan ke sistem pengujian otomatis dalam berbagai cara. Pendekatan terbaik tergantung pada infrastruktur pengujian yang ada dan lingkungan target.

Keluaran utama dari pengujian selalu berupa file log pengujian, yaitu file dengan postfix .qpa . Hasil tes lengkap dapat diuraikan dari log tes. Keluaran konsol hanya merupakan informasi debug dan mungkin tidak tersedia di semua platform.

Biner pengujian dapat dipanggil langsung dari sistem otomatisasi pengujian. Biner pengujian dapat diluncurkan untuk kasus tertentu, untuk set pengujian, atau untuk semua pengujian yang tersedia. Jika kesalahan fatal terjadi selama eksekusi (seperti kesalahan API tertentu atau crash), eksekusi pengujian akan dibatalkan. Untuk pengujian regresi, pendekatan terbaik adalah menggunakan binari pengujian untuk kasus individual atau set pengujian kecil secara terpisah, agar hasil parsial tersedia bahkan jika terjadi kegagalan besar.

Deqp dilengkapi dengan alat eksekusi uji baris perintah yang dapat digunakan dalam kombinasi dengan layanan eksekusi untuk mencapai integrasi yang lebih kuat. Eksekutor mendeteksi penghentian proses pengujian dan akan melanjutkan eksekusi pengujian pada kasus berikutnya yang tersedia. File log tunggal dihasilkan dari sesi pengujian penuh. Pengaturan ini sangat ideal untuk sistem pengujian ringan yang tidak menyediakan fasilitas pemulihan kerusakan.

Alat eksekusi tes baris perintah

Kumpulan alat baris perintah saat ini mencakup alat eksekusi pengujian jarak jauh, generator perbandingan log pengujian untuk analisis regresi, konverter uji-log-ke-CSV, konverter uji-log-ke-XML, dan konverter testlog-ke-JUnit .

Kode sumber untuk alat-alat ini ada di direktori executor , dan binari dibangun ke dalam <builddir>/executor .

Pelaksana Tes baris perintah

Baris perintah Test Executor adalah alat C++ portabel untuk meluncurkan uji coba pada perangkat dan mengumpulkan log yang dihasilkan darinya melalui TCP/IP. Pelaksana berkomunikasi dengan layanan eksekusi (execserver) pada perangkat target. Bersama-sama mereka menyediakan fungsionalitas seperti pemulihan dari crash proses pengujian. Contoh berikut menunjukkan cara menggunakan Pelaksana Tes baris perintah (gunakan --help untuk detail selengkapnya):

Contoh 1: Jalankan pengujian fungsional GLES2 di perangkat 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"
Contoh 2: Lanjutkan uji coba OpenGL ES 2 parsial secara lokal:
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

Uji log CSV ekspor dan bandingkan

Deqp memiliki alat untuk mengonversi log pengujian (file qpa ) menjadi file CSV. Keluaran CSV berisi daftar kasus uji dan hasilnya. Alat ini juga dapat membandingkan dua atau lebih hasil batch dan hanya mencantumkan kasus uji yang memiliki kode status berbeda dalam hasil batch input. Perbandingan juga akan mencetak jumlah kasus yang cocok.

Output dalam format CSV sangat praktis untuk diproses lebih lanjut dengan utilitas baris perintah standar atau dengan editor spreadsheet. Format teks biasa tambahan yang dapat dibaca manusia dapat dipilih menggunakan argumen baris perintah berikut: --format=text

Contoh 1: Ekspor log uji dalam format CSV
testlog-to-csv --value=code BatchResult.qpa > Result_statuscodes.csv
testlog-to-csv --value=details BatchResult.qpa > Result_statusdetails.csv
Contoh 2: Buat daftar perbedaan hasil pengujian antara dua log pengujian
testlog-to-csv --mode=diff --format=text Device_v1.qpa Device_v2.qpa

Catatan: Argumen --value=code mengeluarkan kode hasil tes, seperti "Lulus" atau "Gagal". Argumen --value=details memilih penjelasan lebih lanjut dari hasil atau nilai numerik yang dihasilkan oleh kinerja, kemampuan, atau uji akurasi.

Ekspor log XML uji

File log pengujian dapat dikonversi ke dokumen XML yang valid menggunakan testlog-to-xml . Dua mode keluaran didukung:

  • Mode dokumen terpisah, di mana setiap kasus uji dan dokumen ringkasan caselist.xml ditulis ke direktori tujuan
  • Mode file tunggal, di mana semua hasil dalam file .qpa ditulis ke dokumen XML tunggal.

File log pengujian yang diekspor dapat dilihat di browser menggunakan lembar gaya XML. Contoh dokumen style sheet ( testlog.xsl dan testlog.css ) disediakan di direktori doc/testlog-stylesheet . Untuk merender file log di browser, salin dua file style sheet ke direktori yang sama tempat dokumen XML yang diekspor berada.

Jika Anda menggunakan Google Chrome, file harus diakses melalui HTTP karena Chrome membatasi akses file lokal untuk alasan keamanan. Instalasi Python standar mencakup server HTTP dasar yang dapat diluncurkan untuk melayani direktori saat ini dengan perintah python –m SimpleHTTPServer 8000 . Setelah meluncurkan server, cukup arahkan browser Chrome ke http://localhost:8000 untuk melihat log pengujian.

Konversi ke log pengujian JUnit

Banyak sistem otomasi pengujian dapat menghasilkan laporan hasil uji coba dari keluaran JUnit. File log pengujian deqp dapat dikonversi ke format output JUnit menggunakan alat testlog-ke-junit.

Alat saat ini mendukung penerjemahan putusan kasus uji saja. Karena JUnit hanya mendukung hasil "lulus" dan "gagal", hasil kelulusan deqp dipetakan ke "lulus JUnit" dan hasil lainnya dianggap gagal. Kode hasil deqp asli tersedia di keluaran JUnit. Data lain, seperti pesan log dan gambar hasil, tidak disimpan dalam konversi.

Menggunakan kelompok tes khusus

Beberapa grup uji mungkin memerlukan atau mendukung opsi baris perintah khusus, atau memerlukan perawatan khusus saat digunakan pada sistem tertentu.

Tes stres alokasi memori

Tes stres alokasi memori melatih kondisi kehabisan memori dengan berulang kali mengalokasikan sumber daya tertentu hingga driver melaporkan kesalahan kehabisan memori.

Pada platform tertentu, seperti Android dan sebagian besar varian Linux, hal berikut dapat terjadi: Sistem operasi dapat menghentikan proses pengujian alih-alih mengizinkan driver untuk menangani atau memberikan kesalahan kehabisan memori. Pada platform tersebut, pengujian yang dirancang untuk menyebabkan kesalahan kehabisan memori dinonaktifkan secara default, dan harus diaktifkan menggunakan argumen baris perintah --deqp-test-oom=enable . Disarankan agar Anda menjalankan tes tersebut secara manual untuk memeriksa apakah sistem berperilaku dengan benar di bawah tekanan sumber daya. Namun, dalam situasi seperti itu, crash proses pengujian harus ditafsirkan sebagai lulus.

Kelompok uji

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

Tes stres rendering yang berjalan lama

Tes stres rendering dirancang untuk mengungkapkan masalah ketahanan di bawah beban rendering berkelanjutan. Secara default, pengujian hanya akan mengeksekusi beberapa iterasi, tetapi dapat dikonfigurasi untuk berjalan tanpa batas dengan menyediakan argumen baris perintah --deqp-test-iteration-count=-1 . Pengawas tes harus dinonaktifkan ( --deqp-watchdog=disable ) saat menjalankan tes ini untuk jangka waktu yang lama.

Kelompok uji

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