You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
292 lines
7.7 KiB
292 lines
7.7 KiB
#!/bin/bash
|
|
|
|
# Copyright 2017 The Android Open Source Project
|
|
#
|
|
# Licensed under the Apache License, Version 2.0 (the "License");
|
|
# you may not use this file except in compliance with the License.
|
|
# You may obtain a copy of the License at
|
|
#
|
|
# http://www.apache.org/licenses/LICENSE-2.0
|
|
#
|
|
# Unless required by applicable law or agreed to in writing, software
|
|
# distributed under the License is distributed on an "AS IS" BASIS,
|
|
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
# See the License for the specific language governing permissions and
|
|
# limitations under the License.
|
|
|
|
# Quiet by default
|
|
set +x
|
|
|
|
echo
|
|
echo === Vulkan Validation Layers Tests ===
|
|
echo Running test script: build-android/test_APK.sh
|
|
echo
|
|
|
|
#
|
|
# Parse parameters
|
|
#
|
|
|
|
function printUsage {
|
|
echo "Supported parameters are:"
|
|
echo " -p|--platform <platform> (optional)"
|
|
echo " -f|--filter <gtest filter list> (optional)"
|
|
echo " -s|--serial <target device serial number> (optional)"
|
|
echo " -a|--abi <target abi> (optional)"
|
|
echo
|
|
echo "i.e. ${0##*/} -p <platform> -f <test filter> -s <serial number>"
|
|
exit 1
|
|
}
|
|
|
|
if [[ $(($# % 2)) -ne 0 ]]
|
|
then
|
|
echo Parameters must be provided in pairs.
|
|
echo parameter count = $#
|
|
echo
|
|
printUsage
|
|
exit 1
|
|
fi
|
|
|
|
while [[ $# -gt 0 ]]
|
|
do
|
|
case $1 in
|
|
-p|--platform)
|
|
platform="$2"
|
|
shift 2
|
|
;;
|
|
-f|--filter)
|
|
filter="$2"
|
|
shift 2
|
|
;;
|
|
-s|--serial)
|
|
serial="$2"
|
|
shift 2
|
|
;;
|
|
-a|--abi)
|
|
abi="$2"
|
|
shift 2
|
|
;;
|
|
-*)
|
|
# unknown option
|
|
echo Unknown option: $1
|
|
echo
|
|
printUsage
|
|
exit 1
|
|
;;
|
|
esac
|
|
done
|
|
|
|
if [[ $serial ]]; then
|
|
serialFlag="-s $serial"
|
|
if [[ $(adb devices) != *"$serial"* ]]
|
|
then
|
|
echo Device not found: "${serial}"
|
|
echo
|
|
printUsage
|
|
exit 1
|
|
fi
|
|
else
|
|
echo Using device $(adb get-serialno)
|
|
fi
|
|
|
|
if [[ -z $platform ]]
|
|
then
|
|
echo No platform specified.
|
|
platform="UnspecifiedPlatform"
|
|
fi
|
|
|
|
if [[ -z $filter ]]
|
|
then
|
|
echo No filter specified, running all tests.
|
|
filter="*"
|
|
fi
|
|
|
|
if [[ $platform ]]; then echo platform = "${platform}"; fi
|
|
if [[ $filter ]]; then echo filter = "${filter}"; fi
|
|
if [[ $serial ]]; then echo serial = "${serial}"; fi
|
|
if [[ $abi ]]; then echo abi = "${abi}"; fi
|
|
|
|
set -e
|
|
|
|
echo
|
|
echo Setting up...
|
|
|
|
#
|
|
# Start up
|
|
#
|
|
|
|
# Wake up the device
|
|
adb $serialFlag shell input keyevent "KEYCODE_MENU"
|
|
adb $serialFlag shell input keyevent "KEYCODE_HOME"
|
|
|
|
# Grab our Android test mutex
|
|
# Wait for any existing test runs on the devices
|
|
|
|
# Blow away the lock if tests run too long, avoiding infinite loop
|
|
lock_seconds=1200 # Duration in seconds.
|
|
lock_end_time=$(( $(date +%s) + lock_seconds )) # Calculate end time.
|
|
|
|
until mkdir /var/tmp/VkLayerValidationTests.$serial.lock
|
|
do
|
|
sleep 5
|
|
echo "Waiting for existing Android test to complete on $serial"
|
|
|
|
if [ $(date +%s) -gt $lock_end_time ]
|
|
then
|
|
echo "Lock timeout reached: $lock_seconds seconds"
|
|
echo "Deleting /var/tmp/VkLayerValidationTests.$serial.lock"
|
|
rm -r /var/tmp/VkLayerValidationTests.$serial.lock
|
|
fi
|
|
done
|
|
|
|
# Clean up our lock on any exit condition
|
|
function finish {
|
|
rm -r /var/tmp/VkLayerValidationTests.$serial.lock
|
|
}
|
|
trap finish EXIT
|
|
|
|
# Clear the log
|
|
adb $serialFlag logcat -c
|
|
|
|
# Ensure any previous activity has stopped, otherwise it won't run tests
|
|
adb $serialFlag shell am force-stop com.example.VulkanLayerValidationTests
|
|
|
|
# Remove any existing APK that may have been installed from another host
|
|
# Disable exit on error in case the APK is not present
|
|
set +e
|
|
adb $serialFlag shell pm list packages | grep com.example.VulkanLayerValidationTests
|
|
if [ $? -eq 0 ]
|
|
then
|
|
adb $serialFlag uninstall com.example.VulkanLayerValidationTests
|
|
fi
|
|
# Re-enable exit on error
|
|
set -e
|
|
|
|
echo
|
|
echo Installing ./bin/VulkanLayerValidationTests.apk...
|
|
|
|
# Install the current build
|
|
if [[ -z $abi ]]
|
|
then
|
|
adb $serialFlag install -r bin/VulkanLayerValidationTests.apk
|
|
else
|
|
adb $serialFlag install --abi $abi -r bin/VulkanLayerValidationTests.apk
|
|
fi
|
|
|
|
echo
|
|
echo Launching tests...
|
|
|
|
# Kick off the tests with known expection list
|
|
adb $serialFlag shell am start -a android.intent.action.MAIN -c android-intent.category.LAUNCH -n com.example.VulkanLayerValidationTests/android.app.NativeActivity --es args --gtest_filter="${filter}"
|
|
|
|
#
|
|
# Scrape the log until we get pass/fail/crash
|
|
#
|
|
|
|
# The following loop will give tests 20 minutes to pass/fail/crash
|
|
seconds=1200 # Duration in seconds.
|
|
endTime=$(( $(date +%s) + seconds )) # Calculate end time.
|
|
|
|
exitCode=-1;
|
|
|
|
# Disable exit on error, we expect grep to fail multiple times in this loop
|
|
set +e
|
|
|
|
while [ $(date +%s) -lt $endTime ]; do # Loop until interval has elapsed.
|
|
|
|
# The following line is printed from android_main on success
|
|
adb $serialFlag logcat -d | grep "==== Tests PASSED ===="
|
|
if [ $? -eq 0 ]
|
|
then
|
|
echo
|
|
echo VulkanLayerValidationTests PASSED!
|
|
echo
|
|
exitCode=0
|
|
break
|
|
fi
|
|
|
|
# The following line is printed from android_main on failure
|
|
adb $serialFlag logcat -d | grep "==== Tests FAILED ===="
|
|
if [ $? -eq 0 ]
|
|
then
|
|
echo
|
|
echo VulkanLayerValidationTests FAILED!
|
|
echo
|
|
exitCode=1
|
|
break
|
|
fi
|
|
|
|
# developer.android.com recommends searching for the following string to detect native crash
|
|
adb $serialFlag logcat -d | grep "\*\*\* \*\*\* \*\*\* \*\*\* \*\*\* \*\*\* \*\*\* \*\*\* \*\*\* \*\*\* \*\*\* \*\*\* \*\*\* \*\*\* \*\*\* \*\*\*"
|
|
if [ $? -eq 0 ]
|
|
then
|
|
exitCode=2
|
|
echo
|
|
echo VulkanLayerValidationTests CRASHED!
|
|
echo
|
|
break
|
|
fi
|
|
|
|
sleep 5
|
|
|
|
done
|
|
|
|
# Re-enable exit on error
|
|
set -e
|
|
|
|
if [ $exitCode -eq -1 ]
|
|
then
|
|
echo "VulkanLayerValidationTests hasn't completed in $seconds seconds. Script exiting."
|
|
fi
|
|
|
|
#
|
|
# Cleanup
|
|
#
|
|
|
|
# Return to home screen to clear any error pop-ups
|
|
adb $serialFlag shell input keyevent "KEYCODE_HOME"
|
|
|
|
# Stop the activity
|
|
adb $serialFlag shell am force-stop com.example.VulkanLayerValidationTests
|
|
|
|
echo
|
|
echo Fetching test output and filtered logcat text...
|
|
|
|
# Avoid characters that are illegal in Windows filenames, so these
|
|
# files can be archived to a Windows host system for later reference
|
|
today=$(date +%Y%m%d-%H%M%S)
|
|
outFile="VulkanLayerValidationTests.$platform.$today.out.txt"
|
|
errFile="VulkanLayerValidationTests.$platform.$today.err.txt"
|
|
logFile="VulkanLayerValidationTests.$platform.$today.logcat.txt"
|
|
adb $serialFlag pull /sdcard/Android/data/com.example.VulkanLayerValidationTests/files/out.txt $outFile
|
|
adb $serialFlag pull /sdcard/Android/data/com.example.VulkanLayerValidationTests/files/err.txt $errFile
|
|
adb $serialFlag logcat -d | grep VulkanLayerValidationTests > $logFile
|
|
|
|
if [ -f $outFile ]; then
|
|
echo $outFile size $(wc -c < $outFile)
|
|
fi
|
|
|
|
if [ -f $errFile ]; then
|
|
echo $errFile size $(wc -c < $errFile)
|
|
fi
|
|
|
|
if [ -f $logFile ]; then
|
|
echo $logFile size $(wc -c < $logFile)
|
|
fi
|
|
|
|
if [ $exitCode -ne 0 ]
|
|
then
|
|
echo
|
|
echo VulkanLayerValidationTests result status is unsuccessful. Dumping test output file:
|
|
echo =========================================================================================
|
|
cat $outFile
|
|
echo =========================================================================================
|
|
echo
|
|
echo
|
|
echo Dumping logcat text, filtered by ''"VulkanLayerValidationTests"'':
|
|
echo =========================================================================================
|
|
cat $logFile
|
|
echo =========================================================================================
|
|
fi
|
|
|
|
exit $exitCode
|