1#!/bin/bash
2
3# This program is free software: you can redistribute it and/or modify
4# it under the terms of the GNU General Public License as published by
5# the Free Software Foundation; either version 2, or (at your option)
6# any later version.
7
8# This program is distributed in the hope that it will be useful,
9# but WITHOUT ANY WARRANTY; without even the implied warranty of
10# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
11# GNU General Public License for more details.
12
13# You should have received a copy of the GNU General Public License
14# along with this program; if not, write to the Free Software
15# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
16# 02110-1301, USA.
17
18# Author/Copyright(c): 2009, Thomas Renninger <trenn@suse.de>, Novell Inc.
19
20# Helper script to easily create nice plots of your cpufreq-bench results
21
22dir=`mktemp -d`
23output_file="cpufreq-bench.png"
24global_title="cpufreq-bench plot"
25picture_type="jpeg"
26file[0]=""
27
28function usage()
29{
30    echo "cpufreq-bench_plot.sh [OPTIONS] logfile [measure_title] [logfile [measure_title]] ...]"
31    echo
32    echo "Options"
33    echo "   -o output_file"
34    echo "   -t global_title"
35    echo "   -p picture_type [jpeg|gif|png|postscript|...]"
36    exit 1
37}
38
39if [ $# -eq 0 ];then
40	echo "No benchmark results file provided"
41	echo
42	usage
43fi
44
45while getopts o:t:p: name ; do
46    case $name in
47	o)
48	    output_file="$OPTARG".$picture_type
49	    ;;
50	t)
51	    global_title="$OPTARG"
52	    ;;
53	p)
54	    picture_type="$OPTARG"
55	    ;;
56        ?)
57	    usage
58	    ;;
59    esac
60done
61shift $(($OPTIND -1))
62
63plots=0
64while [ "$1" ];do
65    if [ ! -f "$1" ];then
66	echo "File $1 does not exist"
67	usage
68    fi
69    file[$plots]="$1"
70    title[$plots]="$2"
71    # echo "File: ${file[$plots]} - ${title[plots]}"
72    shift;shift
73    plots=$((plots + 1))
74done
75
76echo "set terminal $picture_type"	>> $dir/plot_script.gpl
77echo "set output \"$output_file\""	>> $dir/plot_script.gpl
78echo "set title \"$global_title\""	>> $dir/plot_script.gpl
79echo "set xlabel \"sleep/load time\""	>> $dir/plot_script.gpl
80echo "set ylabel \"Performance (%)\""	>> $dir/plot_script.gpl
81
82for((plot=0;plot<$plots;plot++));do
83
84    # Sanity check
85    ###### I am to dump to get this redirected to stderr/stdout in one awk call... #####
86    cat ${file[$plot]} |grep -v "^#" |awk '{if ($2 != $3) printf("Error in measure %d:Load time %s does not equal sleep time %s, plot will not be correct\n", $1, $2, $3); ERR=1}'
87    ###### I am to dump to get this redirected in one awk call... #####
88
89    # Parse out load time (which must be equal to sleep time for a plot), divide it by 1000
90    # to get ms and parse out the performance in percentage and write it to a temp file for plotting
91    cat ${file[$plot]} |grep -v "^#" |awk '{printf "%lu %.1f\n",$2/1000, $6}' >$dir/data_$plot
92
93    if [ $plot -eq 0 ];then
94	echo -n "plot " >> $dir/plot_script.gpl
95    fi
96    echo -n "\"$dir/data_$plot\" title \"${title[$plot]}\" with lines" >> $dir/plot_script.gpl
97    if [ $(($plot + 1)) -ne $plots ];then
98	echo -n ", " >> $dir/plot_script.gpl
99    fi
100done
101echo >> $dir/plot_script.gpl
102
103gnuplot $dir/plot_script.gpl
104rm -r $dir