DrawElements-Qualitätsprogramm-Tests

AOSP umfasst die GPU-Testsuite für dasdrawElements Quality Program (deqp) unter https://android.googlesource.com/platform/external/deqp Auf dieser Seite wird beschrieben, wie Sie die DEQP-Testsuite in einer neuen Umgebung bereitstellen.

Verwenden Sie den deqp-dev-Zweig, um mit dem zuletzt gesendeten Code zu arbeiten. Verwende für Code, der einer bestimmten Android CTS-Version entspricht, die release-code-name-release-Branch (z.B. für Android 6.0, Verwenden Sie den Zweig marshmallow-release).

Quelllayout

Das Quellcode-Layout für die DEQP-Testmodule und unterstützenden Bibliotheken ist (Die Auflistung ist nicht vollständig, wichtigsten Verzeichnissen).

Verzeichnis Beschreibung
android

Android-Testerquellen und Build-Skripts

data

Datendateien testen

modules

Modulquellen testen

modules/egl

EGL-Modul

modules/gles2

GLES2-Modul

modules/gles3

GLES3-Modul

modules/gles31

GLES3.1-Modul

modules/gles32

GLES3.2-Modul

targets

Zielspezifische Build-Konfigurationsdateien

framework

DEQP-Testmodul-Framework und Dienstprogramme

framework/delibs

Grundlegende Portabilität und Build-Bibliotheken

framework/platform

Plattformports

framework/qphelper

Testprogrammintegrationsbibliothek (C)

framework/common

DEQP-Framework (C++)

framework/opengl, framework/egl

API-spezifische Dienstprogramme

execserver

Geräteseitige ExecServer-Quelle

executor

Shell-Tool und Dienstprogramme für das Host-Side-Test-Executor

external

Build-Stub-Verzeichnis für die externen Bibliotheken libpng und zlib

Open-Source-Komponenten

Die Abfrage verwendet libpng und zlib, die abgerufen werden können mit dem Skript platform/external/deqp/external/fetch_sources.py oder über Git von platform/external/[libpng,zlib].

Testprogramme erstellen

Bei der Entwicklung des Test-Frameworks wurde auf Portabilität geachtet. Die einzige obligatorische Anforderungen sind vollständiger C++-Support und Standard-Systembibliotheken für E/A, Threads und Sockets.

CMake-Build-System

Die deqp-Quellen enthalten Build-Skripts für CMake, das bevorzugte Tool für das Kompilieren der Testprogramme.

CMake ist ein Open-Source-Build-System, das mehrere Plattformen und Toolchains. CMake generiert native Makefiles oder IDE-Projektdateien aus zielunabhängige Konfigurationsdateien. Weitere Informationen zu CMake finden Sie in der CMake-Dokumentation

CMake unterstützt und empfiehlt Out-of-Source-Tree-Builds. Das heißt, Sie sollten Erstellen Sie Makefiles oder Projektdateien immer in einem separaten Build-Verzeichnis. außerhalb der Quellstruktur. CMaker enthält keine Art von „distclean“ Ziel ist, sodass Entfernen Sie alle von CMake generierten Dateien manuell.

Konfigurationsoptionen werden CMake mithilfe von -DOPTION_NAME=VALUE zugewiesen Syntax. Einige häufig verwendete DEQP-Optionen sind unten aufgeführt.

Konfigurationsoption Beschreibung
DEQP_TARGET

Name des Ziels, z. B. „android“

Die deqp CMake-Skripts enthalten die Datei targets/DEQP_TARGET/DEQP_TARGET.cmake und erwarten, dass zielspezifische Build-Optionen erstellen.

CMAKE_TOOLCHAIN_FILE

Pfad zur Toolchain-Datei für CMake. Wird für die Kreuzkompilierung verwendet.

CMAKE_BUILD_TYPE

Build-Typ für Makefile-Ziele. Gültige Werte: „Debug“ und „Release“

Beachten Sie, dass Interpretation und Standardtyp vom jeweiligen Build-System abhängen. Weitere Informationen finden Sie in der CMake-Dokumentation.

Ziel-Build-Datei erstellen

Das DEQP-Build-System wird mithilfe von Ziel-Build-Dateien für neue Ziele konfiguriert. Eine Ziel-Build-Datei definiert, welche Features die Plattform unterstützt und welche Bibliotheken oder zusätzliche Einschließen-Pfade sind erforderlich. Namen von Zieldateien folgen dem targets/NAME/NAME.cmake Format und das Ziel wird mit dem Build-Parameter DEQP_TARGET ausgewählt.

Dateipfade in Zieldateien beziehen sich auf das Basisverzeichnis deqp, nicht auf das targets/NAME-Verzeichnis. Die folgenden Standardvariablen können in der Ziel-Build-Datei festgelegt werden.

Variable Beschreibung
DEQP_TARGET_NAME

Zielname (wird in Testprotokolle aufgenommen)

DEQP_SUPPORT_GLES2

Gibt an, ob GLES2 unterstützt wird (Standardeinstellung: AUS)

DEQP_GLES2_LIBRARIES

GLES2-Bibliotheken (leer lassen, wenn dies nicht unterstützt wird oder dynamisches Laden verwendet wird)

DEQP_SUPPORT_GLES3

Gibt an, ob GLES3.x unterstützt wird (Standardeinstellung: AUS)

DEQP_GLES3_LIBRARIES

GLES3.x-Bibliotheken (leer lassen, wenn dies nicht unterstützt wird oder dynamisches Laden verwendet wird)

DEQP_SUPPORT_VG

Gibt an, ob OpenVG unterstützt wird (Standardeinstellung: AUS)

DEQP_OPENVG_LIBRARIES

OpenVG-Bibliotheken (leer lassen, wenn dies nicht unterstützt wird oder dynamisches Laden verwendet wird)

DEQP_SUPPORT_EGL

Gibt an, ob EGL unterstützt wird (Standardeinstellung: AUS)

DEQP_EGL_LIBRARIES

EGL-Bibliotheken (leer lassen, wenn dies nicht unterstützt wird oder dynamisches Laden verwendet wird)

DEQP_PLATFORM_LIBRARIES

Zusätzliche plattformspezifische Bibliotheken, die für die Verknüpfung erforderlich sind

DEQP_PLATFORM_COPY_LIBRARIES

Liste der Bibliotheken, die in jedes binäre Testverzeichnis für den Build kopiert werden. Kann sein zum Kopieren von Bibliotheken, die zum Ausführen von Tests benötigt werden, aber nicht standardmäßig sind Suchpfads angeben.

TCUTIL_PLATFORM_SRCS

Liste der Plattformportquellen. Standardquellen werden anhand der und Betriebssystem.

Hinweis: Pfade sind relativ zu: framework/platform

In der Ziel-Build-Datei können mithilfe der Methode include_directories()- und link_directories()-CMake-Funktionen.

Win32-Build

Die einfachste Methode zum Erstellen von DEQP-Modulen für Windows ist die Verwendung des CMake-Builds System. Sie benötigen CMake 2.6.12 oder höher und den Microsoft Visual C/C++- Compiler. Die DEQP wurde mit Visual Studio 2013 getestet.

Visual Studio-Projektdateien können mit dem folgenden Befehl generiert werden:

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

Ein 64-Bit-Build kann durch Auswahl von „Visual Studio VERSION Win64“ erstellt werden während der Build Generator:

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

Sie können NMake-Makefiles auch mit der Option -G "NMake Makefiles" generieren als Build-Typ aus (-DCMAKE_BUILD_TYPE="Debug" oder "Release").

Erstellung des Renderingkontexts

Renderingkontext kann entweder mit WGL oder mit EGL unter Windows erstellt werden.

WGL-Unterstützung

Alle Win32-Binärdateien unterstützen die GL-Kontexterstellung mit WGL, da dies nur Standardbibliotheken. WGL-Kontext kann mit --deqp-gl-context-type=wgl ausgewählt werden Befehlszeilenargument. Im WGL-Modus verwendet „deqp“ den WGL_EXT_create_context_es_profile Erweiterung zum Erstellen von OpenGL ES-Kontexten. Dies wurde für die Verwendung mit die neuesten Treiber von NVIDIA und Intel. AMD-Treiber unterstützen nicht die erforderlichen .

EGL-Unterstützung

Die DEQP wird mit dynamischem Laden für EGL unter Windows erstellt, wenn DEQP_SUPPORT_EGL ist AN. Dies ist bei den meisten Zielen die Standardeinstellung. Wenn der Host über EGL-Bibliotheken verfügt, können Sie Tests über die Befehlszeile ausführen, Parameter: --deqp-gl-context-type=egl

Android-Build

Der Android-Build verwendet CMake-Build-Skripts zum Erstellen des nativen Testcodes. Java-Komponenten, d.h. der Testausführungsserver und das Testanwendungs-Stub, die mit den standardmäßigen Android-Build-Tools kompiliert wurden.

Kompilieren von DEQP-Testprogrammen für Android mit dem bereitgestellten Build Skripte benötigen Sie Folgendes:

  • Die neueste Version von Android NDK In der Datei android/scripts/common.py ist die erforderliche Version
  • Eigenständiges Android-SDK mit API 13, SDK Tools, SDK Platform-Tools und SDK Build-Tools-Pakete installiert
  • Apache Ant 1.9.4 (für den Java-Code-Build erforderlich)
  • CMake 2.8.12 oder höher
  • Python 2.6 oder höher in der 2.x-Serie; Python 3.x wird nicht unterstützt.
  • Für Windows: entweder NMake oder JOM in PATH <ph type="x-smartling-placeholder">
      </ph>
    • JOM ermöglicht schnellere Builds
  • Optional: „Ninja Make“ wird auch unter Linux unterstützt.

Die Binärdateien von Ant und SDK basieren auf der Umgebungsvariable PATH, bestimmte überschreibende Standardeinstellungen. Die Logik wird von android/scripts/common.py gesteuert.

Das NDK-Verzeichnis muss entweder ~/android-ndk-VERSION oder C:/android/android-ndk-VERSION oder definiert über ANDROID_NDK_PATH Umgebungsvariable ein.

Die deqp-On-Device-Komponenten, der Testausführungsdienst und die Testprogramme das durch Ausführen des Skripts android/scripts/build.py erstellt wurde. Die finale APK-Datei wird in android/package/bin und kann mit dem Skript install.py installiert werden. Wenn die command line executor verwendet, wird ExecService gestartet mit launch.py-Script auf dem Gerät über ADB. Die Skripts können von jedem Verzeichnis aus ausgeführt werden.

Linux-Build

Testbinärprogramme und Befehlszeilendienstprogramme können für Linux erstellt werden, indem Makefiles mit CMake. Es gibt mehrere vordefinierte Build-Ziele, die beim Erstellen für Linux nützlich sind.

Ziel erstellen Beschreibung
default

Standardziel, bei dem die CMake-Plattform selbstprüfung verwendet wird, um die Unterstützung verschiedener APIs zu ermitteln.

x11_glx

Verwendet GLX zum Erstellen von OpenGL-Kontexten (ES).

x11_egl

Verwendet EGL zum Erstellen von OpenGL-Kontexten (ES).

x11_egl_glx

Unterstützt sowohl GLX als auch EGL mit X11.

Verwenden Sie immer -DCMAKE_BUILD_TYPE=<Debug|Release>, um den Build-Typ zu definieren. Release ist eine gute Standardeinstellung. Ohne sie wird ein nicht optimierter Standard-Release-Build erstellt.

Die Befehlszeilenargumente -DCMAKE_C_FLAGS und -DCMAKE_CXX_FLAGS können wird verwendet, um zusätzliche Argumente an den Compiler zu übergeben. Die 32-Bit- oder 64-Bit-Version kann beispielsweise Dabei wird -DCMAKE_C(XX)_FLAGS="-m32" bzw. "-m64" festgelegt. Falls nicht wird die native Toolchain-Architektur verwendet, in der Regel 64-Bit in der 64-Bit-Toolchain.

Die Argumente -DCMAKE_LIBRARY_PATH und -DCMAKE_INCLUDE_PATH können verwendet werden, für CMake, um CMake eine zusätzliche Bibliothek bereitzustellen oder Suchpfade einzubeziehen.

Beispiel für eine vollständige Befehlszeile, mit der ein 32-Bit-Build für die Fehlerbehebung ausgeführt wird für Treiber-Header und -Bibliotheken an einem benutzerdefinierten Speicherort Folgendes sind:

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

Cross-Compiling

Eine Kreuzkompilierung kann mithilfe einer CMake-Toolchain-Datei erfolgen. Die Toolchain -Datei gibt den zu verwendenden Compiler mit benutzerdefinierten Suchpfaden für Bibliotheken und Headern. Mehrere Toolchain-Dateien für häufige Szenarien im Release-Paket im Verzeichnis framework/delibs/cmake enthalten.

Neben den standardmäßigen CMake-Variablen werden die folgenden deqp-spezifischen Variablen kann von der Toolchain-Datei festgelegt werden. CMake kann in der Regel DE_OS und DE_COMPILER erkennen und DE_PTR_SIZE korrekt, aber DE_CPU muss von der Toolchain-Datei festgelegt werden.

Variable Beschreibung
DE_OS

Betriebssystem. Unterstützte Werte: DE_OS_WIN32, DE_OS_UNIX, DE_OS_WINCE, DE_OS_OSX, DE_OS_ANDROID, DE_OS_SYMBIAN, DE_OS_IOS

DE_COMPILER

Compilertyp. Unterstützte Werte: DE_COMPILER_GCC, DE_COMPILER_MSC, DE_COMPILER_CLANG

DE_CPU

CPU-Typ. Unterstützte Werte: DE_CPU_ARM, DE_CPU_X86.

DE_PTR_SIZE

sizeof(void*) auf der Plattform. Unterstützte Werte: 4 und 8

Die Toolchain-Datei kann mit dem Build-Parameter CMAKE_TOOLCHAIN_FILE ausgewählt werden. Im folgenden Beispiel würden Makefiles für einen Build mit dem CodeSourcery-Cross-Compiler für ARM/Linux erstellt:

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

Laufzeitverknüpfung von GLES- und EGL-Bibliotheken

Der DEQP benötigt während der Verknüpfung keine Einstiegspunkte der zu testenden API. Die Testcode greift immer über Funktionszeiger auf die APIs zu. Einstiegspunkte können werden dann zur Laufzeit dynamisch geladen oder über den Plattformport Zeit der Verknüpfung.

Wenn die Unterstützung für eine API in den Build-Einstellungen und den Linkbibliotheken aktiviert ist nicht angegeben ist, lädt die DEQP die erforderlichen Einstiegspunkte zur Laufzeit. Wenn die Eine statische Verknüpfung ist erwünscht. Stellen Sie die erforderlichen Linkbibliotheken in der DEQP_<API>_LIBRARIES bereit. Build-Konfigurationsvariable.

Test-Framework portieren

Die Portierung der Abfragen umfasst drei Schritte: die Anpassung grundlegender Portabilitätsbibliotheken, Implementierung von Schnittstellen zur Plattformintegration (Test-Framework) und Portieren der ausgeführt werden soll.

In der folgenden Tabelle sind die Orte aufgeführt, an denen die Mitnahme wahrscheinlich Änderungen vornehmen kann. Alles, was darüber hinausgeht sind sie wahrscheinlich exotisch.

Standort Beschreibung
framework/delibs/debase
framework/delibs/dethread
framework/delibs/deutil

Erforderliche Implementierungen von betriebssystemspezifischem Code

framework/qphelper/qpCrashHandler.c

Optional: Implementierung für Ihr Betriebssystem.

framework/qphelper/qpWatchDog.c

Implementierung für Ihr Betriebssystem. Die aktuelle basiert auf dethread und der Standard-C-Bibliothek.

framework/platform

Ein neuer Plattformport und ein neuer Anwendungs-Stub können implementiert werden, wie unter Testen Sie den Port der Framework-Plattform.

Grundlegende Portabilitätsbibliotheken

Die grundlegenden Portabilitätsbibliotheken unterstützen bereits Windows, die meisten Linux-Varianten, Mac OS, iOS und Android. Wenn das Testziel auf einem dieser Betriebssysteme ausgeführt wird, ist es höchstwahrscheinlich nicht nötig, die Basisbibliotheken für die Portabilität zu berühren.

Port der Framework-Plattform testen

Der Port der DEQP-Test-Framework-Plattform erfordert zwei Komponenten: eine Anwendung und eine Plattformschnittstellen-Implementierung.

Der Anwendungseinstiegspunkt ist für die Erstellung des Plattformobjekts Befehlszeilenobjekt (tcu::CommandLine) erstellen, Testlog öffnen (tcu::TestLog) und Iterieren der Testanwendung (tcu::App). Wenn die Zielbetriebssystem unterstützt einen standardmäßigen main()-Einstiegspunkt, tcuMain.cpp kann verwendet werden als Einstiegspunktimplementierung verwendet werden.

Die DEQP-Plattform-API wird in den folgenden Dateien detailliert beschrieben.

Datei Beschreibung
framework/common/tcuPlatform.hpp

Basisklasse für alle Plattformports

framework/opengl/gluPlatform.hpp

OpenGL-Plattformoberfläche

framework/egl/egluPlatform.hpp

Schnittstelle der EGL-Plattform

framework/platform/tcuMain.cpp

Standard-Einstiegspunkt für Anwendungen

Die Basisklasse für alle Plattformports ist tcu::Platform. Der Plattformport kann unterstützen optional GL- und EGL-spezifische Schnittstellen. Weitere Informationen finden Sie unter sehen Sie in der folgenden Tabelle, was implementiert werden muss, um führen Sie die Tests durch.

Modul Benutzeroberfläche

OpenGL (ES)-Testmodule

GL-Plattformschnittstelle

EGL-Testmodul

Schnittstelle der EGL-Plattform

Eine ausführliche Anleitung zur Implementierung von Plattformports finden Sie in der Portierung von Layer-Headern.

Testausführungsdienst

Um die Infrastruktur für die Testausführung deqp oder den Befehlszeilen-Executor zu verwenden, Der Testausführungsdienst muss für das Ziel verfügbar sein. Eine mobile C++- Die Implementierung des Dienstes wird im Verzeichnis execserver bereitgestellt. Die eigenständige Die Binärdatei wird als Teil des DEQP-Testmoduls erstellt für PC-Ziele erstellen. Sie können execserver/CMakeLists.txt ändern, um einen Build zu aktivieren anderen Zielen.

Die C++ Version des Testausführungsdienstes akzeptiert zwei Befehlszeilen Parameter:

  • --port=<port> legt den TCP-Port fest, den der Server überwacht. Der Standardwert ist 50016.
  • --single beendet den Serverprozess, wenn die Verbindung zum Client getrennt wird. Standardmäßig enthält der Parameter um weitere Testausführungsanfragen zu verarbeiten.

Tests ausführen

Diese Seite enthält Anleitungen zum Ausführen von DEQP-Tests unter Linux und Windows Umgebungen, Befehlszeilenargumente und die Arbeit mit Android Application-Paket.

Linux- und Windows-Umgebungen

Kopieren Sie zuerst die folgenden Dateien und Verzeichnisse in das Ziel.

Modul Verzeichnis Target
Ausführungsserver build/execserver/execserver <dst>/execserver
EGL-Modul build/modules/egl/deqp-egl <dst>/deqp-egl
GLES2-Modul build/modules/gles2/deqp-gles2 <dst>/deqp-gles2
data/gles2 <dst>/gles2
GLES3-Modul build/modules/gles3/deqp-gles3 <dst>/deqp-gles3
data/gles3 <dst>/gles3
GLES3.1-Modul build/modules/gles31/deqp-gles31 <dst>/deqp-gles31
data/gles31 <dst>/gles31
GLES3.2-Modul build/modules/gles32/deqp-gles32 <dst>/deqp-gles32
data/gles32 <dst>/gles32

Sie können den Ausführungsdienst bereitstellen und die Binärdateien überall im Ziel testen Dateisystem; Test-Binärdateien erwarten jedoch Datenverzeichnisse in der im aktuellen Arbeitsverzeichnis. Wenn Sie bereit sind, starten Sie den Testausführungsdienst auf der Zielgerät Einzelheiten zum Starten des Dienstes finden Sie unter Testen Ausführungsdienst.

Befehlszeilenargumente

In der folgenden Tabelle sind Befehlszeilenargumente aufgeführt, die die Ausführung aller Programme testen können.

Argumentation Beschreibung
--deqp-case=<casename> Führt Fälle aus, die einem bestimmten Muster entsprechen. Platzhalter (*) wird unterstützt.
--deqp-log-filename=<filename> Schreiben Sie die Testergebnisse in die Datei, deren Namen Sie angeben. Testausführung legt der Dienst den Dateinamen fest, wenn ein Test gestartet wird.
--deqp-stdin-caselist
--deqp-caselist=<caselist>
--deqp-caselist-file=<filename>
Fallliste aus stdin oder einem bestimmten Argument lesen. Testausführung Der Dienst legt das Argument entsprechend der empfangenen Ausführungsanfrage fest. Weitere Informationen finden Sie unter finden Sie im nächsten Abschnitt eine Beschreibung des Formats der Fallliste.
--deqp-test-iteration-count=<count> Iterationsanzahl für Tests überschreiben, die eine variable Anzahl von Iterationen vor.
--deqp-base-seed=<seed> Basis-Seed für Testfälle mit Randomisierung.

GLES2- und GLES3-spezifische Argumente

In der folgenden Tabelle sind die GLES2- und GLES3-spezifischen Argumente aufgeführt.
Argumentation Beschreibung
--deqp-gl-context-type=<type> OpenGL-Kontexttyp. Die verfügbaren Kontexttypen hängen von der Plattform ab. An Plattformen, die EGL unterstützen, können Sie mit dem Wert egl aus dem EGL-Kontext.
--deqp-gl-config-id=<id> Führen Sie Tests für die bereitgestellte GL-Konfigurations-ID aus. Interpretation: plattformabhängig ist. Auf der EGL-Plattform ist dies die EGL-Konfigurations-ID.
--deqp-gl-config-name=<name> Führen Sie Tests für eine benannte GL-Konfiguration aus. Interpretation: plattformabhängig ist. Für EGL lautet das Format rgb(a)<bits>d<bits>s<bits> Beispiel: wird mit dem Wert von rgb888s8 die erste Konfiguration ausgewählt, bei der der Der Farbzwischenspeicher ist RGB888 und der Schablonenpuffer verfügt über 8 Bit.
--deqp-gl-context-flags=<flags> Erstellt einen Kontext. Geben Sie robust oder debug an.
--deqp-surface-width=<width>
--deqp-surface-height=<height>
Versuchen Sie, eine Oberfläche mit einer bestimmten Größe zu erstellen. Die Unterstützung dafür ist optional.
--deqp-surface-type=<type> Einen bestimmten Oberflächentyp als wichtigstes Test-Renderingziel verwenden Möglich Typen sind window, pixmap, pbuffer, und fbo.
--deqp-screen-rotation=<rotation> Bildschirmausrichtung in 90-Grad-Schritten für Plattformen, die die sie unterstützen.

Format der Testlaufliste

Die Testfallliste kann in zwei Formaten angegeben werden. Die erste Möglichkeit besteht darin, den vollständigen Namen jedes Tests in einer separaten Zeile in einer Standard-ASCII-Datei. Da die wachsen, können die sich wiederholenden Präfixe umständlich sein. Um Wiederholungen zu vermeiden Präfixe verwenden, verwenden Sie die unten gezeigte Trie-Syntax (auch Präfixstruktur genannt).

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

Beispiel:

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

Dies wird in die folgenden beiden Testfälle übersetzt:

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

Android

Das Android-Anwendungspaket enthält alle erforderlichen Komponenten, einschließlich Testausführungsdienst, Testbinärdateien und Datendateien. Die Testaktivität ist ein NativeActivity mit EGL (erfordert Android 3.2 oder höher).

Das Anwendungspaket kann mit dem folgenden Befehl (name wird der Name des APK im Android CTS-Paket angezeigt. welcher Name von der des Builds):

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

Um den Testausführungsdienst zu starten und die Portweiterleitung einzurichten, verwenden Sie den Folgendes:

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

Sie können Debug-Drucke aktivieren, indem Sie vor dem Start der Tests:

adb –d shell setprop log.tag.dEQP DEBUG

Tests unter Android ohne Android CTS ausführen

Erstellen Sie einen Android-Intent, um die Testausführungsaktivität manuell zu starten mit Targeting auf android.app.NativeActivity. Die Aktivitäten können com.drawelements.deqp-Paket enthalten ist. Die Befehlszeile muss als zusätzlicher String mit dem Schlüssel "cmdLine" im Intent bereitgestellt werden.

Ein Testlog wird in /sdcard/dEQP-log.qpa geschrieben. Wenn der Testlauf startet nicht normal, auf dem Gerät sind zusätzliche Informationen zur Fehlerbehebung verfügbar. Protokoll.

Mit dem am können Sie über die Befehlszeile eine Aktivität starten Dienstprogramm. Beispiel: Zum Ausführen von dEQP-GLES2.info-Tests auf einer Plattform Verwenden Sie die folgenden Befehle, um NativeActivity, zu unterstützen.

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

Fehler auf Android beheben

Um die Tests im GDB-Debugger unter Android auszuführen, müssen Sie zuerst kompilieren und installieren. den Debug-Build aus, indem Sie die folgenden beiden Skripts ausführen:

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

Nachdem der Debug-Build auf dem Gerät installiert wurde, können Sie die Tests starten unter Führen Sie den folgenden Befehl aus, der auf dem Host ausgeführt wird:

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

Die deqp-Befehlszeile hängt von den auszuführenden Testfällen und anderen erforderlichen Parameter. Das Skript fügt einen Standard-Haltepunkt am Anfang Die DEQP-Ausführung (tcu::App::App)

Das Skript debug.py akzeptiert mehrere Befehlszeilenargumente für Aktionen wie das Festlegen von Haltepunkten für das Debugging, die gdbserver-Verbindung Parameter und Pfade zu zusätzlichen Binärdateien für die Fehlerbehebung (verwenden Sie debug.py --help für alle Argumente und Erläuterungen). Das Skript kopiert auch Standardbibliotheken vom Zielgerät verwenden, um Symbollisten abzurufen.

Um den Treibercode durchzugehen (z. B. wenn GDB die Standorte von mit vollständigen Debug-Informationen), fügen Sie weitere Bibliotheken über debug.py-Befehlszeilenparameter. Dieses Skript erstellt eine Konfigurationsdatei für die GDB beginnend bei Zeile 132 der Skriptdatei. Ich kann zusätzliche Pfade zu Binärdateien usw. bereitstellen, aber mit dem richtigen Befehl Zeilenparameter ausreichen.

Hinweis: Unter Windows benötigt die GDB-Binärdatei libpython2.7.dll Füge vor dem Starten von debug.py <path-to-ndk>/prebuilt/windows/bin in die Variable PATH ein.

Hinweis:Native Code-Debugging funktioniert nicht auf Stock-Android 4.3; Behelfslösungen finden Sie unter . diesen öffentlichen Fehler. In Android 4.4 und höher ist dieser Fehler nicht enthalten.

Tests automatisieren

Deqp-Testmodule können auf verschiedene Weise in automatisierte Testsysteme integriert werden. Der beste Ansatz hängt von der vorhandenen Testinfrastruktur und dem Ziel ab zu verbessern.

Die primäre Ausgabe eines Testlaufs ist immer die Testprotokolldatei, d.h. die Datei mit einem .qpa-Postfix. Die vollständigen Testergebnisse können über das Testprotokoll geparst werden. Die Konsolenausgabe ist und sind möglicherweise nicht auf allen Plattformen verfügbar.

Testbinärdateien können direkt aus einem Testautomatisierungssystem aufgerufen werden. Der Test Binärprogramm kann für einen bestimmten Fall, für ein Test-Dataset oder für alle verfügbaren Tests. Wenn während der Ausführung ein schwerwiegender Fehler auftritt (z. B. Fehler oder einen Absturz), wird die Testausführung abgebrochen. Bei Regressionstests Die beste Vorgehensweise besteht darin, die Testbinärdateien für einzelne Fälle oder kleine Tests aufzurufen. werden separat festgelegt, damit auch bei einem Ereignis Teilergebnisse eines harten Versagens.

Der DEQP verfügt über Befehlszeilentools für die Testausführung, die in mit dem Ausführungsdienst kombinieren, um eine robustere Integration zu erreichen. Der Executor erkennt die Beendigung des Testprozesses und setzt die Testausführung am nächsten verfügbaren Fall. Aus dem vollständigen Test wird eine einzelne Protokolldatei erstellt. Sitzung. Diese Einrichtung ist ideal für einfache Testsysteme geeignet, die keine Anlagen zur Wiederherstellung nach einem Absturz.

Befehlszeilen-Tools für die Testausführung

Das aktuelle Befehlszeilen-Tool beinhaltet ein Remote-Testausführungstool, einen Test Log-Vergleichsgenerator für Regressionsanalysen, ein Test-Log-zu-CSV-Konverter, einen Testlog-zu-XML-Konverter und einen testlog-zu-JUnit-Converter.

Der Quellcode für diese Tools befindet sich im Verzeichnis executor und die Binärdateien sind im Verzeichnis <builddir>/executor eingebunden.

Befehlszeilen-Test-Executor

Das Befehlszeilen-Test-Executor ist ein portables C++ Tool zum Starten eines Testlaufs. und die daraus resultierenden Protokolle über TCP/IP erfassen. Der Executor kommuniziert mit dem Ausführungsdienst (execserver) auf dem Zielgerät. Zusammen bieten sie Funktionen wie die Wiederherstellung nach Abstürzen des Testprozesses. Die folgenden Beispiele veranschaulichen die Verwendung des Befehlszeilentools „Test Executor“ (Weitere Informationen erhalten Sie mit --help):

Beispiel 1: GLES2-Funktionstests auf einem Android-Gerät ausführen
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"
Beispiel 2: Einen teilweisen OpenGL ES 2-Test lokal fortsetzen
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-Export und Vergleich von Testprotokollen

Der DEQP verfügt über ein Tool zum Konvertieren von Testprotokollen (qpa-Dateien) in CSV-Dateien. Die CSV-Datei die Ausgabe eine Liste von Testfällen und deren Ergebnisse. Das Tool kann auch zwei oder mehr Batch-Ergebnisse vergleichen und nur die Testläufe mit unterschiedlichen Statuscodes in den Eingabe-Batch-Ergebnissen. Die wird auch die Anzahl der übereinstimmenden Fälle ausgegeben.

Die Ausgabe im CSV-Format ist sehr praktisch für die weitere Verarbeitung mit Standard- oder mit einem Tabellenkalkulationsprogramm verwenden können. Ein zusätzlicher, visuell lesbarer Das Nur-Text-Format kann mit dem folgenden Befehlszeilenargument ausgewählt werden: --format=text

Beispiel 1: Testprotokoll im CSV-Format exportieren
testlog-to-csv --value=code BatchResult.qpa > Result_statuscodes.csv
testlog-to-csv --value=details BatchResult.qpa > Result_statusdetails.csv
Beispiel 2: Unterschiede von Testergebnissen zwischen zwei Testlogs auflisten
testlog-to-csv --mode=diff --format=text Device_v1.qpa Device_v2.qpa

Hinweis:Das Argument --value=code gibt den Test Ergebniscode wie „Pass“ oder „Nicht bestanden“. Das Argument --value=details wählt die weitere Erläuterung des Ergebnisses oder des numerischen Werts eines Leistungs-, Funktions- oder Genauigkeitstests

XML-Export des Testprotokolls

Testprotokolldateien können mithilfe des testlog-to-xml in gültige XML-Dokumente konvertiert werden Dienstprogramm. Es werden zwei Ausgabemodi unterstützt:

  • Modus für separate Dokumente, in dem jeder Testlauf und die caselist.xml-Zusammenfassung Dokumente in ein Zielverzeichnis geschrieben werden.
  • Einzeldateimodus, bei dem alle Ergebnisse in der .qpa-Datei in ein einzelnes XML-Dokument geschrieben werden.

Exportierte Testprotokolldateien können in einem Browser mithilfe eines XML-Stylesheets angezeigt werden. Es werden Beispiel-Style-Sheet-Dokumente (testlog.xsl und testlog.css) zur Verfügung gestellt. im Verzeichnis doc/testlog-stylesheet. Um die Protokolldateien in einem Browser zu rendern, kopieren Sie die in dem Verzeichnis gespeichert werden, in dem sich die exportierten XML-Dokumente befinden.

Wenn Sie Google Chrome verwenden, muss der Zugriff auf die Dateien wie Chrome über HTTP erfolgen. der den lokalen Dateizugriff aus Sicherheitsgründen einschränkt. Python-Standardinstallation einen einfachen HTTP-Server beinhaltet, der gestartet werden kann, um den aktuellen mit dem Befehl python –m SimpleHTTPServer 8000. Nach dem Start des Servers Rufen Sie im Chrome-Browser einfach http://localhost:8000 auf, um das Testprotokoll aufzurufen.

Konvertierung in ein JUnit-Testprotokoll

Viele Testautomatisierungssysteme können Berichte zu Testergebnissen über JUnit generieren . Die DEQP-Testprotokolldateien können in das JUnit-Ausgabeformat konvertiert werden. mithilfe des Tools "testlog-to-junit".

Das Tool unterstützt derzeit nur die Übersetzung des Ergebnisses des Testlaufs. Als JUnit unterstützt nur „Pass“ und „fehlgeschlagen“ wird ein übergebenes Ergebnis der DEQP-Abfrage zugeordnet. zu „JUnit Pass“ und andere Ergebnisse als Misserfolge betrachtet. Ursprüngliche Abfrage Ergebniscode steht in der JUnit-Ausgabe zur Verfügung. Andere Daten, wie z. B. Logeinträge und Ergebnisbilder, bleiben bei der Konvertierung nicht erhalten.

Spezielle Testgruppen verwenden

Einige Testgruppen benötigen oder unterstützen möglicherweise spezielle Befehlszeilenoptionen oder erfordern wenn sie auf bestimmten Systemen verwendet werden.

Belastungstests für die Arbeitsspeicherzuweisung

Bei Stresstests der Arbeitsspeicherzuweisung wird zu wenig Arbeitsspeicher wiederholt Zuweisen bestimmter Ressourcen, bis der Treiber einen Fehler aufgrund von unzureichendem Arbeitsspeicher meldet.

Auf bestimmten Plattformen wie Android und den meisten Linux-Varianten gilt Folgendes: kann auftreten: Das Betriebssystem beendet möglicherweise den Testprozess, Treiber für die Verarbeitung oder anderweitige Bereitstellung eines Nicht genügend Arbeitsspeichers-Fehlers. Auf solchen Plattformen, sind Tests, die auf Fehler aufgrund mangelnden Arbeitsspeichers abzielen, deaktiviert. und muss mit dem Befehlszeilenargument --deqp-test-oom=enable aktiviert werden. Es wird empfohlen, solche Tests manuell auszuführen, Prüfen Sie, ob sich das System unter Ressourcendruck richtig verhält. In solchen in einer Situation sollte ein Absturz eines Testprozesses als bestanden interpretiert werden.

Testgruppen

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

Lang andauernde Rendering-Belastungstests

Rendering-Stresstests sind so konzipiert, dass Robustheitsprobleme bei anhaltenden zu laden. Standardmäßig führen die Tests nur wenige Iterationen aus, aber Sie können so konfiguriert werden, dass sie auf unbestimmte Zeit ausgeführt werden, indem sie den --deqp-test-iteration-count=-1 bereitstellen. Befehlszeilenargument. Der Test-Watchdog sollte deaktiviert sein (--deqp-watchdog=disable) wenn Sie diese Tests über einen längeren Zeitraum durchführen.

Testgruppen

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