#!/bin/bash # Copyright 2020, 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. # Tails android system logs releven for crash tests show_usage_and_exit() { echo "Tail logcat for NNAPI Crash Test logs, driver error logs and failures. Options:" echo " -e | --show_driver_errors : to enable error log for drivers" echo " -d | --driver_log_tag TAG : to use in conjunction with -e specify the LOG tags used by the target driver." echo " To specify multiple tags just quote them and separate them with a space char." echo " If this option is omitted, a list of known tags is used." echo " -o | --save_output_to FILE : to save logcat output to the given file" echo " -s DEVICE_SERIAL_NUMBER : to specify the serial number of the device to connect to" echo " -h : show this message and exit" exit 1 } OPTS="$(getopt -o heo:s:d: -l show_driver_errors,save_output_to:driver_log_tag: -- "$@")" eval set -- "$OPTS" SHOW_DRIVERS_ERRORS=false OUTPUT_FILE="" DEVICE_ID_OPT="" DRIVER_LOG_TAGS=() while [ $# -gt 0 ] ; do case "$1" in -h) shift show_usage_and_exit ;; -e|--show_driver_errors) SHOW_DRIVERS_ERRORS=true shift ;; -o|--save_output_to) OUTPUT_FILE="$2" shift 2 ;; -s) DEVICE_ID_OPT="-s $2" shift 2 ;; -d|--driver_log_tag) read -a DRIVER_LOG_TAGS <<< "$2" shift 2 ;; -- ) shift break ;; * ) echo "Invalid argument: $1" show_usage_and_exit ;; esac done CRASH_TEST_LOG_TAGS+=("NN_BENCHMARK") while IFS='' read -r tag; do CRASH_TEST_LOG_TAGS+=("$tag"); done <<< $(find src/com/android/nn/crashtest -name '*.java' -exec grep "TAG =" {} \; \ | grep -Po '(?<=")(.+)(?=")') LOG_TAG_FILTER="" # Info level from crash tests source for tag in "${CRASH_TEST_LOG_TAGS[@]}"; do LOG_TAG_FILTER="${LOG_TAG_FILTER} ${tag}:I" done if [[ "$SHOW_DRIVERS_ERRORS" = true ]]; then if [ ${#DRIVER_LOG_TAGS[@]} -eq 0 ]; then # Qualcomm (drivers for NNAPI1.2) # Google # SLSI DRIVER_LOG_TAGS=(\ "android.hardware.neuralnetworks@1.2-service"\ "Darwinn"\ "Eden"\ ) fi # Error level for listed driver processes for tag in "${DRIVER_LOG_TAGS[@]}"; do LOG_TAG_FILTER="${LOG_TAG_FILTER} ${tag}:E" done elif [ ${#DRIVER_LOG_TAGS[@]} -ne 0 ]; then show_usage_and_exit fi # Fatal message for everything else to show crash dumps LOG_TAG_FILTER="${LOG_TAG_FILTER} *:F" export ANDROID_LOG_TAGS="${LOG_TAG_FILTER}" if [[ -z "$OUTPUT_FILE" ]]; then adb ${DEVICE_ID_OPT:+"$DEVICE_ID_OPT"} logcat -v color else adb ${DEVICE_ID_OPT:+"$DEVICE_ID_OPT"} logcat -v color | tee "$OUTPUT_FILE" fi