101e04c3fSmrg#!/usr/bin/env bash 2af69d88dSmrg########################################################################## 3af69d88dSmrg# 4af69d88dSmrg# Copyright 2011 Jose Fonseca 5af69d88dSmrg# All Rights Reserved. 6af69d88dSmrg# 7af69d88dSmrg# Permission is hereby granted, free of charge, to any person obtaining a copy 8af69d88dSmrg# of this software and associated documentation files (the "Software"), to deal 9af69d88dSmrg# in the Software without restriction, including without limitation the rights 10af69d88dSmrg# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 11af69d88dSmrg# copies of the Software, and to permit persons to whom the Software is 12af69d88dSmrg# furnished to do so, subject to the following conditions: 13af69d88dSmrg# 14af69d88dSmrg# The above copyright notice and this permission notice shall be included in 15af69d88dSmrg# all copies or substantial portions of the Software. 16af69d88dSmrg# 17af69d88dSmrg# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 18af69d88dSmrg# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 19af69d88dSmrg# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 20af69d88dSmrg# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 21af69d88dSmrg# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 22af69d88dSmrg# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 23af69d88dSmrg# THE SOFTWARE. 24af69d88dSmrg# 25af69d88dSmrg##########################################################################/ 26af69d88dSmrg 27af69d88dSmrgset -e 28af69d88dSmrg 297ec681f3SmrgPROGNAME="$(basename "$0")" 307ec681f3SmrgTRACEDUMP="${TRACEDUMP:-$(dirname "$0")/dump.py}" 317ec681f3Smrg 327ec681f3Smrg 337ec681f3Smrg 347ec681f3Smrg### 357ec681f3Smrg### Helper functions 367ec681f3Smrg### 377ec681f3Smrgfatal() 387ec681f3Smrg{ 397ec681f3Smrg echo "ERROR: $1" 407ec681f3Smrg exit 1 417ec681f3Smrg} 427ec681f3Smrg 437ec681f3Smrg 447ec681f3Smrgprint_version() 457ec681f3Smrg{ 467ec681f3Smrg echo "TraceDiff - Compare two Gallium trace files" 477ec681f3Smrg echo "(C) Copyright 2011 Jose Fonseca" 487ec681f3Smrg echo "" 49af69d88dSmrg} 50af69d88dSmrg 51af69d88dSmrg 527ec681f3Smrgprint_help() 537ec681f3Smrg{ 547ec681f3Smrg echo "Usage: ${PROGNAME} [options] <tracefile1> <tracefile2>" 557ec681f3Smrg echo "" 567ec681f3Smrg echo " -h, --help display this help and exit" 577ec681f3Smrg echo " -V, --version output version information and exit" 587ec681f3Smrg echo "" 597ec681f3Smrg echo " -m, --meld use Meld for diffing (default is sdiff)" 607ec681f3Smrg echo "" 617ec681f3Smrg echo "dump.py options:" 627ec681f3Smrg echo " -N, --named generate symbolic names for raw pointer values" 637ec681f3Smrg echo " -M, --method-only output only call names without arguments" 647ec681f3Smrg echo "" 657ec681f3Smrg echo "sdiff options:" 667ec681f3Smrg echo " -d, --minimal try hard to find a smaller set of changes" 677ec681f3Smrg echo "" 687ec681f3Smrg} 697ec681f3Smrg 707ec681f3Smrg 717ec681f3Smrgdo_cleanup() 727ec681f3Smrg{ 737ec681f3Smrg if test -d "$TEMPDIR"; then 747ec681f3Smrg rm -rf "$TEMPDIR" 757ec681f3Smrg fi 767ec681f3Smrg} 777ec681f3Smrg 787ec681f3Smrg 797ec681f3Smrgstrip_dump() 807ec681f3Smrg{ 817ec681f3Smrg INFILE="$1" 827ec681f3Smrg OUTFILE="$2" 837ec681f3Smrg 847ec681f3Smrg python3 "$TRACEDUMP" --plain --suppress \ 857ec681f3Smrg "${DUMP_ARGS[@]}" "$INFILE" \ 867ec681f3Smrg | sed \ 877ec681f3Smrg -e '/pipe_screen::is_format_supported/d' \ 887ec681f3Smrg -e '/pipe_screen::get_\(shader_\)\?paramf\?/d' \ 897ec681f3Smrg -e 's/\r$//g' \ 907ec681f3Smrg -e 's/, /,\n\t/g' \ 917ec681f3Smrg -e 's/) = /)\n\t= /' \ 927ec681f3Smrg > "$OUTFILE" 937ec681f3Smrg} 947ec681f3Smrg 957ec681f3Smrg 967ec681f3Smrg### 977ec681f3Smrg### Main code starts 987ec681f3Smrg### 997ec681f3Smrgtrap do_cleanup HUP INT TERM 1007ec681f3SmrgDUMP_ARGS=() 1017ec681f3SmrgSDIFF_ARGS=() 1027ec681f3SmrgUSE_MELD=0 1037ec681f3Smrg 1047ec681f3Smrgwhile test -n "$1" 1057ec681f3Smrgdo 1067ec681f3Smrg case "$1" in 1077ec681f3Smrg --version|-V) 1087ec681f3Smrg print_version 1097ec681f3Smrg exit 0 1107ec681f3Smrg ;; 1117ec681f3Smrg --help|-h) 1127ec681f3Smrg print_version 1137ec681f3Smrg print_help 1147ec681f3Smrg exit 0 1157ec681f3Smrg ;; 1167ec681f3Smrg -N|--named|-M|--method-only) 1177ec681f3Smrg DUMP_ARGS+=("$1") 1187ec681f3Smrg shift 1197ec681f3Smrg ;; 1207ec681f3Smrg -d|--minimal) 1217ec681f3Smrg SDIFF_ARGS+=("$1") 1227ec681f3Smrg shift 1237ec681f3Smrg ;; 1247ec681f3Smrg -m|--meld) 1257ec681f3Smrg USE_MELD=1 1267ec681f3Smrg shift 1277ec681f3Smrg ;; 1287ec681f3Smrg *) 1297ec681f3Smrg if test "x$INFILE1" = "x"; then 1307ec681f3Smrg INFILE1="$1"; 1317ec681f3Smrg elif test "x$INFILE2" = "x"; then 1327ec681f3Smrg INFILE2="$1"; 1337ec681f3Smrg else 1347ec681f3Smrg fatal "Too many input filenames specified." 1357ec681f3Smrg fi 1367ec681f3Smrg shift 1377ec681f3Smrg ;; 1387ec681f3Smrg esac 1397ec681f3Smrgdone 1407ec681f3Smrg 1417ec681f3Smrg 1427ec681f3Smrgif test "x$INFILE1" = "x" -o "x$INFILE2" = "x"; then 1437ec681f3Smrg print_help 1447ec681f3Smrg fatal "Not enough input file(s) specified!" 1457ec681f3Smrgfi 1467ec681f3Smrg 1477ec681f3Smrg 1487ec681f3SmrgTEMPDIR="$(mktemp -d)" 1497ec681f3SmrgTEMP1="${TEMPDIR}/1" 1507ec681f3SmrgTEMP2="${TEMPDIR}/2" 151af69d88dSmrg 1527ec681f3Smrgif test $USE_MELD -ne 0; then 1537ec681f3Smrg strip_dump "$INFILE1" "$TEMP1" "$@" || fatal "Could not dump '${INFILE1}." 1547ec681f3Smrg strip_dump "$INFILE2" "$TEMP2" "$@" || fatal "Could not dump '${INFILE2}." 1557ec681f3Smrg meld "$TEMP1" "$TEMP2" 1567ec681f3Smrgelse 1577ec681f3Smrg mkfifo "$TEMP1" || fatal "Could not create fifo 1" 1587ec681f3Smrg mkfifo "$TEMP2" || fatal "Could not create fifo 2" 159af69d88dSmrg 1607ec681f3Smrg strip_dump "$INFILE1" "$TEMP1" "$@" & 1617ec681f3Smrg strip_dump "$INFILE2" "$TEMP2" "$@" & 162af69d88dSmrg 1637ec681f3Smrg sdiff \ 1647ec681f3Smrg --left-column \ 1657ec681f3Smrg --width="$(tput cols)" \ 1667ec681f3Smrg --speed-large-files \ 1677ec681f3Smrg "${SDIFF_ARGS[@]}" \ 1687ec681f3Smrg "$TEMP1" "$TEMP2" \ 1697ec681f3Smrg | less 1707ec681f3Smrgfi 171