10dc076565f772bb1953209fb69ea150b494aaa40robbiew#! /bin/sh
20dc076565f772bb1953209fb69ea150b494aaa40robbiew#
30dc076565f772bb1953209fb69ea150b494aaa40robbiew# (C) 2002-2003 Intel Corporation
40dc076565f772bb1953209fb69ea150b494aaa40robbiew# I�aky P�rez-Gonz�lez <inaky.perez-gonzalez@intel.com>
50dc076565f772bb1953209fb69ea150b494aaa40robbiew#
60dc076565f772bb1953209fb69ea150b494aaa40robbiew# Distributed under the FSF's GNU Public License v2 or later.
70dc076565f772bb1953209fb69ea150b494aaa40robbiew#
80dc076565f772bb1953209fb69ea150b494aaa40robbiew# Plot the output of priority inheritance tests.
90dc076565f772bb1953209fb69ea150b494aaa40robbiew
100dc076565f772bb1953209fb69ea150b494aaa40robbiew# Modifs by Sebastien Decugis:
110dc076565f772bb1953209fb69ea150b494aaa40robbiew# -> plots linespoints instead of dots
120dc076565f772bb1953209fb69ea150b494aaa40robbiew# -> legend is outside the graph.
130dc076565f772bb1953209fb69ea150b494aaa40robbiew# -> Change axis names and graph title
140dc076565f772bb1953209fb69ea150b494aaa40robbiew
150dc076565f772bb1953209fb69ea150b494aaa40robbiewFILE=$1
160dc076565f772bb1953209fb69ea150b494aaa40robbiewTMP=$(mktemp -d)
170dc076565f772bb1953209fb69ea150b494aaa40robbiew
180dc076565f772bb1953209fb69ea150b494aaa40robbiewfunction clean_up
190dc076565f772bb1953209fb69ea150b494aaa40robbiew{
200dc076565f772bb1953209fb69ea150b494aaa40robbiew    rm -rf $TMP
210dc076565f772bb1953209fb69ea150b494aaa40robbiew}
220dc076565f772bb1953209fb69ea150b494aaa40robbiew
230dc076565f772bb1953209fb69ea150b494aaa40robbiewfunction error
240dc076565f772bb1953209fb69ea150b494aaa40robbiew{
250dc076565f772bb1953209fb69ea150b494aaa40robbiew    cat 1>&2
260dc076565f772bb1953209fb69ea150b494aaa40robbiew    clean_up
270dc076565f772bb1953209fb69ea150b494aaa40robbiew    exit 1
280dc076565f772bb1953209fb69ea150b494aaa40robbiew}
290dc076565f772bb1953209fb69ea150b494aaa40robbiew
300dc076565f772bb1953209fb69ea150b494aaa40robbiewtrap clean_up EXIT
310dc076565f772bb1953209fb69ea150b494aaa40robbiew
320dc076565f772bb1953209fb69ea150b494aaa40robbiewif ! cols=$(grep "#[ ]*COLUMNS" $FILE)
330dc076565f772bb1953209fb69ea150b494aaa40robbiewthen
340dc076565f772bb1953209fb69ea150b494aaa40robbiew    error <<EOF
350dc076565f772bb1953209fb69ea150b494aaa40robbiewE: $FILE: Cannot locate the COLUMNS descriptor
360dc076565f772bb1953209fb69ea150b494aaa40robbiewEOF
370dc076565f772bb1953209fb69ea150b494aaa40robbiewfi
380dc076565f772bb1953209fb69ea150b494aaa40robbiewcols=$(echo $cols | sed 's/#//')
390dc076565f772bb1953209fb69ea150b494aaa40robbiewcolumns=$(echo $cols | awk '{print $2;}')
400dc076565f772bb1953209fb69ea150b494aaa40robbiewcount=1
410dc076565f772bb1953209fb69ea150b494aaa40robbiewwhile [ $count -le $columns ]
420dc076565f772bb1953209fb69ea150b494aaa40robbiewdo
430dc076565f772bb1953209fb69ea150b494aaa40robbiew  column[$count]=$(echo $cols | awk -vcount=$count '{print $(2 + count);}')
440dc076565f772bb1953209fb69ea150b494aaa40robbiew  if [ -z "${column[$count]}" ]
450dc076565f772bb1953209fb69ea150b494aaa40robbiew      then
460dc076565f772bb1953209fb69ea150b494aaa40robbiew      column[$count]=$count;
470dc076565f772bb1953209fb69ea150b494aaa40robbiew  fi
480dc076565f772bb1953209fb69ea150b494aaa40robbiew  count=$(($count + 1))
490dc076565f772bb1953209fb69ea150b494aaa40robbiewdone
500dc076565f772bb1953209fb69ea150b494aaa40robbiew
510dc076565f772bb1953209fb69ea150b494aaa40robbiew# Set up the plot area
520dc076565f772bb1953209fb69ea150b494aaa40robbiewcount=2
530dc076565f772bb1953209fb69ea150b494aaa40robbiewwith="with linespoints"
540dc076565f772bb1953209fb69ea150b494aaa40robbiewcat > $TMP/gnuplot.script <<EOF
550dc076565f772bb1953209fb69ea150b494aaa40robbiewset term png
560dc076565f772bb1953209fb69ea150b494aaa40robbiewset output "scalable.png"
570dc076565f772bb1953209fb69ea150b494aaa40robbiewset xlabel "${column[1]}"
580dc076565f772bb1953209fb69ea150b494aaa40robbiewset ylabel "Duration (s)"
590dc076565f772bb1953209fb69ea150b494aaa40robbiewset key below
600dc076565f772bb1953209fb69ea150b494aaa40robbiewset title "pthread_create scalability"
610dc076565f772bb1953209fb69ea150b494aaa40robbiewEOF
620dc076565f772bb1953209fb69ea150b494aaa40robbiew
630dc076565f772bb1953209fb69ea150b494aaa40robbiew# Plot the events
640dc076565f772bb1953209fb69ea150b494aaa40robbiewheight=15
650dc076565f772bb1953209fb69ea150b494aaa40robbiewgrep "#[ ]*EVENT" $FILE | sed 's/#//' > $TMP/events
660dc076565f772bb1953209fb69ea150b494aaa40robbiewevents=$(cat $TMP/events | wc -l)
670dc076565f772bb1953209fb69ea150b494aaa40robbiewif [ $events -gt 0 ]
680dc076565f772bb1953209fb69ea150b494aaa40robbiewthen
690dc076565f772bb1953209fb69ea150b494aaa40robbiew    step=$(((100 - $height) / $events))
700dc076565f772bb1953209fb69ea150b494aaa40robbiew    if [ $step -lt 5 ]
710dc076565f772bb1953209fb69ea150b494aaa40robbiew        then
720dc076565f772bb1953209fb69ea150b494aaa40robbiew        step=5;
730dc076565f772bb1953209fb69ea150b494aaa40robbiew    fi
740dc076565f772bb1953209fb69ea150b494aaa40robbiew    cat $TMP/events | while read event x text
750dc076565f772bb1953209fb69ea150b494aaa40robbiew      do
760dc076565f772bb1953209fb69ea150b494aaa40robbiew      if ! [ $event = "EVENT" ]
770dc076565f772bb1953209fb69ea150b494aaa40robbiew          then
780dc076565f772bb1953209fb69ea150b494aaa40robbiew          cat 1>&2 <<EOF
790dc076565f772bb1953209fb69ea150b494aaa40robbiewE: Unknown event type "$event", ignoring
800dc076565f772bb1953209fb69ea150b494aaa40robbiewEOF
810dc076565f772bb1953209fb69ea150b494aaa40robbiew          continue;
820dc076565f772bb1953209fb69ea150b494aaa40robbiew      fi
830dc076565f772bb1953209fb69ea150b494aaa40robbiew      height_text=$(($height + 2))
840dc076565f772bb1953209fb69ea150b494aaa40robbiew      echo "set arrow from $x, graph 0 to $x, graph 0.$height" >> $TMP/gnuplot.script
850dc076565f772bb1953209fb69ea150b494aaa40robbiew      echo "set label \"$text\" at $x, graph 0.$height_text center" >> $TMP/gnuplot.script
860dc076565f772bb1953209fb69ea150b494aaa40robbiew      height=$(($height + $step))
870dc076565f772bb1953209fb69ea150b494aaa40robbiew    done
880dc076565f772bb1953209fb69ea150b494aaa40robbiewfi
890dc076565f772bb1953209fb69ea150b494aaa40robbiew
900dc076565f772bb1953209fb69ea150b494aaa40robbiew# Plot the data
910dc076565f772bb1953209fb69ea150b494aaa40robbiewplot_cmd="plot '$FILE' using 1:2 title \"${column[$count]}\" $with"
920dc076565f772bb1953209fb69ea150b494aaa40robbiewcount=3
930dc076565f772bb1953209fb69ea150b494aaa40robbiewwhile [ $count -le $columns ]
940dc076565f772bb1953209fb69ea150b494aaa40robbiewdo
950dc076565f772bb1953209fb69ea150b494aaa40robbiew	plot_cmd=$plot_cmd",'$FILE' using 1:$count title \"${column[$count]}\" $with"
960dc076565f772bb1953209fb69ea150b494aaa40robbiew	count=$(($count + 1))
970dc076565f772bb1953209fb69ea150b494aaa40robbiewdone
980dc076565f772bb1953209fb69ea150b494aaa40robbiew
990dc076565f772bb1953209fb69ea150b494aaa40robbiewecho $plot_cmd >> $TMP/gnuplot.script
1000dc076565f772bb1953209fb69ea150b494aaa40robbiew
1010dc076565f772bb1953209fb69ea150b494aaa40robbiew#cp $TMP/gnuplot.script .
1020dc076565f772bb1953209fb69ea150b494aaa40robbiew( cat $TMP/gnuplot.script; cat ) | gnuplot
1030dc076565f772bb1953209fb69ea150b494aaa40robbiewrm -rf $TMP
104