AOSP כולל את חבילת בדיקות ה-GPU של pullElements בתוכנית האיכות (deqp) בכתובת https://android.googlesource.com/platform/external/deqp. בדף הזה נסביר איך לפרוס את חבילת הבדיקות של deqp בסביבה חדשה.
כדי לעבוד עם הקוד העדכני ביותר שנשלח, משתמשים בהסתעפות deqp-dev
.
עבור קוד שתואם לגרסה ספציפית של Android CTS, צריך להשתמש ב-
הסתעפות release-code-name-release
(למשל, ל-Android 6.0,
משתמשים בהסתעפות marshmallow-release
).
פריסת המקור
הפריסה של קוד המקור למודולים של בדיקת ה-deqp ולספריות התומכות היא מוצגת בטבלה שלמטה (הרישום אינו מקיף אך מדגיש את הספריות החשובות ביותר).
ספרייה | תיאור |
---|---|
android |
מקורות ובניית סקריפטים של בודקים ב-Android |
data |
קובצי נתוני בדיקה |
modules |
המקורות של מודול הבדיקה |
modules/egl |
מודול EGL |
modules/gles2 |
מודול GLES2 |
modules/gles3 |
מודול GLES3 |
modules/gles31 |
מודול GLES3.1 |
modules/gles32 |
מודול GLES3.2 |
targets |
קובצי תצורת build ספציפיים ליעד |
framework |
framework ותכליות של מודול בדיקה deqp |
framework/delibs |
ספריות בסיסיות של ניידות ופיתוח |
framework/platform |
יציאות לפלטפורמה |
framework/qphelper |
ספריית שילוב של תוכנית בדיקות (C) |
framework/common |
מסגרת Deqp (C++ ) |
framework/opengl, framework/egl |
תוכניות שירות ספציפיות ל-API |
execserver |
מקור ExecServer בצד המכשיר |
executor |
כלי עזר לבדיקה של המעטפת של מנהל הבדיקה בצד המארח |
external |
בניית ספריית stub עבור libs חיצוניים ו-zlib |
רכיבי קוד פתוח
ה-Deqp משתמש באפשרויות libpng
ו-zlib
, שניתן לאחזר
באמצעות הסקריפט
platform/external/deqp/external/fetch_sources.py
או דרך git
מ-platform/external/[libpng,zlib]
.
יצירת תוכניות בדיקה
מסגרת הבדיקה תוכננו מתוך מחשבה על ניידות. היחיד דרישות החובה הן תמיכה מלאה ב-C++ וספריות מערכת רגילות עבור קלט/פלט (I/O), חוטים ושקעים.
מערכת build ל-CMake
מקורות ה-Deqp כוללים סקריפטים של build ל-CMake, שהוא הכלי המועדף עריכת תוכניות הבדיקה.
CMake היא מערכת build בקוד פתוח שתומכת במספר פלטפורמות כלי עבודה. CMake יוצר קובצי makefile נייטיב או קובצי פרויקט IDE מתוך בקובצי תצורה שאינם תלויים ביעד. לקבלת מידע נוסף על CMake, יש לעיין ב מסמכי תיעוד של CMake.
CMake תומך וממליץ על גרסאות build של עץ מחוץ למקור, כלומר, ליצור תמיד קובצי makefile או קובצי פרויקט בספריית build נפרדת מחוץ לעץ המקור. ב-CMake אין כל סוג של 'ניקוי' היעד, כך הסרת קבצים שנוצרו על ידי CMake חייבת להתבצע באופן ידני.
אפשרויות ההגדרה ניתנות ל-CMake באמצעות -DOPTION_NAME=VALUE
תחביר. בהמשך תוכלו למצוא כמה אפשרויות נפוצות ל-Deqp.
אפשרות הגדרה | תיאור |
---|---|
DEQP_TARGET |
שם יעד, למשל: 'android' הסקריפטים של deqp CMake יכללו את הקובץ
|
CMAKE_TOOLCHAIN_FILE |
נתיב לקובץ Toolchain של CMake. משמש להידור מוצלב. |
CMAKE_BUILD_TYPE |
סוג ה-build ליעדים מסוג makefile. הערכים החוקיים הם: "ניפוי באגים" ו-"Release" חשוב לשים לב שהפרשנות וסוג ברירת המחדל תלויים במערכת ה-build המטורגטת. פרטים נוספים זמינים במסמכי התיעוד של CMake. |
יצירת קובץ יעד של build
מערכת ה-build של deqp מוגדרת ליעדים חדשים באמצעות קובצי build מסוג יעד.
קובץ יעד של build מגדיר באילו תכונות הפלטפורמה תומכת ואילו ספריות או
נדרשים נתיבי הכללה נוספים. השמות של קובצי היעד מופיעים אחרי targets/NAME/NAME.cmake
הפורמט, והיעד נבחר באמצעות פרמטר ה-build DEQP_TARGET
.
נתיבי הקבצים בקובצי היעד נמצאים ביחס לספריית הבסיס deqp
, ולא
הספרייה targets/NAME
. אפשר להגדיר את המשתנים הרגילים הבאים לפי קובץ יעד של build.
משתנה | תיאור |
---|---|
DEQP_TARGET_NAME |
שם היעד (ייכלל ביומני הבדיקה) |
DEQP_SUPPORT_GLES2 |
האם יש תמיכה ב-GLES2 (ברירת המחדל: כבויה) |
DEQP_GLES2_LIBRARIES |
ספריות GLES2 (יש להשאיר ריק אם אין תמיכה בהן או שנעשה שימוש בטעינה דינמית) |
DEQP_SUPPORT_GLES3 |
האם יש תמיכה ב-GLES3.x (ברירת המחדל: כבויה) |
DEQP_GLES3_LIBRARIES |
ספריות GLES3.x (יש להשאיר ריק אם אין תמיכה באפשרות הזו או שנעשה שימוש בטעינה דינמית) |
DEQP_SUPPORT_VG |
האם יש תמיכה ב-OpenVG (ברירת המחדל: מושבתת) |
DEQP_OPENVG_LIBRARIES |
ספריות OpenVG (אם אין תמיכה בהן, יש להשאיר ריק או להשתמש בטעינה דינמית) |
DEQP_SUPPORT_EGL |
האם יש תמיכה ב-EGL (ברירת המחדל היא כבויה) |
DEQP_EGL_LIBRARIES |
ספריות EGL (אם אין תמיכה בהן או אם נעשה שימוש בטעינה דינמית, צריך להשאיר את השדה ריק) |
DEQP_PLATFORM_LIBRARIES |
ספריות נוספות ספציפיות לפלטפורמה שנדרשות לקישור |
DEQP_PLATFORM_COPY_LIBRARIES |
רשימת הספריות שמועתקות לכל ספרייה של גרסת build בינארית לבדיקה. יכול להיות משמשת להעתקת ספריות שנחוצות להרצת בדיקות אבל לא מוגדרות כברירת מחדל נתיב החיפוש. |
TCUTIL_PLATFORM_SRCS |
רשימת המקורות של יציאות הפלטפורמה. מקורות ברירת המחדל נקבעים לפי היכולות ומערכת ההפעלה. הערה: הנתיבים הם יחסיים אל: |
לקובץ build היעד אפשר להוסיף עוד נתיבי הכללה או קישור באמצעות
include_directories()
ו-link_directories()
פונקציות CMake.
גרסת build של Win32
הדרך הקלה ביותר לפתח מודולים של deqp ל-Windows היא להשתמש ב-CMake build המערכת. יש צורך ב-CMake 2.6.12 ואילך וב-Microsoft Visual C/C++ מהדר (compiler) . ה-deqp נבדק באמצעות Visual Studio 2013.
אפשר ליצור קובצי פרויקט של Visual Studio באמצעות הפקודה הבאה:
cmake path\to\src\deqp -G "Visual Studio 12"
כדי ליצור גרסת build של 64 ביט, בוחרים באפשרות 'Visual Studio VERSION Win64' בתור ה-build מחולל:
cmake path\to\src\deqp -G "Visual Studio 12 Win64"
אפשר גם ליצור קובצי cookie ל-NMake באמצעות האפשרות -G "NMake Makefiles"
כסוג ה-build (-DCMAKE_BUILD_TYPE="Debug"
או "Release"
).
עיבוד של יצירת הקשר
אפשר ליצור הקשר של רינדור באמצעות WGL או באמצעות EGL ב-Windows.
תמיכה ב-WGL
כל הקבצים הבינאריים של Win32 תומכים ביצירת הקשר ב-GL באמצעות WGL, כי צריך להשתמש בהם רק
של ספריות רגילות. אפשר לבחור הקשר WGL באמצעות --deqp-gl-context-type=wgl
ארגומנט בשורת הפקודה. במצב WGL, ה-Deqp משתמש ב-WGL_EXT_create_context_es_profile
כדי ליצור הקשרי OpenGL ES. אמצעי הבקרה הזה נבדק והוא יכול לפעול עם
מנהלי ההתקנים העדכניים ביותר מ-NVIDIA ומ-Intel. מנהלי התקנים של AMD לא תומכים בתמיכה הנדרשת
לתוסף.
תמיכה ב-EGL
ה-deqp נוצר עם טעינה דינמית של EGL ב-Windows אם הוא DEQP_SUPPORT_EGL
מופעלת. זוהי ברירת המחדל ברוב היעדים. לאחר מכן, אם למארח יש ספריות EGL
אפשר להריץ איתם בדיקות באמצעות שורת הפקודה
פרמטר: --deqp-gl-context-type=egl
גרסת build של Android
גרסת ה-build של Android מתבססת על סקריפטים של build ל-CMake כדי לבנות את קוד הבדיקה המקורי. חלקי Java, כלומר שרת הביצוע לבדיקה ולשונית האפליקציה לבדיקה, שהורכבו באמצעות כלי ה-build הרגילים של Android.
כדי להדר תוכניות בדיקה של deqp ל-Android עם ה-build שסופק סקריפטים שנדרשים להם:
- הגרסה העדכנית ביותר של
Android NDK; קובץ
android/scripts/common.py
מפרט את הגרסה הנדרשת - SDK עצמאי ל-Android עם API 13, כלי SDK, כלים לפלטפורמות SDK ו-SDK חבילות של כלי build מותקנות
- Apache Ant 1.9.4 (נדרש באמצעות ה-build של קוד Java)
- CMake 2.8.12 ואילך
- ֶPython 2.6 ואילך בסדרת 2.x; אין תמיכה ב-Python 3.x
- ל-Windows: NMake או JOM ב-
PATH
- JOM מאפשר פיתוחים מהירים יותר
- אופציונלי: יצרן הנינג'ה נתמך גם ב-Linux
הקבצים הבינאריים של Ant ו-SDK ממוקמים על סמך משתנה הסביבה PATH עם
ברירות מחדל מסוימות שמחליפות את ברירת המחדל. הלוגיקה נשלטת על ידי android/scripts/common.py
.
ספריית ה-NDK חייבת להיות ~/android-ndk-VERSION
או
C:/android/android-ndk-VERSION
או מוגדר באמצעות ANDROID_NDK_PATH
במשתנה הסביבה.
רכיבי Deqp במכשיר, שירות ביצוע הבדיקות ותוכניות הבדיקה
נוצרה על ידי הרצת הסקריפט android/scripts/build.py
. קובץ ה-APK הסופי נוצר ב-
android/package/bin
וניתן להתקין אותם באמצעות הסקריפט install.py
. אם
נעשה שימוש במנהל שורת הפקודה (CLI), וה-ExecService מופעל.
עם סקריפט launch.py
במכשיר דרך ADB. ניתן להריץ את הסקריפטים מכל ספרייה.
גרסת build של Linux
אפשר לבנות קובצי בדיקה בינאריים ותוכנות של שורת פקודה ל-Linux על ידי יצירת קובצי makefile באמצעות CMake. יש מספר יעדי build מוגדרים מראש שניתן להשתמש בהם כשבונים ל-Linux.
יצירת יעד | תיאור |
---|---|
default |
יעד ברירת המחדל שמשתמש בבחינה עצמית של פלטפורמת CMake כדי לקבוע תמיכה בממשקי API שונים. |
x11_glx |
נעשה שימוש ב-GLX כדי ליצור הקשרי OpenGL (ES). |
x11_egl |
נעשה שימוש ב-EGL כדי ליצור הקשרי OpenGL (ES). |
x11_egl_glx |
יש תמיכה ב-GLX וגם ב-EGL עם X11. |
צריך להשתמש תמיד ב--DCMAKE_BUILD_TYPE=<Debug|Release>
כדי להגדיר את סוג ה-build.
מומלץ להשתמש ב-Release
כברירת מחדל. בלי זה, נוצר build של גרסה לא מותאם כברירת מחדל.
הארגומנטים -DCMAKE_C_FLAGS
ו--DCMAKE_CXX_FLAGS
בשורת הפקודה יכולים להיות
המשמש להעברת ארגומנטים נוספים למהדר. לדוגמה, גרסת ה-build של 32 סיביות או של 64 ביט יכולה לבצע
הגדרה של -DCMAKE_C(XX)_FLAGS="-m32"
או "-m64"
בהתאמה. אחרת
ספציפית, נעשה שימוש בארכיטקטורה המקורית של שרשרת הכלים, בדרך כלל ברמת 64 ביט ב-toolchain של 64 ביט.
אפשר להשתמש בארגומנטים -DCMAKE_LIBRARY_PATH
ו--DCMAKE_INCLUDE_PATH
ל-CMake כדי לתת ל-CMake ספרייה נוספת או לכלול נתיבי חיפוש.
דוגמה לשורת פקודה מלאה שמשמשת ליצירת גרסת build של ניפוי באגים בגרסת 32 ביט הכותרות והספריות של מנהלי ההתקנים במיקום מותאם אישית הן:
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
הידור מוצלב
ניתן לבצע הידור מוצלב באמצעות קובץ Toolchain של CMake. שרשרת הכלים
מציין את המהדר שבו צריך להשתמש, יחד עם נתיבי חיפוש מותאמים אישית
כמה ספריות וכותרות. במקרים נפוצים, הנה כמה קובצי Toolchain.
כלולה בחבילת ההפצה בספרייה framework/delibs/cmake
.
בנוסף למשתני CMake רגילים, המשתנים הבאים שספציפיים ל-deqp
ניתן להגדיר באמצעות קובץ ה-toolchain. CMake יכול בדרך כלל לזהות DE_OS
, DE_COMPILER
ו-DE_PTR_SIZE
בצורה נכונה, אבל צריך להגדיר את DE_CPU
על ידי הקובץ Toolchain.
משתנה | תיאור |
---|---|
DE_OS |
מערכת הפעלה. הערכים הנתמכים הם: |
DE_COMPILER |
סוג הידור. הערכים הנתמכים הם: |
DE_CPU |
סוג המעבד (CPU). הערכים הנתמכים הם: |
DE_PTR_SIZE |
sizeof(pause*) בפלטפורמה. הערכים הנתמכים הם: 4 ו-8 |
אפשר לבחור את קובץ ה-toolchain באמצעות פרמטר ה-build CMAKE_TOOLCHAIN_FILE
.
לדוגמה, הדוגמה הבאה תגרום ליצירת קובצי makefile עבור build באמצעות ה-Cross-compiler של CodeSourcery עבור ARM/Linux:
cmake PATH_TO_SRC/deqp –DDEQP_BUILD_TYPE="Release" –DCMAKE_TOOLCHAIN_FILE=PATH_TO_SRC/delibs/cmake/toolchain-arm-cs.cmake –DARM_CC_BASE=PATH_TO_CC_DIRECTORY
קישור בזמן הריצה של ספריות GLES ו-EGL
לא צריך נקודות כניסה ל-API בבדיקה במהלך הקישור ב-Deqp. קוד הבדיקה תמיד ניגש לממשקי ה-API באמצעות מצביעי פונקציות. נקודות הכניסה יכולות ייטענו באופן דינמי בזמן הריצה או שיציאת הפלטפורמה יכולה לספק אותם זמן הקישור.
אם התמיכה ב-API מופעלת בהגדרות ה-build ובספריות הקישורים
לא צוין, ה-deqp יטען את נקודות הכניסה הנדרשות בזמן הריצה. אם
רצוי להוסיף קישור סטטי. צריך לספק את ספריות הקישורים הנדרשות ב-DEQP_<API>_LIBRARIES
של תצורת build.
ניוד של מסגרת הבדיקה
ניוד ה-deqp כולל שלושה שלבים: התאמה של ספריות ניידות בסיסית להטמיע ממשקים של שילוב פלטפורמה לבדיקה, ולהעביר את של Google.
בטבלה הבאה מפורטים מיקומים שייתכן שיחולו שינויים בניוד. כל מה שחדש סביר להניח שהם אקזוטיים.
מיקום | תיאור |
---|---|
framework/delibs/debase |
הטמעות נחוצות של קוד ספציפי למערכת הפעלה. |
framework/qphelper/qpCrashHandler.c |
אופציונלי: הטמעה למערכת ההפעלה שלכם. |
framework/qphelper/qpWatchDog.c |
הטמעה עבור מערכת ההפעלה שלך. הנוכחית מבוססת על |
framework/platform |
ניתן להטמיע יציאת פלטפורמה חדשה ו-stub של אפליקציה כפי שמתואר ב בודקים את יציאת הפלטפורמה של framework. |
ספריות ניידות בסיסית
ספריות הניידות הבסיסית כבר תומכות ב-Windows, ברוב הווריאנטים של Linux, ב-Mac OS ב-iOS וב-Android. אם יעד הבדיקה פועל באחת ממערכות ההפעלה האלה, וסביר להניח שאין צורך לגעת בספריות הבסיס של הניידות בכלל.
בדיקת יציאת הפלטפורמה של framework
ליציאת הפלטפורמה של framework לבדיקה של deqp נדרשים שני רכיבים: אפליקציה נקודת כניסה והטמעה של ממשק פלטפורמה.
נקודת הכניסה לאפליקציה אחראית ליצירת האובייקט של הפלטפורמה,
יצירת אובייקט של שורת פקודה (tcu::CommandLine
), פתיחת יומן בדיקה
(tcu::TestLog
) ואיטרציה של אפליקציית הבדיקה (tcu::App
). אם
מערכת ההפעלה המטורגטת תומכת בנקודת כניסה רגילה של main()
, ניתן להשתמש ב-tcuMain.cpp
להטמעה של נקודת הכניסה.
ה-API של פלטפורמת deqp מתואר בפירוט בקבצים הבאים.
קובץ | תיאור |
---|---|
framework/common/tcuPlatform.hpp |
סיווג בסיס לכל יציאות הפלטפורמה |
framework/opengl/gluPlatform.hpp |
ממשק פלטפורמת OpenGL |
framework/egl/egluPlatform.hpp |
ממשק פלטפורמת EGL |
framework/platform/tcuMain.cpp |
נקודת כניסה רגילה לאפליקציות |
מחלקה הבסיס לכל יציאות הפלטפורמה היא tcu::Platform
. יציאת הפלטפורמה יכולה
לתמוך בממשקים ספציפיים ל-GL-ול-EGL. צפייה
בטבלה הבאה תמצאו סקירה כללית של מה שצריך להטמיע
להריץ את הבדיקות.
מודול | ממשק |
---|---|
מודולים לבדיקת OpenGL (ES) |
ממשק פלטפורמת GL |
מודול בדיקת EGL |
ממשק פלטפורמת EGL |
הוראות מפורטות להטמעת יציאות של הפלטפורמה זמינות וניוד של כותרות עליונות.
שירות ביצוע בדיקה
כדי להשתמש בתשתית הביצוע של בדיקת ה-deqp או באופרטור שורת הפקודה,
שירות הביצוע של הבדיקות חייב להיות זמין ביעד. אפליקציית C++ ניידת
הטמעת השירות זמינה בספרייה execserver
. המיקום העצמאי
הבינארית נבנה כחלק ממודול הבדיקה של deqp
לבנות יעדים למחשב. אפשר לשנות את execserver/CMakeLists.txt
כדי להפעיל build בפלטפורמה
יעדים אחרים.
גרסת C++ של שירות ביצוע הבדיקה מקבלת שתי שורת פקודה :
-
--port=<port>
יגדיר את יציאת ה-TCP שאליה השרת יאזין. ערך ברירת המחדל הוא 50016. -
--single
יפסיק את תהליך השרת כשהלקוח יתנתק. כברירת מחדל, השרת ימשיך לפעול כדי להגיש בקשות ביצוע לבדיקה נוספות.
הרצת הבדיקות
בדף הזה מפורטות הוראות להרצת בדיקות deqp ב-Linux וב-Windows בסביבות שונות, באמצעות ארגומנטים בשורת הפקודה, ועבודה עם Android של האפליקציה.
סביבות Linux ו-Windows
כדי להתחיל, מעתיקים את הקבצים והספריות הבאים ליעד.
מודול | ספרייה | לטירגוט |
---|---|---|
שרת ביצוע | build/execserver/execserver |
<dst>/execserver |
מודול EGL | build/modules/egl/deqp-egl |
<dst>/deqp-egl |
מודול GLES2 | build/modules/gles2/deqp-gles2 |
<dst>/deqp-gles2 |
data/gles2 |
<dst>/gles2 |
|
מודול GLES3 | build/modules/gles3/deqp-gles3 |
<dst>/deqp-gles3 |
data/gles3 |
<dst>/gles3 |
|
מודול GLES3.1 | build/modules/gles31/deqp-gles31 |
<dst>/deqp-gles31 |
data/gles31 |
<dst>/gles31 |
|
מודול GLES3.2 | build/modules/gles32/deqp-gles32 |
<dst>/deqp-gles32 |
data/gles32 |
<dst>/gles32 |
אפשר לפרוס את שירות הביצוע ואת הקבצים הבינאריים לבדיקה בכל מקום ביעד מערכת קבצים; עם זאת, קבצים בינאריים של בדיקות מצפים למצוא ספריות נתונים ספריית העבודה הנוכחית. כשתהיו מוכנים, הפעילו את שירות ביצוע הבדיקה מכשיר היעד. לפרטים על הפעלת השירות, ראו בדיקה שירות ביצוע.
הארגומנטים בשורת הפקודה
בטבלה הבאה מפורטים הארגומנטים בשורת הפקודה שמשפיעים על הביצוע של כל תוכניות בדיקה.
ארגומנט | תיאור |
---|---|
--deqp-case=<casename> |
הרצת בקשות תמיכה שתואמות לדפוס נתון. יש תמיכה בתו כללי לחיפוש (*). |
--deqp-log-filename=<filename> |
כותבים את תוצאות הבדיקה בקובץ שנתתם לו את שמו. ביצוע הבדיקה השירות יגדיר את שם הקובץ בעת התחלת בדיקה. |
--deqp-stdin-caselist |
קריאת רשימת המקרים מ-stdin או מארגומנט נתון. ביצוע הבדיקה service יגדיר את הארגומנט בהתאם לבקשת הביצוע שהתקבלה. צפייה בקטע הבא כדי לקרוא תיאור של הפורמט של רשימת בקשות התמיכה. |
--deqp-test-iteration-count=<count> |
ביטול ספירת איטרציות עבור בדיקות שתומכות במספר משתנה של כמה חזרות. |
--deqp-base-seed=<seed> |
בסיס הבסיס למקרי הבדיקה שמשתמשים ברנדומיזציה. |
ארגומנטים ספציפיים ל-GLES2 ול-GLES3
בטבלה הבאה מפורטים הארגומנטים הספציפיים ל-GLES2 ול-GLES3.ארגומנט | תיאור |
---|---|
--deqp-gl-context-type=<type> |
סוג ההקשר OpenGL. סוגי ההקשר הזמינים תלויים בפלטפורמה. במצב מופעל
בפלטפורמות שתומכות ב-EGL, אפשר להשתמש בערך egl כדי לבחור
בהקשר של ה-EGL. |
--deqp-gl-config-id=<id> |
מריצים בדיקות למזהה הגדרת ה-GL שסופק. הפרשנות היא תלויות-פלטפורמה. בפלטפורמת EGL, זהו מזהה ההגדרה של EGL. |
--deqp-gl-config-name=<name> |
הרצת בדיקות של תצורת GL בעלת שם. הפרשנות היא
תלויות-פלטפורמה. עבור EGL, הפורמט הוא
rgb(a)<bits>d<bits>s<bits> לדוגמה,
של rgb888s8 יבחר את ההגדרה הראשונה שבה
למאגר הנתונים הזמני הוא RGB888 ולמאגר הנתונים הזמני של שבלונות יש 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 סטנדרטי. כי ערכות הבדיקה צומחות, והקידומות שחוזרות על עצמן עלולות להיות מסורבלות. כדי למנוע חזרות את הקידומות, צריך להשתמש בתחביר טרי (שנקרא גם עץ קידומת) שמופיע בהמשך.
{nodeName{firstChild{…},…lastChild{…}}}
לדוגמה:
{dEQP-EGL{config-list,create_context{rgb565_depth_stencil}}}
מתורגם לשני מקרי הבדיקה הבאים:
dEQP-EGL.config_list dEQP-EGL.create_context.rgb565_depth_stencil
Android
חבילת האפליקציה ל-Android מכילה את כל הרכיבים הנדרשים, כולל
שירות ביצוע הבדיקה, הקבצים הבינאריים של הבדיקה וקובצי הנתונים. פעילות הבדיקה היא
NativeActivity
שמשתמש ב-EGL (דורש Android 3.2 ואילך).
ניתן להתקין את חבילת האפליקציה באמצעות הפקודה הבאה (שם מוצג שם ה-APK בחבילת CTS של Android. איזה שם תלוי ):
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
כדי להתחיל באופן ידני את פעילות הביצוע של הבדיקה, צריך ליצור Intent של Android
שמטרגטות את android.app.NativeActivity
. הפעילויות יכולות להיות
שנמצא בחבילה com.drawelements.deqp
. חובה שבשורת הפקודה
מסופק כמחרוזת נוספת עם מפתח "cmdLine"
ב-Intent.
יומן בדיקה נכתב אל /sdcard/dEQP-log.qpa
. אם הרצת הבדיקה
לא מתחיל כרגיל, יש מידע נוסף על תוצאות ניפוי הבאגים במכשיר
יומן.
אפשר להתחיל פעילות משורת הפקודה באמצעות am
של Google. לדוגמה, כדי להריץ בדיקות dEQP-GLES2.info
בפלטפורמה
שתומך ב-NativeActivity,
, צריך להשתמש בפקודות הבאות.
adb -d shell am start -n com.drawelements.deqp/android.app.NativeActivity -e \ 'cmdLine "deqp --deqp-case=dEQP-GLES2.info.* --deqp-log-filename=/sdcard/dEQP-Log.qpa"'
ניפוי באגים ב-Android
כדי להריץ את הבדיקות במסגרת הכלי לניפוי באגים של GDB ב-Android, צריך קודם להדר ולהתקין את האפליקציות את ה-build של ניפוי הבאגים מריצים את שני הסקריפטים הבאים:
python android/scripts/build.py --native-build-type=Debug
python android/scripts/install.py
אחרי שמתקינים את גרסת ה-build של ניפוי הבאגים במכשיר, כדי להפעיל את הבדיקות בקטע GDB פועל במארח, מריצים את הפקודה הבאה:
python android/scripts/debug.py \ --deqp-commandline="--deqp-log-filename=/sdcard/TestLog.qpa --deqp-case=dEQP-GLES2.functional.*"
שורת הפקודה deqp תלויה בתרחישים לדוגמה לביצוע
הפרמטרים הנדרשים. הסקריפט מוסיף נקודת עצירה כברירת מחדל בתחילת
ביצוע deqp (tcu::App::App
).
הסקריפט debug.py
מקבל כמה ארגומנטים של שורת פקודה עבור
פעולות כמו הגדרת נקודות עצירה לניפוי באגים, חיבור gdbserver
ונתיבים לקבצים בינאריים נוספים לניפוי באגים (יש להשתמש ב-debug.py
--help
לכל הארגומנטים וההסברים). בנוסף, הסקריפט מעתיק חלק
ספריות שמוגדרות כברירת מחדל ממכשיר היעד כדי לקבל רשימות סמלים.
כדי לבצע שלבים באמצעות קוד מנהל ההתקן (למשל, כשה-GDB צריך לדעת את המיקומים
בקבצים הבינאריים עם מידע מלא על תוצאות ניפוי הבאגים), להוסיף עוד ספריות דרך
debug.py
פרמטרים בשורת הפקודה. הסקריפט הזה כותב
קובץ תצורה עבור ה-GDB, החל משורה 132 בקובץ הסקריפט. שלך
יכול לספק נתיבים נוספים לקבצים בינאריים וכו', אבל לספק פקודה נכונה
פרמטרים של שורה צריכים להספיק.
הערה: ב-Windows, הקובץ הבינארי של GDB דורש
libpython2.7.dll
. לפני שמפעילים את debug.py
, צריך להוסיף
<path-to-ndk>/prebuilt/windows/bin
למשתנה PATH.
הערה: ניפוי באגים של קוד Native לא פועל מלאי Android 4.3; לקבלת דרכים לעקוף את הבעיה, עיינו בכתובת הבאג הציבורי הזה. Android 4.4 ואילך לא מכיל את הבאג הזה.
אוטומציה של הבדיקות
אפשר לשלב מודולים של בדיקות Deqp במערכות בדיקה אוטומטיות בכמה דרכים. הגישה הטובה ביותר תלויה בתשתית הבדיקה וביעד הקיימים הסביבה.
הפלט הראשי מהרצת בדיקה הוא תמיד קובץ יומן הבדיקה, כלומר הקובץ
עם תיקון פוסט בסך .qpa
. ניתן לנתח את תוצאות הבדיקה המלאות מיומן הבדיקות. הפלט של המסוף הוא
מידע על תוצאות ניפוי באגים בלבד, וייתכן שהוא לא יהיה זמין בכל הפלטפורמות.
ניתן להפעיל קבצים בינאריים של בדיקה ישירות ממערכת אוטומציה של בדיקות. הבדיקה אפשר להפעיל בינארית למקרה ספציפי, לקבוצת בדיקה או לכל הבדיקות הזמינות. אם מתרחשת שגיאה חמורה במהלך הביצוע (כגון ממשק API מסוים שגיאות או קריסה), ביצוע הבדיקה יבוטל. לבדיקת רגרסיה, הפונקציה הגישה הטובה ביותר היא להפעיל את הקבצים הבינאריים של הבדיקה במקרים נפרדים או במבחנים קטנים מוגדרת בנפרד, כדי לקבל תוצאות חלקיות גם באירוע של כשל חמור.
ה-deqp מגיע עם כלי ביצוע לבדיקה של שורת הפקודה שאפשר להשתמש בהם בשילוב עם שירות הביצוע כדי להשיג שילוב חזק יותר. הביצוע מזהה סיום של תהליך הבדיקה וימשיך לבצע את הבדיקה בתאריך במקרה הזמין הבא. מהבדיקה המלאה נוצר קובץ יומן אחד סשן. ההתקנה הזו אידיאלית למערכות בדיקה פשוטות שלא מספקות מתקני התאוששות מאסון.
כלי ביצוע לבדיקה של שורת הפקודה
קבוצת כלי שורת הפקודה הנוכחית כוללת כלי ביצוע בדיקה מרחוק, מחולל השוואות יומנים לניתוח רגרסיה, כלי להמרת יומנים ל-CSV לבדיקה, ממיר יומן בדיקה ל-XML וממיר בדיקה ל-JUnit.
קוד המקור של הכלים האלה נמצא בספרייה executor
, והקבצים הבינאריים
שמובנית בספרייה <builddir>/executor
.
תוכנת הרצת בדיקת שורת הפקודה
הכלי לבדיקת שורת הפקודה (CLI) הוא כלי נייד של C++ להפעלת הרצת בדיקה.
במכשיר ולאסוף ממנו את היומנים שנוצרו באמצעות TCP/IP. המוציא לפועל
מתקשר עם שירות הביצוע (execserver) במכשיר היעד.
ביחד הם מספקים פונקציונליות כמו התאוששות מקריסות של תהליך הבדיקה.
בדוגמאות הבאות מוסבר איך להשתמש ב-Test Executor בשורת הפקודה
(יש להשתמש ב--help
לקבלת פרטים נוספים):
דוגמה 1: הרצת בדיקות פונקציונליות של GLES2 במכשיר Android
executor --connect=127.0.0.1 --port=50016 --binaryname= com.drawelements.deqp/android.app.NativeActivity --caselistdir=caselists --testset=dEQP-GLES2.* --out=BatchResult.qpa --cmdline="--deqp-crashhandler=enable --deqp-watchdog=enable --deqp-gl-config-name=rgba8888d24s8"
דוגמה 2: המשך של בדיקה חלקית של OpenGL ES 2 באופן מקומי
executor --start-server=execserver/execserver --port=50016 --binaryname=deqp-gles2 --workdir=modules/opengl --caselistdir=caselists --testset=dEQP-GLES2.* --exclude=dEQP-GLES2.performance.* --in=BatchResult.qpa --out=BatchResult.qpa
בדיקה של ייצוא והשוואה של קובצי CSV של היומנים
ה-Deqp כולל כלי להמרת יומני בדיקה (קובצי qpa
.) לקובצי CSV. קובץ ה-CSV
מכילה רשימה של מקרי בדיקה
תוצאות. הכלי יכול גם להשוות בין שתי תוצאות אצווה או יותר ולהציג רק
מקרי בדיקה שיש להם קודי סטטוס שונים בתוצאות באצווה של הקלט.
ההשוואה תדפיס גם את מספר המקרים התואמים.
הפלט בפורמט CSV שימושי מאוד להמשך עיבוד עם
או באמצעות כלי לעריכת גיליונות אלקטרוניים. גרסה נוספת של תוכן קריא לאנשים
אפשר לבחור בפורמט של טקסט פשוט באמצעות ארגומנט שורת הפקודה הבא: --format=text
דוגמה 1: ייצוא של יומן הבדיקה בפורמט CSV
testlog-to-csv --value=code BatchResult.qpa > Result_statuscodes.csv
testlog-to-csv --value=details BatchResult.qpa > Result_statusdetails.csv
דוגמה 2: ציינו הבדלים בתוצאות הבדיקה בין שני יומני בדיקה
testlog-to-csv --mode=diff --format=text Device_v1.qpa Device_v2.qpa
הערה: הפלט של הבדיקה הוא הארגומנט --value=code
תוצאה של קוד התוצאה, למשל "Pass" או 'נכשל'. הארגומנט --value=details
בוחר עוד
הסבר על התוצאה או הערך המספרי שמתקבל מבדיקה של ביצועים, יכולות או דיוק.
ייצוא ה-XML של היומן לבדיקה
אפשר להמיר קובצי יומן בדיקה למסמכי XML חוקיים באמצעות testlog-to-xml
של Google. יש תמיכה בשני מצבי פלט:
- מצב מסמכים נפרדים, שבו כל תרחיש בדיקה והסיכום של
caselist.xml
המסמכים נכתבים לספריית יעד - במצב קובץ יחיד, שבו כל התוצאות בקובץ
.qpa
נכתבות למסמך XML אחד.
ניתן להציג את קובצי יומן הבדיקה שיוצאו בדפדפן באמצעות גיליון סגנונות XML.
סופקו מסמכים לדוגמה של גיליון סגנונות (testlog.xsl
ו-testlog.css
)
בספרייה doc/testlog-stylesheet
. כדי לעבד את קובצי היומן בדפדפן, מעתיקים את
שני קבצים של גיליונות סגנונות אותה ספרייה שבה נמצאים מסמכי ה-XML המיוצאים.
אם משתמשים ב-Google Chrome, חובה לגשת לקבצים ב-HTTP בתור Chrome
מגביל את הגישה לקבצים באופן מקומי מטעמי אבטחה. התקנה הרגילה של Python
כולל שרת HTTP בסיסי שניתן להפעיל כדי להציג את התוכן הנוכחי
ספרייה באמצעות הפקודה python –m SimpleHTTPServer 8000
. אחרי הפעלת השרת,
פשוט להפנות את דפדפן Chrome אל http://localhost:8000
כדי להציג את יומן הבדיקה.
המרה ליומן בדיקה של JUnit
מערכות רבות לאוטומציה של בדיקות יכולות ליצור דוחות על תוצאות של הרצת בדיקה מ-JUnit הפלט. אפשר להמיר את קובצי יומן הבדיקה של deqp לפורמט הפלט של JUnit באמצעות הכלי testlog-to-junit.
הכלי תומך כרגע בתרגום של קביעת תרחיש הבדיקה בלבד. בתור JUnit יש תמיכה רק ב-'pass' ו-'fail' תוצאות מעבר, מתבצע מיפוי של תוצאת ה-deqp אל 'JUnit Pass' ותוצאות אחרות נחשבות לכשלים. ה-Deqp המקורי התוצאה של הקוד זמינה בפלט של JUnit. נתונים אחרים, כמו הודעות ביומן ותמונות של התוצאות לא נשמרות בהמרה.
שימוש בקבוצות בדיקה מיוחדות
חלק מקבוצות הבדיקה עשויות להזדקק לאפשרויות של שורת פקודה מיוחדות או לתמוך בהן, או שהן דורשות כאשר משתמשים במערכות מסוימות.
בדיקות עומסים על הקצאת זיכרון
בדיקות לחץ על הקצאת זיכרון מתרגילות בתנאים של מחסור בזיכרון על ידי הקצאת משאבים מסוימים עד שהנהג ידווח על שגיאה של חוסר בזיכרון.
בפלטפורמות מסוימות, כמו Android ורוב הווריאציות של Linux, הכללים הבאים
עלול לקרות: מערכת ההפעלה עלולה להרוג את תהליך הבדיקה במקום לאפשר
כדי לטפל בשגיאה או לספק שגיאה של שמירה על הזיכרון. על כאלה
פלטפורמות, בדיקות שנועדו לגרום לשגיאות שלא נמצאות בזיכרון מושבתות
כברירת מחדל, וצריך להפעיל אותו באמצעות הארגומנט של שורת הפקודה --deqp-test-oom=enable
.
מומלץ להריץ בדיקות כאלה באופן ידני
לבדוק אם המערכת פועלת בצורה תקינה כשיש לחץ על משאב. אבל, במודלים של
מצב, קריסה של תהליך בדיקה אמורה להתפרש כמעבר.
קבוצות בדיקה
dEQP-GLES2.stress.memory.* dEQP-GLES3.stress.memory.*
בדיקות עומסים ברינדור ממושכות
רינדור של בדיקות עומסים נועד לחשוף בעיות חוסן בתנאי שימוש ממושכים
בעומס העיבוד. כברירת מחדל הבדיקות יבצעו רק מעט חזרות, אבל
אפשר להגדיר אותם כך שיפעלו ללא הגבלת זמן באמצעות ציון של --deqp-test-iteration-count=-1
ארגומנט בשורת הפקודה. צריך להשבית את הטיימר המפקח (watchdog) לבדיקה (--deqp-watchdog=disable
)
כשמבצעים את הבדיקות האלה למשך תקופה ארוכה.
קבוצות בדיקה
dEQP-GLES2.stress.long.* dEQP-GLES3.stress.long.*