| #! /bin/sh |
| # Copyright 2018 Google LLC. |
| # Use of this source code is governed by a BSD-style license that can be found in the LICENSE file. |
| |
| # If you have more than one device attached, run `adb devices -l` and then set |
| # the ANDROID_SERIAL environment variable to the correct serial number. |
| |
| APK="$1" |
| shift |
| |
| if ! [ -f "$APK" ]; then |
| cat >&2 <<- EOM |
| |
| Usage: |
| $0 SKQP_APK_FILE_PATH [OPTIONAL_TESTS_TO_RUN...] |
| |
| e.g.: |
| $0 skqp-universal-debug.apk |
| or: |
| $0 skqp-universal-debug.apk vk_hairmodes gles_gammatext gles_aarectmodes |
| |
| EOM |
| exit 1 |
| fi |
| |
| ARGS='' |
| if [ "$#" -gt 1 ]; then |
| ARGS="-e class org.skia.skqp.SkQPRunner#${1}" |
| shift |
| for arg; do |
| ARGS="${ARGS},org.skia.skqp.SkQPRunner#${arg}" |
| done |
| fi |
| |
| TDIR="$(mktemp -d "${TMPDIR:-/tmp}/skqp_report.XXXXXXXXXX")" |
| |
| filter() { |
| local re='^.*org\.skia\.skqp: output written to "\([^"]*\)".*$' |
| while IFS='' read -r line ; do |
| if printf '%s\n' "$line" | grep -q "$re"; then |
| D="$(printf '%s\n' "$line" | sed -n "s/${re}/\1/p")" |
| echo "$D" > "${TDIR}/loc" |
| fi |
| printf '%s\n' "$line" | sed 's/^[0-9-]\+ [0-9.:]\+ [0-9]\+ [0-9]\+//' |
| done |
| } |
| |
| adb install -r "$APK" || exit 2 |
| adb logcat -c |
| |
| adb logcat org.skia.skqp skia DEBUG "*:S" | tee "${TDIR}/logcat.txt" | filter & |
| LOGCAT_PID=$! |
| |
| ADBSHELL_PID='' |
| trap 'kill $LOGCAT_PID; kill $ADBSHELL_PID' INT |
| |
| adb shell am instrument $ARGS -w org.skia.skqp \ |
| > "${TDIR}/stdout.txt" \ |
| 2> "${TDIR}/stderr.txt" & |
| ADBSHELL_PID=$! |
| |
| wait $ADBSHELL_PID |
| trap - INT |
| kill $LOGCAT_PID |
| |
| printf '\nTEST OUTPUT IS IN: "%s"\n\n' "$TDIR" |
| |
| if ! [ -f "${TDIR}/loc" ]; then exit 2; fi |
| |
| ODIR="$(cat "${TDIR}/loc")/skqp_report" |
| |
| if ! adb shell "test -d '$ODIR'" ; then |
| echo 'missing output :(' |
| exit 3 |
| fi |
| |
| adb pull "${ODIR}/out.csv" "${ODIR}/report.html" "${ODIR}/images" "${TDIR}/" |
| REPORT="$TDIR/report.html" |
| grep 'f(.*;' "$REPORT" |
| echo "$REPORT" |
| case "$(uname)" in |
| Linux) |
| [ "$DISPLAY" ] && xdg-open "$REPORT" & |
| sleep 1 |
| ;; |
| Darwin) |
| open "$REPORT" & |
| ;; |
| esac |
| |