#!/bin/bash # USAGE: ./performance_test # 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" # check for right number of parameters if [[ $# != 3 ]] then echo "ERROR: You didn't supply the right number of parameters." echo "USAGE: ./performance_test " echo "Exiting..." exit fi kit="$1" midimap="$2" midifile="$3" # function to check for dependencies function check_for_dep { if ! command -v $1 >/dev/null 2>&1 then echo "ERROR: Cannot find $1. Maybe it isn't installed?" echo "Exiting..." exit fi } # 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_dep gnuplot check_for_dep top # 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 "============================" # initial data values cpu_data="" ram_data="" data_count=0 avg_cpu_usage=0 # log ram and cpu usage of process function logData { pid=$1 top_output="$(top -b -n 1 -p $pid | tail -n 1)" top_arr=($top_output) cpu_usage="${top_arr[6]}" ram_usage="${top_arr[7]}" cpu_data="${cpu_data}${data_count} ${cpu_usage}\n" ram_data="${ram_data}${data_count} ${ram_usage}\n" avg_cpu_usage="$(ps -p $pid -o %cpu | tail -n 1)" data_count=$((data_count+1)) } # 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 $kit $dg_path/./drumgizmo -i midifile -I file="$midifile",midimap="$midimap" -o jackaudio "$kit" & pid=$! # collect data while dg is running 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 "============================"