#!/bin/bash
# dumps a gnuplot script to stdout that plot of the given log
usage="\
Usage:$0 [--title=
] [--log=] [--format={png,pdf,ps,svg}] [--pagesize={a3,a4}]| gnuplot"
# default options
title="GStreamer trace"
log="trace.log"
format="png"
pagesize="a3"
# process commandline options
# @todo: add support for single letter options
while true; do
case "X$1" in
X--version) echo "0.1"; exit 0;;
X--help) echo "$usage"; exit 0;;
X--title=*) title=`echo $1 | sed s/.*=//`; shift;;
X--log=*) log=`echo $1 | sed s/.*=//`; shift;;
X--format=*) format=`echo $1 | sed s/.*=//`; shift;;
X--pagesize=*) pagesize=`echo $1 | sed s/.*=//`; shift;;
X--*) shift;;
X*) break;;
esac
done
tmp=`mktemp -d`
plot_width=1600
plot_height=1200
base=`basename "$log" ".log"`
# filter log
grep "TRACE" $log | grep "GST_TRACER" >$tmp/trace.log
log=$tmp/trace.log
grep -o "proc-rusage,.*" $log | cut -c14- | sed -e 's#process-id=(guint64)[0-9][0-9]*, ##' -e 's#ts=(guint64)##' -e 's#[a-z]*-cpuload=(uint)##g' -e 's#time=(guint64)##' -e 's#;##' -e 's#, # #g' >$tmp/cpu_proc.dat
grep -o "thread-rusage,.*" $log | cut -c35- | sed -e 's#ts=(guint64)##' -e 's#thread-id=(uint)##g' -e 's#[a-z]*-cpuload=(uint)##g' -e 's#time=(guint64)##' -e 's#;##' -e 's#, # #g' >$tmp/cpu_threads.dat
( cd $tmp; awk -F" " '{ print $2, $3, $4, $5 >"cpu_thread."$1".dat" }' cpu_threads.dat )
# configure output
# http://en.wikipedia.org/wiki/Paper_size
case $pagesize in
a3) page_with="29.7 cm";page_height="42.0 cm";;
a4) page_with="21.0 cm";page_height="29.7 cm";;
esac
# http://www.gnuplot.info/docs/node341.html (terminal options)
case $format in
# this doesn't like fonts
png) echo "set term png truecolor font \"Sans,7\" size $plot_width,$plot_height";;
# pdf makes a new page for each plot :/
pdf) echo "set term pdf color font \"Sans,7\" size $page_with,$page_height";;
ps) echo "set term postscript portrait color solid \"Sans\" 7 size $page_with,$page_height";;
svg) echo "set term svg size $plot_width,$plot_height font \"Sans,7\"";;
esac
cat <