diff options
Diffstat (limited to 'tools/performance_test/performance_test.sh')
-rwxr-xr-x | tools/performance_test/performance_test.sh | 129 |
1 files changed, 129 insertions, 0 deletions
diff --git a/tools/performance_test/performance_test.sh b/tools/performance_test/performance_test.sh new file mode 100755 index 0000000..eb6d45d --- /dev/null +++ b/tools/performance_test/performance_test.sh @@ -0,0 +1,129 @@ +#!/bin/bash +# USAGE: ./performance_test <kit> <midimap> <midifile> +# This script needs JACK to be started or just starts it itself if it isn't. + +test_dir=$(dirname $0) +cd $test_dir + +dg_path="../../drumgizmo" +sample_interval=.5 +cpu_plot_file="cpu_plot" +ram_plot_file="ram_plot" +cpu_data_file="cpu_data.dat" +ram_data_file="ram_data.dat" +dg_log_file="drumgizmo.log" + +# check for right number of parameters +if [[ $# != 3 ]] +then + echo "ERROR: You didn't supply the right number of parameters." + echo "USAGE: ./performance_test <kit> <midimap> <midifile>" + echo "Exiting..." + exit +fi + +kit="$1" +midimap="$2" +midifile="$3" + +# function to check for dependencies +function check_for_deps +{ + for dep in "$@" + do + if ! command -v $dep >/dev/null 2>&1 + then + echo "ERROR: Cannot find ${dep}. Maybe it isn't installed?" + echo "Exiting..." + exit + fi + done +} + +# check for drumgizmo +if ! [ -e $dg_path/drumgizmo ] +then + echo "ERROR: The drumgizmo binary doesn't exist. Maybe you forgot to compile?" + echo "Exiting..." + exit +fi + +# check for dependencies +check_for_deps gnuplot top awk + +# check for the existence of the passed files +if ! [ -e "$1" ] || ! [ -e "$2" ] || ! [ -e "$3" ] +then + echo "ERROR: One of the files (kit/midimap/midfile) doesn't exist." + echo "Exiting..." + exit +fi + +echo "============================" +echo "Starting the performace test" +echo "============================" +echo + +# initial data values +cpu_data="" +ram_data="" +avg_cpu_usage="" +time_elapsed=0 + +# log ram and cpu usage of process +function logData +{ + pid=$1 + + top_output="$(top -b -n 1 -p $pid | grep "^[ ]*$pid")" + top_arr=($top_output) + + cpu_usage="${top_arr[6]}" + ram_usage="${top_arr[7]}" + + cpu_data="${cpu_data}${time_elapsed} ${cpu_usage}\n" + ram_data="${ram_data}${time_elapsed} ${ram_usage}\n" + + avg_cpu_usage_candidate="$(ps -p $pid -o %cpu | grep "^[ ]*[0-9]*\.[0-9]*")" + # to make sure the process was still running when we executed the last command + if [ avg_cpu_usage_candidate != "" ]; then avg_cpu_usage=$avg_cpu_usage_candidate; fi + + # hack to allow for float addition in the bash + time_elapsed="$(awk "BEGIN {print $time_elapsed+$sample_interval; exit}")" +} + +# gnuplot ram and cpu usage over time +function plotData +{ + echo -e "$cpu_data" > $cpu_data_file + echo -e "$ram_data" > $ram_data_file + gnuplot performance_test.gnuplot > /dev/null 2>&1 +} + +# start dg +echo "The terminal output of drumgizmo is routed to ${dg_log_file}" +$dg_path/./drumgizmo -i midifile -I file="$midifile",midimap="$midimap" -o jackaudio "$kit" > $dg_log_file 2>&1 & +pid=$! + +# collect data while dg is running +echo "Collecting the data now. That might take a while..." +while ps -p $pid > /dev/null +do + logData $pid + sleep $sample_interval +done + +# plot data +plotData + +echo +echo "-------------------------------------------------------------------" +echo "The average CPU usage was: ${avg_cpu_usage}%" +echo "See the data files $cpu_data_file and $ram_data_file for details." +echo "They are nicely plotted in cpu_data.png and ram_data.png." +echo "-------------------------------------------------------------------" +echo + +echo "============================" +echo "Finished the performace test" +echo "============================" |