Pruebas del programa de calidad drawElements

AOSP incluye el conjunto de pruebas de GPU drawElements Quality Program (deqp) en https://android.googlesource.com/platform/external/deqp . Esta página detalla cómo implementar el conjunto de pruebas deqp en un nuevo entorno.

Para trabajar con el último código enviado, utilice la rama deqp-dev . Para el código que coincida con una versión específica de Android CTS, utilice la rama release-code-name -release (por ejemplo, para Android 6.0, utilice la rama marshmallow-release ).

Diseño de fuente

El diseño del código fuente para los módulos de prueba deqp y las bibliotecas de soporte se muestra en la siguiente tabla (la lista no es completa pero destaca los directorios más importantes).

Directorio Descripción
android

Fuentes de prueba de Android y scripts de compilación

data

Archivos de datos de prueba

modules

Fuentes del módulo de prueba

modules/egl

módulo EGL

modules/gles2

módulo GLES2

modules/gles3

módulo GLES3

modules/gles31

Módulo GLES3.1

modules/gles32

Módulo GLES3.2

targets

Archivos de configuración de compilación específicos del objetivo

framework

Marco y utilidades del módulo de prueba deqp.

framework/delibs

Portabilidad básica y bibliotecas de compilación.

framework/platform

Puertos de plataforma

framework/qphelper

Biblioteca de integración del programa de prueba (C)

framework/common

Marco deqp (C++)

framework/opengl, framework/egl

Utilidades específicas de API

execserver

Fuente ExecServer del lado del dispositivo

executor

Utilidades y herramientas de shell del ejecutor de pruebas del lado del host

external

Cree un directorio auxiliar para bibliotecas externas libpng y zlib

Componentes de código abierto

El deqp usa libpng y zlib , que se pueden obtener usando el script platform/external/deqp/external/fetch_sources.py o mediante git desde platform/external/[libpng,zlib] .

Crear programas de prueba

El marco de prueba se ha diseñado teniendo en cuenta la portabilidad. Los únicos requisitos obligatorios son soporte completo de C++ y bibliotecas de sistema estándar para E/S, subprocesos y sockets.

Sistema de compilación CMake

Las fuentes deqp tienen scripts de compilación para CMake, que es la herramienta preferida para compilar los programas de prueba.

CMake es un sistema de compilación de código abierto que admite múltiples plataformas y cadenas de herramientas. CMake genera archivos MAKE nativos o archivos de proyecto IDE a partir de archivos de configuración independientes del destino. Para obtener más información sobre CMake, consulte la documentación de CMake .

CMake admite y recomienda compilaciones fuera del árbol fuente, es decir, siempre debe crear archivos MAKE o archivos de proyecto en un directorio de compilación separado fuera del árbol fuente. CMake no tiene ningún tipo de objetivo "distclean", por lo que la eliminación de cualquier archivo generado por CMake debe realizarse manualmente.

Las opciones de configuración se brindan a CMake usando la sintaxis -D OPTION_NAME = VALUE . Algunas opciones comúnmente utilizadas para deqp se enumeran a continuación.

Opción de configuración Descripción
DEQP_TARGET

Nombre del destino, por ejemplo: "android"

Los scripts deqp CMake incluirán el archivo targets/ DEQP_TARGET / DEQP_TARGET .cmake y esperarán encontrar opciones de compilación específicas del objetivo desde allí.

CMAKE_TOOLCHAIN_FILE

Ruta al archivo de cadena de herramientas para CMake. Se utiliza para compilación cruzada.

CMAKE_BUILD_TYPE

Tipo de compilación para objetivos de archivos MAKE. Los valores válidos son: "Depurar" y "Liberar"

Tenga en cuenta que la interpretación y el tipo predeterminado dependen del sistema de compilación de destino. Consulte la documentación de CMake para obtener más detalles.

Crear un archivo de compilación de destino

El sistema de compilación deqp está configurado para nuevos objetivos utilizando archivos de compilación de destino. Un archivo de compilación de destino define qué funciones admite la plataforma y qué bibliotecas o rutas de inclusión adicionales se requieren. Los nombres de los archivos de destino siguen el formato targets/ NAME / NAME .cmake y el destino se selecciona utilizando el parámetro de compilación DEQP_TARGET .

Las rutas de los archivos de destino son relativas al directorio base deqp , no al directorio targets/ NAME . Las siguientes variables estándar se pueden configurar mediante el archivo de compilación de destino.

Variable Descripción
DEQP_TARGET_NAME

Nombre del objetivo (se incluirá en los registros de prueba)

DEQP_SUPPORT_GLES2

Si se admite GLES2 (predeterminado: APAGADO)

DEQP_GLES2_LIBRARIES

Bibliotecas GLES2 (déjelas vacías si no son compatibles o si se utiliza carga dinámica)

DEQP_SUPPORT_GLES3

Si se admite GLES3.x (predeterminado: APAGADO)

DEQP_GLES3_LIBRARIES

Bibliotecas GLES3.x (déjelas vacías si no son compatibles o si se utiliza carga dinámica)

DEQP_SUPPORT_VG

Si OpenVG es compatible (predeterminado: APAGADO)

DEQP_OPENVG_LIBRARIES

Bibliotecas OpenVG (déjelas vacías si no son compatibles o si se utiliza carga dinámica)

DEQP_SUPPORT_EGL

Si se admite EGL (predeterminado: APAGADO)

DEQP_EGL_LIBRARIES

Bibliotecas EGL (déjelas vacías si no son compatibles o si se utiliza carga dinámica)

DEQP_PLATFORM_LIBRARIES

Se requieren bibliotecas adicionales específicas de la plataforma para vincular

DEQP_PLATFORM_COPY_LIBRARIES

Lista de bibliotecas que se copian en cada directorio de compilación binaria de prueba. Se puede utilizar para copiar bibliotecas necesarias para ejecutar pruebas pero que no se encuentran en la ruta de búsqueda predeterminada.

TCUTIL_PLATFORM_SRCS

Lista de fuentes de puertos de plataforma. Las fuentes predeterminadas se determinan en función de las capacidades y el sistema operativo.

Nota: Las rutas son relativas a: framework/platform

El archivo de compilación de destino puede agregar rutas de inclusión o vínculo adicionales utilizando las funciones CMake include_directories() y link_directories() .

compilación win32

La forma más sencilla de crear módulos deqp para Windows es utilizar el sistema de compilación CMake. Necesitará CMake 2.6.12 o posterior y el compilador Microsoft Visual C/C++. El deqp ha sido probado con Visual Studio 2013.

Los archivos de proyecto de Visual Studio se pueden generar con el siguiente comando:

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

Se puede realizar una compilación de 64 bits seleccionando "Visual Studio VERSION Win64" como generador de compilación:

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

También puede generar archivos MAKE NMake con la opción -G "NMake Makefiles" , así como el tipo de compilación ( -DCMAKE_BUILD_TYPE="Debug" o "Release" ).

Creación de contexto de renderizado

El contexto de renderizado se puede crear con WGL o con EGL en Windows.

soporte WGL

Todos los archivos binarios de Win32 admiten la creación de contexto GL con WGL, ya que solo requiere bibliotecas estándar. El contexto WGL se puede seleccionar usando el argumento de línea de comando --deqp-gl-context-type=wgl . En el modo WGL, el deqp utiliza la extensión WGL_EXT_create_context_es_profile para crear contextos OpenGL ES. Se ha probado que funciona con los controladores más recientes de NVIDIA e Intel. Los controladores AMD no admiten la extensión requerida.

Soporte EGL

El deqp está creado con carga dinámica para EGL en Windows si DEQP_SUPPORT_EGL está activado. Este es el valor predeterminado en la mayoría de los destinos. Luego, si el host tiene bibliotecas EGL disponibles, es posible ejecutar pruebas con ellas con el parámetro de línea de comando: --deqp-gl-context-type=egl

compilación de Android

La compilación de Android utiliza scripts de compilación de CMake para crear el código de prueba nativo. Las partes de Java, es decir, Test Execution Server y Test Application Stub, se compilan utilizando las herramientas de compilación estándar de Android.

Para compilar programas de prueba deqp para Android con los scripts de compilación proporcionados, necesitará:

  • La última versión del NDK de Android ; el archivo android/scripts/common.py enumera la versión requerida
  • SDK independiente de Android con paquetes API 13, SDK Tools, SDK Platform-tools y SDK Build-tools instalados
  • Apache Ant 1.9.4 (requerido por la compilación del código Java)
  • CMake 2.8.12 o más reciente
  • Python 2.6 o posterior en la serie 2.x; Python 3.x no es compatible
  • Para Windows: NMake o JOM en PATH
    • JOM permite compilaciones más rápidas
  • Opcional: Ninja make también es compatible con Linux

Los archivos binarios de Ant y SDK se ubican según la variable de entorno PATH con ciertos valores predeterminados primordiales. La lógica está controlada por android/scripts/common.py .

El directorio NDK debe ser ~/android-ndk- VERSION o C:/android/android-ndk- VERSION o estar definido mediante la variable de entorno ANDROID_NDK_PATH .

Los componentes de Deqp en el dispositivo, el servicio de ejecución de pruebas y los programas de prueba se crean ejecutando el script android/scripts/build.py . El .apk final se crea en android/package/bin y se puede instalar mediante el script install.py . Si se utiliza el ejecutor de línea de comando , ExecService se inicia con el script launch.py ​​en el dispositivo a través de ADB. Los scripts se pueden ejecutar desde cualquier directorio.

compilación de Linux

Se pueden crear archivos binarios de prueba y utilidades de línea de comandos para Linux generando archivos MAKE usando CMake. Existen varios objetivos de compilación predefinidos que son útiles al compilar para Linux.

Objetivo de construcción Descripción
default

Destino predeterminado que utiliza la introspección de la plataforma CMake para determinar la compatibilidad con varias API.

x11_glx

Utiliza GLX para crear contextos OpenGL (ES).

x11_egl

Utiliza EGL para crear contextos OpenGL (ES).

x11_egl_glx

Admite GLX y EGL con X11.

Utilice siempre -DCMAKE_BUILD_TYPE=<Debug|Release> para definir el tipo de compilación. Release es un buen valor predeterminado. Sin él, se crea una versión de lanzamiento predeterminada y no optimizada.

Los argumentos de línea de comando -DCMAKE_C_FLAGS y -DCMAKE_CXX_FLAGS se pueden usar para pasar argumentos adicionales al compilador. Por ejemplo, la compilación de 32 o 64 bits se puede realizar configurando -DCMAKE_C(XX)_FLAGS="-m32" o "-m64" respectivamente. Si no se especifica, se utiliza la arquitectura nativa de la cadena de herramientas, normalmente de 64 bits en la cadena de herramientas de 64 bits.

Los argumentos -DCMAKE_LIBRARY_PATH y -DCMAKE_INCLUDE_PATH se pueden usar para que CMake proporcione una biblioteca adicional a CMake o incluya rutas de búsqueda.

Un ejemplo de una línea de comando completa utilizada para realizar una compilación de depuración de 32 bits en bibliotecas y encabezados de controladores en una ubicación personalizada es el siguiente:

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

Compilación cruzada

La compilación cruzada se puede lograr utilizando un archivo de cadena de herramientas CMake. El archivo de cadena de herramientas especifica el compilador que se utilizará, junto con rutas de búsqueda personalizadas para bibliotecas y encabezados. Se incluyen varios archivos de cadena de herramientas para escenarios comunes en el paquete de lanzamiento en el directorio framework/delibs/cmake .

Además de las variables estándar de CMake, el archivo de cadena de herramientas puede configurar las siguientes variables específicas de deqp. CMake generalmente puede detectar DE_OS , DE_COMPILER y DE_PTR_SIZE correctamente, pero DE_CPU debe configurarse mediante el archivo de cadena de herramientas.

Variable Descripción
DE_OS

Sistema operativo. Los valores admitidos son: DE_OS_WIN32, DE_OS_UNIX, DE_OS_WINCE, DE_OS_OSX, DE_OS_ANDROID, DE_OS_SYMBIAN, DE_OS_IOS

DE_COMPILER

Tipo de compilador. Los valores admitidos son: DE_COMPILER_GCC, DE_COMPILER_MSC, DE_COMPILER_CLANG

DE_CPU

Tipo de CPU. Los valores admitidos son: DE_CPU_ARM, DE_CPU_X86 .

DE_PTR_SIZE

sizeof(void*) en la plataforma. Los valores admitidos son: 4 y 8

El archivo de cadena de herramientas se puede seleccionar utilizando el parámetro de compilación CMAKE_TOOLCHAIN_FILE . Por ejemplo, lo siguiente crearía archivos MAKE para una compilación utilizando el compilador cruzado CodeSourcery para 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

Enlace en tiempo de ejecución de bibliotecas GLES y EGL

El deqp no necesita puntos de entrada de la API bajo prueba durante la vinculación. El código de prueba siempre accede a las API a través de punteros de función. Luego, los puntos de entrada se pueden cargar dinámicamente en tiempo de ejecución o el puerto de la plataforma puede proporcionarlos en tiempo de enlace.

Si la compatibilidad con una API está activada en la configuración de compilación y no se proporcionan bibliotecas de enlaces, el deqp cargará los puntos de entrada necesarios en tiempo de ejecución. Si se desea el enlace estático, proporcione las bibliotecas de enlaces necesarias en la variable de configuración de compilación DEQP_<API>_LIBRARIES .

Portar el marco de prueba

La migración del deqp implica tres pasos: adaptar las bibliotecas de portabilidad base, implementar interfaces de integración de plataforma de marco de prueba y transferir el servicio de ejecución.

La siguiente tabla enumera las ubicaciones para posibles cambios de portabilidad. Todo lo que esté más allá de ellos probablemente resulte exótico.

Ubicación Descripción
framework/delibs/debase
framework/delibs/dethread
framework/delibs/deutil

Cualquier implementación necesaria de código específico del sistema operativo.

framework/qphelper/qpCrashHandler.c

Opcional: Implementación para su SO.

framework/qphelper/qpWatchDog.c

Implementación para su SO. El actual se basa en dethread y biblioteca C estándar.

framework/platform

Se pueden implementar un nuevo puerto de plataforma y código auxiliar de aplicación como se describe en Puerto de plataforma del marco de prueba .

Bibliotecas de portabilidad base

Las bibliotecas de portabilidad base ya son compatibles con Windows, la mayoría de las variantes de Linux, Mac OS, iOS y Android. Si el objetivo de la prueba se ejecuta en uno de esos sistemas operativos, lo más probable es que no sea necesario tocar las bibliotecas de portabilidad base en absoluto.

Puerto de plataforma de marco de prueba

El puerto de plataforma del marco de prueba deqp requiere dos componentes: un punto de entrada de la aplicación y una implementación de interfaz de plataforma.

El punto de entrada de la aplicación es responsable de crear el objeto de plataforma, crear un objeto de línea de comando ( tcu::CommandLine ), abrir un registro de prueba ( tcu::TestLog ) e iterar la aplicación de prueba ( tcu::App ). Si el sistema operativo de destino admite un punto de entrada main() estándar, tcuMain.cpp se puede utilizar como implementación del punto de entrada.

La API de la plataforma deqp se describe en detalle en los siguientes archivos.

Archivo Descripción
framework/common/tcuPlatform.hpp

Clase base para todos los puertos de plataforma

framework/opengl/gluPlatform.hpp

Interfaz de plataforma OpenGL

framework/egl/egluPlatform.hpp

Interfaz de plataforma EGL

framework/platform/tcuMain.cpp

Punto de entrada de la aplicación estándar

La clase base para todos los puertos de plataforma es tcu::Platform . El puerto de la plataforma puede admitir opcionalmente interfaces específicas de GL y EGL. Consulte la siguiente tabla para obtener una descripción general de lo que se debe implementar para ejecutar las pruebas.

Módulo Interfaz

Módulos de prueba OpenGL (ES)

Interfaz de plataforma GL

Módulo de prueba EGL

Interfaz de plataforma EGL

Las instrucciones detalladas para implementar puertos de plataforma se encuentran en los encabezados de la capa de portabilidad.

Servicio de ejecución de pruebas

Para utilizar la infraestructura de ejecución de pruebas de deqp o el ejecutor de línea de comandos, el servicio de ejecución de pruebas debe estar disponible en el destino. Se proporciona una implementación C++ portátil del servicio en el directorio execserver . El binario independiente se crea como parte del módulo de prueba deqp para objetivos de PC. Puede modificar execserver/CMakeLists.txt para habilitar una compilación en otros objetivos.

La versión C++ del servicio de ejecución de pruebas acepta dos parámetros de línea de comando:

  • --port=<port> establecerá el puerto TCP en el que escucha el servidor. El valor predeterminado es 50016.
  • --single finalizará el proceso del servidor cuando el cliente se desconecte. De forma predeterminada, el proceso del servidor permanecerá activo para atender más solicitudes de ejecución de pruebas.

ejecutar las pruebas

Esta página proporciona instrucciones para ejecutar pruebas de deqp en entornos Linux y Windows, utilizar argumentos de línea de comandos y trabajar con el paquete de aplicaciones de Android.

Entornos Linux y Windows

Comience copiando los siguientes archivos y directorios al destino.

Módulo Directorio Objetivo
Servidor de ejecución build/execserver/execserver <dst>/execserver
Módulo EGL build/modules/egl/deqp-egl <dst>/deqp-egl
Módulo GLES2 build/modules/gles2/deqp-gles2 <dst>/deqp-gles2
data/gles2 <dst>/gles2
Módulo GLES3 build/modules/gles3/deqp-gles3 <dst>/deqp-gles3
data/gles3 <dst>/gles3
Módulo GLES3.1 build/modules/gles31/deqp-gles31 <dst>/deqp-gles31
data/gles31 <dst>/gles31
Módulo GLES3.2 build/modules/gles32/deqp-gles32 <dst>/deqp-gles32
data/gles32 <dst>/gles32

Puede implementar el servicio de ejecución y probar los binarios en cualquier lugar del sistema de archivos de destino; sin embargo, los binarios de prueba esperan encontrar directorios de datos en el directorio de trabajo actual. Cuando esté listo, inicie el servicio de ejecución de pruebas en el dispositivo de destino. Para obtener detalles sobre cómo iniciar el servicio, consulte Servicio de ejecución de pruebas .

Argumentos de la línea de comando

La siguiente tabla enumera los argumentos de la línea de comando que afectan la ejecución de todos los programas de prueba.

Argumento Descripción
--deqp-case=<casename> Ejecute casos que coincidan con un patrón determinado. Se admite el comodín (*).
--deqp-log-filename=<filename> Escriba los resultados de la prueba en el archivo cuyo nombre proporcione. El servicio de ejecución de pruebas establecerá el nombre del archivo al iniciar una prueba.
--deqp-stdin-caselist
--deqp-caselist=<caselist>
--deqp-caselist-file=<filename>
Lea la lista de casos de la entrada estándar o de un argumento determinado. El servicio de ejecución de prueba establecerá el argumento según la solicitud de ejecución recibida. Consulte la siguiente sección para obtener una descripción del formato de lista de casos.
--deqp-test-iteration-count=<count> Anule el recuento de iteraciones para las pruebas que admiten un número variable de iteraciones.
--deqp-base-seed=<seed> Semilla base para los casos de prueba que utilizan aleatorización.

Argumentos específicos de GLES2 y GLES3

La siguiente tabla enumera los argumentos específicos de GLES2 y GLES3.
Argumento Descripción
--deqp-gl-context-type=<type> Tipo de contexto OpenGL. Los tipos de contexto disponibles dependen de la plataforma. En plataformas que admiten EGL, el valor egl se puede utilizar para seleccionar el contexto EGL.
--deqp-gl-config-id=<id> Ejecute pruebas para el ID de configuración GL proporcionado. La interpretación depende de la plataforma. En la plataforma EGL, este es el ID de configuración de EGL.
--deqp-gl-config-name=<name> Ejecute pruebas para una configuración GL con nombre. La interpretación depende de la plataforma. Para EGL, el formato es rgb(a)<bits>d<bits>s<bits> . Por ejemplo, un valor de rgb888s8 seleccionará la primera configuración donde el búfer de color es RGB888 y el búfer de plantilla tiene 8 bits.
--deqp-gl-context-flags=<flags> Crea un contexto. Especifique robust o debug .
--deqp-surface-width=<width>
--deqp-surface-height=<height>
Intenta crear una superficie con un tamaño determinado. El soporte para esto es opcional.
--deqp-surface-type=<type> Utilice un tipo de superficie determinado como objetivo principal de renderizado de la prueba. Los tipos posibles son window , pixmap , pbuffer y fbo .
--deqp-screen-rotation=<rotation> Orientación de la pantalla en incrementos de 90 grados para plataformas que la admitan.

Formato de lista de casos de prueba

La lista de casos de prueba se puede presentar en dos formatos. La primera opción es enumerar el nombre completo de cada prueba en una línea separada en un archivo ASCII estándar. A medida que crecen los conjuntos de prueba, los prefijos repetitivos pueden resultar engorrosos. Para evitar repetir los prefijos, utilice la sintaxis trie (también conocida como árbol de prefijos) que se muestra a continuación.

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

Por ejemplo:

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

Se traduce en los siguientes dos casos de prueba:

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

Androide

El paquete de la aplicación de Android contiene todos los componentes necesarios, incluido el servicio de ejecución de pruebas, los archivos binarios de prueba y los archivos de datos. La actividad de prueba es una NativeActivity que usa EGL (requiere Android 3.2 o superior).

El paquete de la aplicación se puede instalar con el siguiente comando (el nombre que se muestra es el nombre del APK en el paquete CTS de Android; cuyo nombre depende de la compilación):

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

Para iniciar el servicio de ejecución de prueba y configurar el reenvío de puertos, utilice lo siguiente:

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

Las impresiones de depuración se pueden habilitar ejecutando lo siguiente antes de comenzar las pruebas:

adb –d shell setprop log.tag.dEQP DEBUG

Ejecutar pruebas en Android sin Android CTS

Para iniciar manualmente la actividad de ejecución de prueba, cree una intención de Android dirigida a android.app.NativeActivity . Las actividades se pueden encontrar en el paquete com.drawelements.deqp . La línea de comando debe proporcionarse como una cadena adicional con la clave "cmdLine" en el Intent.

Se escribe un registro de prueba en /sdcard/dEQP-log.qpa . Si la ejecución de prueba no comienza normalmente, hay información de depuración adicional disponible en el registro del dispositivo.

Puede iniciar una actividad desde la línea de comando usando la utilidad am . Por ejemplo, para ejecutar pruebas dEQP-GLES2.info en una plataforma que admita NativeActivity, utilice los siguientes comandos.

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

Depurar en Android

Para ejecutar las pruebas bajo el depurador GDB en Android, primero compile e instale la compilación de depuración ejecutando los dos scripts siguientes:

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

Después de instalar la compilación de depuración en el dispositivo, para iniciar las pruebas en GDB ejecutándose en el host, ejecute el siguiente comando:

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

La línea de comando deqp depende de los casos de prueba que se ejecutarán y otros parámetros requeridos. El script agrega un punto de interrupción predeterminado al comienzo de la ejecución de deqp ( tcu::App::App ).

El script debug.py acepta múltiples argumentos de línea de comando para acciones como establecer puntos de interrupción para la depuración, parámetros de conexión de gdbserver y rutas a archivos binarios adicionales para depurar (use debug.py --help para todos los argumentos y explicaciones). El script también copia algunas bibliotecas predeterminadas del dispositivo de destino para obtener listados de símbolos.

Para recorrer el código del controlador (por ejemplo, cuando el GDB necesita conocer las ubicaciones de los archivos binarios con información de depuración completa), agregue más bibliotecas a través de los parámetros de la línea de comando debug.py . Este script escribe un archivo de configuración para GDB a partir de la línea 132 del archivo de script. Puede proporcionar rutas adicionales a archivos binarios, etc., pero proporcionar los parámetros correctos de la línea de comando debería ser suficiente.

Nota: En Windows, el binario GDB requiere libpython2.7.dll . Antes de iniciar debug.py , agregue <path-to-ndk>/prebuilt/windows/bin a la variable PATH.

Nota: la depuración de código nativo no funciona en Android 4.3; Para encontrar soluciones alternativas, consulte este error público . Android 4.4 y superiores no contienen este error.

Automatizar las pruebas

Los módulos de prueba de Deqp se pueden integrar a sistemas de prueba automatizados de múltiples maneras. El mejor enfoque depende de la infraestructura de prueba existente y del entorno de destino.

El resultado principal de una ejecución de prueba es siempre el archivo de registro de prueba, es decir, el archivo con un sufijo .qpa . Los resultados completos de la prueba se pueden analizar desde el registro de prueba. La salida de la consola es solo información de depuración y es posible que no esté disponible en todas las plataformas.

Los binarios de prueba se pueden invocar directamente desde un sistema de automatización de pruebas. El binario de prueba se puede iniciar para un caso específico, para un conjunto de pruebas o para todas las pruebas disponibles. Si se produce un error fatal durante la ejecución (como ciertos errores de API o un bloqueo), la ejecución de la prueba se cancelará. Para las pruebas de regresión, el mejor enfoque es invocar los binarios de prueba para casos individuales o pequeños conjuntos de pruebas por separado, para tener resultados parciales disponibles incluso en caso de una falla grave.

El deqp viene con herramientas de ejecución de pruebas de línea de comandos que se pueden usar en combinación con el servicio de ejecución para lograr una integración más sólida. El ejecutor detecta la terminación del proceso de prueba y reanudará la ejecución de la prueba en el siguiente caso disponible. Se genera un único archivo de registro a partir de la sesión de prueba completa. Esta configuración es ideal para sistemas de prueba livianos que no brindan funciones de recuperación ante fallas.

Herramientas de ejecución de pruebas de línea de comando

El conjunto de herramientas de línea de comandos actual incluye una herramienta de ejecución remota de pruebas, un generador de comparación de registros de pruebas para análisis de regresión, un conversor de registros de pruebas a CSV, un conversor de registros de pruebas a XML y un conversor de registros de pruebas a JUnit. .

El código fuente de estas herramientas está en el directorio executor y los binarios están integrados en el directorio <builddir>/executor .

Ejecutor de prueba de línea de comando

El ejecutor de prueba de línea de comando es una herramienta portátil de C++ para iniciar una ejecución de prueba en un dispositivo y recopilar los registros resultantes a través de TCP/IP. El Ejecutor se comunica con el servicio de ejecución (servidor ejecutivo) en el dispositivo de destino. Juntos proporcionan funcionalidades como la recuperación de fallas en el proceso de prueba. Los siguientes ejemplos demuestran cómo usar la línea de comando Test Executor (use --help para más detalles):

Ejemplo 1: ejecutar pruebas funcionales de GLES2 en un dispositivo 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"
Ejemplo 2: continuar ejecutando una prueba parcial de OpenGL ES 2 localmente
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

Registro de prueba, exportación CSV y comparación

El deqp tiene una herramienta para convertir registros de prueba (archivos qpa ) en archivos CSV. La salida CSV contiene una lista de casos de prueba y sus resultados. La herramienta también puede comparar dos o más resultados de lotes y enumerar solo los casos de prueba que tienen códigos de estado diferentes en los resultados del lote de entrada. La comparación también imprimirá el número de casos coincidentes.

La salida en formato CSV es muy práctica para su posterior procesamiento con utilidades de línea de comandos estándar o con un editor de hojas de cálculo. Se puede seleccionar un formato de texto plano adicional, legible por humanos, utilizando el siguiente argumento de línea de comando: --format=text

Ejemplo 1: exportar el registro de prueba en formato CSV
testlog-to-csv --value=code BatchResult.qpa > Result_statuscodes.csv
testlog-to-csv --value=details BatchResult.qpa > Result_statusdetails.csv
Ejemplo 2: enumerar las diferencias de los resultados de las pruebas entre dos registros de pruebas
testlog-to-csv --mode=diff --format=text Device_v1.qpa Device_v2.qpa

Nota: El argumento --value=code genera el código del resultado de la prueba, como "Pasa" o "Falla". El argumento --value=details selecciona la explicación adicional del resultado o valor numérico producido por una prueba de rendimiento, capacidad o precisión.

Exportación XML del registro de prueba

Los archivos de registro de prueba se pueden convertir en documentos XML válidos utilizando la utilidad testlog-to-xml . Se admiten dos modos de salida:

  • Modo de documentos separados, donde cada caso de prueba y el documento de resumen caselist.xml se escriben en un directorio de destino
  • Modo de archivo único, donde todos los resultados del archivo .qpa se escriben en un único documento XML.

Los archivos de registro de pruebas exportados se pueden ver en un navegador utilizando una hoja de estilo XML. Se proporcionan documentos de hoja de estilo de muestra ( testlog.xsl y testlog.css ) en el directorio doc/testlog-stylesheet . Para representar los archivos de registro en un navegador, copie los dos archivos de hojas de estilo en el mismo directorio donde se encuentran los documentos XML exportados.

Si está utilizando Google Chrome, se debe acceder a los archivos a través de HTTP, ya que Chrome limita el acceso a los archivos locales por razones de seguridad. La instalación estándar de Python incluye un servidor HTTP básico que se puede iniciar para servir el directorio actual con el comando python –m SimpleHTTPServer 8000 . Después de iniciar el servidor, simplemente apunte el navegador Chrome a http://localhost:8000 para ver el registro de prueba.

Conversión a un registro de prueba JUnit

Muchos sistemas de automatización de pruebas pueden generar informes de resultados de ejecución de pruebas a partir de la salida de JUnit. Los archivos de registro de prueba de deqp se pueden convertir al formato de salida JUnit utilizando la herramienta testlog-to-junit.

Actualmente, la herramienta solo admite la traducción del veredicto del caso de prueba. Como JUnit solo admite resultados "aprobado" y "reprobado", un resultado aprobado del deqp se asigna a "aprobado JUnit" y otros resultados se consideran fallidos. El código de resultado de deqp original está disponible en la salida de JUnit. Otros datos, como mensajes de registro e imágenes de resultados, no se conservan en la conversión.

Utilice grupos de prueba especiales

Algunos grupos de prueba pueden necesitar o admitir opciones especiales de línea de comandos, o requerir cuidados especiales cuando se usan en ciertos sistemas.

Pruebas de estrés de asignación de memoria

Las pruebas de estrés de asignación de memoria ejercitan condiciones de falta de memoria asignando repetidamente ciertos recursos hasta que el controlador informa un error de falta de memoria.

En determinadas plataformas, como Android y la mayoría de las variantes de Linux, puede ocurrir lo siguiente: El sistema operativo puede finalizar el proceso de prueba en lugar de permitir que un controlador maneje o proporcione un error de falta de memoria. En dichas plataformas, las pruebas diseñadas para causar errores de falta de memoria están deshabilitadas de forma predeterminada y deben habilitarse usando el argumento de línea de comando --deqp-test-oom=enable . Se recomienda ejecutar dichas pruebas manualmente para comprobar si el sistema se comporta correctamente bajo presión de recursos. Sin embargo, en tal situación, una falla del proceso de prueba debe interpretarse como un paso.

Grupos de prueba

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

Pruebas de estrés de renderizado de larga duración

Las pruebas de estrés de renderizado están diseñadas para revelar problemas de robustez bajo una carga de renderizado sostenida. De forma predeterminada, las pruebas ejecutarán solo unas pocas iteraciones, pero se pueden configurar para que se ejecuten indefinidamente proporcionando el argumento de línea de comando --deqp-test-iteration-count=-1 . El mecanismo de vigilancia de pruebas debe estar deshabilitado ( --deqp-watchdog=disable ) cuando se ejecutan estas pruebas durante un período de tiempo prolongado.

Grupos de prueba

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