1#!/bin/bash
2
3# Copyright 2020, The Android Open Source Project
4#
5# Licensed under the Apache License, Version 2.0 (the "License");
6# you may not use this file except in compliance with the License.
7# You may obtain a copy of the License at
8#
9#     http://www.apache.org/licenses/LICENSE-2.0
10#
11# Unless required by applicable law or agreed to in writing, software
12# distributed under the License is distributed on an "AS IS" BASIS,
13# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14# See the License for the specific language governing permissions and
15# limitations under the License.
16
17# Tails android system logs releven for crash tests
18
19show_usage_and_exit() {
20  echo "Tail logcat for NNAPI Crash Test logs, driver error logs and failures. Options:"
21  echo " -e | --show_driver_errors : to enable error log for drivers"
22  echo " -d | --driver_log_tag TAG : to use in conjunction with -e specify the LOG tags used by the target driver."
23  echo "                             To specify multiple tags just quote them and separate them with a space char."
24  echo "                             If this option is omitted, a list of known tags is used."
25  echo " -o | --save_output_to FILE : to save logcat output to the given file"
26  echo " -s DEVICE_SERIAL_NUMBER : to specify the serial number of the device to connect to"
27  echo " -h : show this message and exit"
28  exit 1
29}
30
31OPTS="$(getopt -o heo:s:d: -l show_driver_errors,save_output_to:driver_log_tag: -- "$@")"
32eval set -- "$OPTS"
33
34SHOW_DRIVERS_ERRORS=false
35OUTPUT_FILE=""
36DEVICE_ID_OPT=""
37DRIVER_LOG_TAGS=()
38while [ $# -gt 0 ] ; do
39  case "$1" in
40    -h)
41      shift
42      show_usage_and_exit
43      ;;
44    -e|--show_driver_errors)
45      SHOW_DRIVERS_ERRORS=true
46      shift
47      ;;
48    -o|--save_output_to)
49      OUTPUT_FILE="$2"
50      shift 2
51      ;;
52    -s)
53      DEVICE_ID_OPT="-s $2"
54      shift 2
55      ;;
56    -d|--driver_log_tag)
57      read -a DRIVER_LOG_TAGS <<< "$2"
58      shift 2
59      ;;
60    -- )
61      shift
62      break
63      ;;
64    * )
65      echo "Invalid argument: $1"
66      show_usage_and_exit
67      ;;
68  esac
69done
70
71CRASH_TEST_LOG_TAGS+=("NN_BENCHMARK")
72while IFS='' read -r tag; do
73  CRASH_TEST_LOG_TAGS+=("$tag");
74done <<< $(find src/com/android/nn/crashtest -name '*.java' -exec grep "TAG =" {} \; \
75  | grep -Po '(?<=")(.+)(?=")')
76
77LOG_TAG_FILTER=""
78
79# Info level from crash tests source
80for tag in "${CRASH_TEST_LOG_TAGS[@]}"; do
81  LOG_TAG_FILTER="${LOG_TAG_FILTER} ${tag}:I"
82done
83
84if [[ "$SHOW_DRIVERS_ERRORS" = true ]]; then
85  if [ ${#DRIVER_LOG_TAGS[@]} -eq 0 ]; then
86    # Qualcomm (drivers for NNAPI1.2)
87    # Google
88    # SLSI
89    DRIVER_LOG_TAGS=(\
90      "android.hardware.neuralnetworks@1.2-service"\
91      "Darwinn"\
92      "Eden"\
93    )
94  fi
95
96  # Error level for listed driver processes
97  for tag in "${DRIVER_LOG_TAGS[@]}"; do
98    LOG_TAG_FILTER="${LOG_TAG_FILTER} ${tag}:E"
99  done
100elif [ ${#DRIVER_LOG_TAGS[@]} -ne 0 ]; then
101  show_usage_and_exit
102fi
103
104# Fatal message for everything else to show crash dumps
105LOG_TAG_FILTER="${LOG_TAG_FILTER} *:F"
106
107export ANDROID_LOG_TAGS="${LOG_TAG_FILTER}"
108
109if [[ -z "$OUTPUT_FILE" ]]; then
110  adb ${DEVICE_ID_OPT:+"$DEVICE_ID_OPT"} logcat -v color
111else
112  adb ${DEVICE_ID_OPT:+"$DEVICE_ID_OPT"} logcat -v color | tee "$OUTPUT_FILE"
113fi
114
115
116
117