summaryrefslogtreecommitdiff
path: root/tools/performance_test/performance_test.sh
diff options
context:
space:
mode:
Diffstat (limited to 'tools/performance_test/performance_test.sh')
-rwxr-xr-xtools/performance_test/performance_test.sh129
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 "============================"