Home | History | Annotate | Download | only in mmc_tracepoints
      1 #!/bin/bash
      2 
      3 # TO DO
      4 #   This should be re-written in python.
      5 
      6 # Complain about dereferencing unset variables
      7 set -u
      8 typeset -i STARTTIME ENDTIME DURATION START_SEC START_USEC DUR_SEC DUR_USEC
      9 
     10 if [ "$#" -ne 1 ]
     11 then
     12     echo "Usage: mmc_trace_reduce <trace_file>" >&2
     13     exit 1
     14 fi
     15 
     16 exec < "$1"
     17 
     18 SAVED_START_LINE=""
     19 
     20 while read LINE
     21 do
     22     # Skip comment lines
     23     if [ -z "${LINE###*}" ]
     24     then
     25         continue
     26     fi
     27 
     28     # Fix up lines with nuisance spaces
     29     LINE=${LINE/AsyncTask /AsyncTask-}
     30 
     31     set $LINE
     32 
     33     if [ "${5##*mmc_blk_*_}" = "start:" ]
     34     then
     35         if [ ! -z "$SAVED_START_LINE" ]
     36         then
     37             echo "Ignoring consecutive start line" >&2
     38             continue
     39         fi
     40         SAVED_START_LINE="$LINE"
     41 
     42         # Found a start line.  Extract the interesting bits
     43         TMP=${4%:}
     44         START_SEC="10#${TMP%%.*}"
     45         STARTTIME=START_SEC*1000000
     46         START_USEC="10#${TMP##*.}"
     47         STARTTIME=STARTTIME+START_USEC
     48 
     49         STARTPARMS="$6"
     50         STARTCMD=${STARTPARMS%%,addr=*}
     51         STARTCMD=${STARTCMD##*cmd=}
     52         STARTADDR=${STARTPARMS%%,size=*}
     53         STARTADDR=${STARTADDR##*addr=}
     54         STARTSIZE=${STARTPARMS##*size=}
     55 
     56     elif [ "${5##*mmc_blk_*_}" = "end:" ]
     57     then
     58         # Found an end line. Extract the interesting bits,
     59         # then make sure it matches with the saved start line,
     60         # Finally, do the math and emit a single reduced line
     61         TMP=${4%:}
     62         ENDTIME="${TMP%%.*}"
     63         ENDTIME=ENDTIME*1000000
     64         ENDTIME=ENDTIME+10#${TMP##*.}
     65 
     66         ENDPARMS="$6"
     67         ENDCMD=${ENDPARMS%%,addr=*}
     68         ENDCMD=${ENDCMD##*cmd=}
     69         ENDADDR=${ENDPARMS%%,size=*}
     70         ENDADDR=${ENDADDR##*addr=}
     71         ENDSIZE=${ENDPARMS##*size=}
     72 
     73         if [ "$ENDCMD" != "$STARTCMD" ]
     74         then
     75             echo "End cmd doesn't match start cmd, ignoring both" >&2
     76             SAVED_START_LINE=""
     77             continue
     78         fi
     79         if [ "$ENDADDR" != "$STARTADDR" ]
     80         then
     81             echo "End addr doesn't match start addr, ignoring both" >&2
     82             SAVED_START_LINE=""
     83             continue
     84         fi
     85         if [ "$ENDSIZE" != "$STARTSIZE" ]
     86         then
     87             echo "End size doesn't match start size, ignoring both" >&2
     88             SAVED_START_LINE=""
     89             continue
     90         fi
     91 
     92         # Turn the command number into a command the flash analysis tool
     93         # understands.  The tool doesn't differentiate between the different
     94         # forms erase, so just emit "discard" for all of them.  Also, ignore
     95         # the secure_trim2 and sanitize commands as the tool doesn't know
     96         # about them either.
     97         if [ "$ENDCMD" -eq 18 ]
     98         then
     99             ENDCMD="read"
    100         elif [ "$ENDCMD" -eq 25 ]
    101         then
    102             ENDCMD="write"
    103         elif [ "$ENDCMD" -eq 32 ]
    104         then
    105             ENDCMD="flush"
    106             continue
    107         elif [ "$ENDCMD" -eq 0 ]
    108         then
    109             ENDCMD="discard"
    110         elif [ "$ENDCMD" -eq 1 ]
    111         then
    112             ENDCMD="discard"
    113         elif [ "$ENDCMD" -eq 3 ]
    114         then
    115             ENDCMD="discard"
    116         elif [ "$ENDCMD" -eq 2147483648 ] # 0x80000000
    117         then
    118             ENDCMD="discard"
    119         elif [ "$ENDCMD" -eq 2147483649 ] # 0x80000001
    120         then
    121             ENDCMD="discard"
    122         elif [ "$ENDCMD" -eq 2147516416 ] # 0x80008000
    123         then
    124             # Ignore, as the analysis tool doesn't deal with this
    125             # ENDCMD="secure_trim2"
    126             SAVED_START_LINE=""
    127             continue
    128         elif [ "$ENDCMD" -eq 165 ]
    129         then
    130             # Ignore, as the analysis tool doesn't deal with this
    131             # ENDCMD="sanitize"
    132             SAVED_START_LINE=""
    133             continue
    134         else
    135             echo "Unrecognized command $ENDCMD, ignoring" >&2
    136             SAVED_START_LINE=""
    137             continue
    138         fi
    139 
    140         DURATION=ENDTIME-STARTTIME
    141         DUR_SEC=DURATION/1000000
    142         DUR_USEC=DURATION%1000000
    143 
    144         printf "$%s,%s,%s,%d.%06d,%d.%06d\n" "$ENDCMD" "$ENDADDR" "$ENDSIZE" "$START_SEC" "$START_USEC" "$DUR_SEC" "$DUR_USEC"
    145 
    146         SAVED_START_LINE=""
    147     fi
    148 
    149     # Ignore unknown lines and continue
    150 
    151 done
    152 
    153