1*61046927SAndroid Build Coastguard Worker#!/usr/bin/env bash 2*61046927SAndroid Build Coastguard Worker########################################################################## 3*61046927SAndroid Build Coastguard Worker# 4*61046927SAndroid Build Coastguard Worker# Copyright 2011 Jose Fonseca 5*61046927SAndroid Build Coastguard Worker# All Rights Reserved. 6*61046927SAndroid Build Coastguard Worker# 7*61046927SAndroid Build Coastguard Worker# Permission is hereby granted, free of charge, to any person obtaining a copy 8*61046927SAndroid Build Coastguard Worker# of this software and associated documentation files (the "Software"), to deal 9*61046927SAndroid Build Coastguard Worker# in the Software without restriction, including without limitation the rights 10*61046927SAndroid Build Coastguard Worker# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 11*61046927SAndroid Build Coastguard Worker# copies of the Software, and to permit persons to whom the Software is 12*61046927SAndroid Build Coastguard Worker# furnished to do so, subject to the following conditions: 13*61046927SAndroid Build Coastguard Worker# 14*61046927SAndroid Build Coastguard Worker# The above copyright notice and this permission notice shall be included in 15*61046927SAndroid Build Coastguard Worker# all copies or substantial portions of the Software. 16*61046927SAndroid Build Coastguard Worker# 17*61046927SAndroid Build Coastguard Worker# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 18*61046927SAndroid Build Coastguard Worker# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 19*61046927SAndroid Build Coastguard Worker# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 20*61046927SAndroid Build Coastguard Worker# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 21*61046927SAndroid Build Coastguard Worker# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 22*61046927SAndroid Build Coastguard Worker# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 23*61046927SAndroid Build Coastguard Worker# THE SOFTWARE. 24*61046927SAndroid Build Coastguard Worker# 25*61046927SAndroid Build Coastguard Worker##########################################################################/ 26*61046927SAndroid Build Coastguard Worker 27*61046927SAndroid Build Coastguard Workerset -e 28*61046927SAndroid Build Coastguard Worker 29*61046927SAndroid Build Coastguard WorkerPROGNAME="$(basename "$0")" 30*61046927SAndroid Build Coastguard WorkerTRACEDUMP="${TRACEDUMP:-$(dirname "$0")/dump.py}" 31*61046927SAndroid Build Coastguard Worker 32*61046927SAndroid Build Coastguard Worker 33*61046927SAndroid Build Coastguard Worker 34*61046927SAndroid Build Coastguard Worker### 35*61046927SAndroid Build Coastguard Worker### Helper functions 36*61046927SAndroid Build Coastguard Worker### 37*61046927SAndroid Build Coastguard Workerfatal() 38*61046927SAndroid Build Coastguard Worker{ 39*61046927SAndroid Build Coastguard Worker echo "ERROR: $1" 40*61046927SAndroid Build Coastguard Worker exit 1 41*61046927SAndroid Build Coastguard Worker} 42*61046927SAndroid Build Coastguard Worker 43*61046927SAndroid Build Coastguard Worker 44*61046927SAndroid Build Coastguard Workerprint_version() 45*61046927SAndroid Build Coastguard Worker{ 46*61046927SAndroid Build Coastguard Worker echo "TraceDiff - Compare two Gallium trace files" 47*61046927SAndroid Build Coastguard Worker echo "(C) Copyright 2011 Jose Fonseca" 48*61046927SAndroid Build Coastguard Worker echo "" 49*61046927SAndroid Build Coastguard Worker} 50*61046927SAndroid Build Coastguard Worker 51*61046927SAndroid Build Coastguard Worker 52*61046927SAndroid Build Coastguard Workerprint_help() 53*61046927SAndroid Build Coastguard Worker{ 54*61046927SAndroid Build Coastguard Worker echo "Usage: ${PROGNAME} [options] <tracefile1> <tracefile2>" 55*61046927SAndroid Build Coastguard Worker echo "" 56*61046927SAndroid Build Coastguard Worker echo " -h, --help display this help and exit" 57*61046927SAndroid Build Coastguard Worker echo " -V, --version output version information and exit" 58*61046927SAndroid Build Coastguard Worker echo "" 59*61046927SAndroid Build Coastguard Worker echo " -m, --meld use Meld for diffing (default is sdiff)" 60*61046927SAndroid Build Coastguard Worker echo "" 61*61046927SAndroid Build Coastguard Worker echo "dump.py options:" 62*61046927SAndroid Build Coastguard Worker echo " -N, --named generate symbolic names for raw pointer values" 63*61046927SAndroid Build Coastguard Worker echo " -M, --method-only output only call names without arguments" 64*61046927SAndroid Build Coastguard Worker echo "" 65*61046927SAndroid Build Coastguard Worker echo "sdiff options:" 66*61046927SAndroid Build Coastguard Worker echo " -d, --minimal try hard to find a smaller set of changes" 67*61046927SAndroid Build Coastguard Worker echo "" 68*61046927SAndroid Build Coastguard Worker} 69*61046927SAndroid Build Coastguard Worker 70*61046927SAndroid Build Coastguard Worker 71*61046927SAndroid Build Coastguard Workerdo_cleanup() 72*61046927SAndroid Build Coastguard Worker{ 73*61046927SAndroid Build Coastguard Worker if test -d "$TEMPDIR"; then 74*61046927SAndroid Build Coastguard Worker rm -rf "$TEMPDIR" 75*61046927SAndroid Build Coastguard Worker fi 76*61046927SAndroid Build Coastguard Worker} 77*61046927SAndroid Build Coastguard Worker 78*61046927SAndroid Build Coastguard Worker 79*61046927SAndroid Build Coastguard Workerstrip_dump() 80*61046927SAndroid Build Coastguard Worker{ 81*61046927SAndroid Build Coastguard Worker INFILE="$1" 82*61046927SAndroid Build Coastguard Worker OUTFILE="$2" 83*61046927SAndroid Build Coastguard Worker 84*61046927SAndroid Build Coastguard Worker python3 "$TRACEDUMP" --plain --suppress --ignore-junk \ 85*61046927SAndroid Build Coastguard Worker "${DUMP_ARGS[@]}" "$INFILE" \ 86*61046927SAndroid Build Coastguard Worker | sed \ 87*61046927SAndroid Build Coastguard Worker -e 's/\r$//g' \ 88*61046927SAndroid Build Coastguard Worker -e 's/, /,\n\t/g' \ 89*61046927SAndroid Build Coastguard Worker -e 's/) = /)\n\t= /' \ 90*61046927SAndroid Build Coastguard Worker > "$OUTFILE" 91*61046927SAndroid Build Coastguard Worker} 92*61046927SAndroid Build Coastguard Worker 93*61046927SAndroid Build Coastguard Worker 94*61046927SAndroid Build Coastguard Worker### 95*61046927SAndroid Build Coastguard Worker### Main code starts 96*61046927SAndroid Build Coastguard Worker### 97*61046927SAndroid Build Coastguard Workertrap do_cleanup HUP INT TERM 98*61046927SAndroid Build Coastguard WorkerDUMP_ARGS=() 99*61046927SAndroid Build Coastguard WorkerSDIFF_ARGS=() 100*61046927SAndroid Build Coastguard WorkerUSE_MELD=0 101*61046927SAndroid Build Coastguard Worker 102*61046927SAndroid Build Coastguard Workerwhile test -n "$1" 103*61046927SAndroid Build Coastguard Workerdo 104*61046927SAndroid Build Coastguard Worker case "$1" in 105*61046927SAndroid Build Coastguard Worker --version|-V) 106*61046927SAndroid Build Coastguard Worker print_version 107*61046927SAndroid Build Coastguard Worker exit 0 108*61046927SAndroid Build Coastguard Worker ;; 109*61046927SAndroid Build Coastguard Worker --help|-h) 110*61046927SAndroid Build Coastguard Worker print_version 111*61046927SAndroid Build Coastguard Worker print_help 112*61046927SAndroid Build Coastguard Worker exit 0 113*61046927SAndroid Build Coastguard Worker ;; 114*61046927SAndroid Build Coastguard Worker -N|--named|-M|--method-only) 115*61046927SAndroid Build Coastguard Worker DUMP_ARGS+=("$1") 116*61046927SAndroid Build Coastguard Worker shift 117*61046927SAndroid Build Coastguard Worker ;; 118*61046927SAndroid Build Coastguard Worker -d|--minimal) 119*61046927SAndroid Build Coastguard Worker SDIFF_ARGS+=("$1") 120*61046927SAndroid Build Coastguard Worker shift 121*61046927SAndroid Build Coastguard Worker ;; 122*61046927SAndroid Build Coastguard Worker -m|--meld) 123*61046927SAndroid Build Coastguard Worker USE_MELD=1 124*61046927SAndroid Build Coastguard Worker shift 125*61046927SAndroid Build Coastguard Worker ;; 126*61046927SAndroid Build Coastguard Worker *) 127*61046927SAndroid Build Coastguard Worker if test "x$INFILE1" = "x"; then 128*61046927SAndroid Build Coastguard Worker INFILE1="$1"; 129*61046927SAndroid Build Coastguard Worker elif test "x$INFILE2" = "x"; then 130*61046927SAndroid Build Coastguard Worker INFILE2="$1"; 131*61046927SAndroid Build Coastguard Worker else 132*61046927SAndroid Build Coastguard Worker fatal "Too many input filenames specified." 133*61046927SAndroid Build Coastguard Worker fi 134*61046927SAndroid Build Coastguard Worker shift 135*61046927SAndroid Build Coastguard Worker ;; 136*61046927SAndroid Build Coastguard Worker esac 137*61046927SAndroid Build Coastguard Workerdone 138*61046927SAndroid Build Coastguard Worker 139*61046927SAndroid Build Coastguard Worker 140*61046927SAndroid Build Coastguard Workerif test "x$INFILE1" = "x" -o "x$INFILE2" = "x"; then 141*61046927SAndroid Build Coastguard Worker print_help 142*61046927SAndroid Build Coastguard Worker fatal "Not enough input file(s) specified!" 143*61046927SAndroid Build Coastguard Workerfi 144*61046927SAndroid Build Coastguard Worker 145*61046927SAndroid Build Coastguard Worker 146*61046927SAndroid Build Coastguard WorkerTEMPDIR="$(mktemp -d)" 147*61046927SAndroid Build Coastguard WorkerTEMP1="${TEMPDIR}/1" 148*61046927SAndroid Build Coastguard WorkerTEMP2="${TEMPDIR}/2" 149*61046927SAndroid Build Coastguard Worker 150*61046927SAndroid Build Coastguard Workerif test $USE_MELD -ne 0; then 151*61046927SAndroid Build Coastguard Worker strip_dump "$INFILE1" "$TEMP1" "$@" || fatal "Could not dump '${INFILE1}." 152*61046927SAndroid Build Coastguard Worker strip_dump "$INFILE2" "$TEMP2" "$@" || fatal "Could not dump '${INFILE2}." 153*61046927SAndroid Build Coastguard Worker meld "$TEMP1" "$TEMP2" 154*61046927SAndroid Build Coastguard Workerelse 155*61046927SAndroid Build Coastguard Worker mkfifo "$TEMP1" || fatal "Could not create fifo 1" 156*61046927SAndroid Build Coastguard Worker mkfifo "$TEMP2" || fatal "Could not create fifo 2" 157*61046927SAndroid Build Coastguard Worker 158*61046927SAndroid Build Coastguard Worker strip_dump "$INFILE1" "$TEMP1" "$@" & 159*61046927SAndroid Build Coastguard Worker strip_dump "$INFILE2" "$TEMP2" "$@" & 160*61046927SAndroid Build Coastguard Worker 161*61046927SAndroid Build Coastguard Worker sdiff \ 162*61046927SAndroid Build Coastguard Worker --left-column \ 163*61046927SAndroid Build Coastguard Worker --width="$(tput cols)" \ 164*61046927SAndroid Build Coastguard Worker --speed-large-files \ 165*61046927SAndroid Build Coastguard Worker "${SDIFF_ARGS[@]}" \ 166*61046927SAndroid Build Coastguard Worker "$TEMP1" "$TEMP2" \ 167*61046927SAndroid Build Coastguard Worker | less 168*61046927SAndroid Build Coastguard Workerfi 169