本页将介绍如何在 Linux 和 Windows 环境中运行 deqp 测试、如何使用命令行参数,以及如何使用 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 配置 ID 运行测试。解译取决于平台。在 EGL 平台上,该配置 ID 为 EGL 配置 ID。 |
--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-type=<type> |
将指定的表面类型用作主测试渲染目标。可取类型为 window 、pixmap 、pbuffer 和 fbo 。 |
--deqp-screen-rotation=<rotation> |
对于支持该参数的平台,屏幕方向的旋转增量为 90 度。 |
测试用例列表格式
测试用例列表有两种格式。第一种选项是在标准 ASCII 文件的单独一行中列出每个测试的全名。随着测试集的增长,重复添加前缀可能会很麻烦。为避免重复添加前缀,可使用以下所示的 trie(也称为前缀树)语法。
{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 应用包包含所需的所有组件,包括测试执行服务、测试二进制文件和数据文件。测试 Activity 是使用 EGL 的 NativeActivity
(需要 Android 3.2 或更高版本)。
应用包可使用以下命令安装(所示名称为 Android CTS 包中 APK 的名称;该名称因版本而异):
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 设备上执行测试
要手动启动测试执行 Activity,请构建一个目标为 android.app.NativeActivity
的 Android Intent。这些 Activity 可以在 com.drawelements.deqp
包中找到。在 Intent 中,命令行必须以含 "cmdLine"
键的额外字符串提供。
测试日志会写入 /sdcard/dEQP-log.qpa
。若测试运行无法正常启动,请查看设备日志,了解其他调试信息。
您可使用 am
实用程序从命令行启动 Activity。例如,要在支持 NativeActivity,
的平台上运行 dEQP-GLES2.info
测试,请执行以下命令。
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 系统上调试
要采用 Android 系统中的 GDB 调试器运行测试,首先要运行以下两个脚本来编译并安装调试版本:
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
命令行参数添加更多的库。该脚本从脚本文件的第 132 行开始写出 GDB 的配置文件。您还可以提供额外的二进制路径等信息,但提供正确的命令行参数就已足够。
注意:在 Windows 上,GDB 二进制文件需要使用 libpython2.7.dll
。在启动 debug.py
前,请将 <path-to-ndk>/prebuilt/windows/bin
添加到 PATH 变量中。
注意:本机代码调试不适用于 Android 4.3 及之前的所有版本。有关解决方法,请参考此公开 Bug。Android 4.4 及更高版本不包含此 Bug。