mirror of
https://gitlab.freedesktop.org/gstreamer/gstreamer.git
synced 2024-11-28 20:51:13 +00:00
06ce912ba6
Use grep -o to grab the log message only. This makes it work with colored log files too. Prefilter the log to not catch tracer classes. Update the commandline for the script in the docs.
87 lines
2.6 KiB
Bash
Executable file
87 lines
2.6 KiB
Bash
Executable file
#!/bin/bash
|
|
# dumps a gnuplot script to stdout that plot of the given log
|
|
|
|
usage="\
|
|
Usage:$0 [--title=<title>] [--log=<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 doen'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 <<EOF
|
|
set output '$base.cpu.$format'
|
|
set xlabel "Time (ns)"
|
|
set ylabel "Per-Mille"
|
|
set grid
|
|
plot \\
|
|
'$tmp/cpu_proc.dat' using 1:2 with lines title 'avg cpu', \\
|
|
'' using 1:3 with lines title 'cur cpu'
|
|
|
|
set output '$base.thread.$format'
|
|
set xlabel "Time (ns)"
|
|
set ylabel "Per-Mille"
|
|
set grid
|
|
plot \\
|
|
EOF
|
|
for file in $tmp/cpu_thread.*.dat ; do
|
|
ct=`cat $file | wc -l`
|
|
if [ $ct -lt 100 ]; then
|
|
continue
|
|
fi
|
|
id=`echo $file | sed 's#.*cpu_thread.\([0-9]*\).dat#\1#'`
|
|
cat <<EOF
|
|
'$file' using 1:2 with lines title '$id avg cpu', \\
|
|
'' using 1:3 with lines title '$id cur cpu', \\
|
|
EOF
|
|
done
|
|
cat <<EOF
|
|
|
|
EOF
|
|
|