Fix broken load-session utility and change it to load and save a session
Rename run-session-tests.sh script to load-save-session.sh and make it operate on only a single session and add a separate load-save-session-collection.sh script Add --massif option to load-save-session.sh script Rename some poorly named variables and add some documentation to the load-save-session.sh script
This commit is contained in:
parent
7f3118c8fe
commit
44f46d2b0d
18
libs/ardour/load-save-session-collection.sh
Executable file
18
libs/ardour/load-save-session-collection.sh
Executable file
@ -0,0 +1,18 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
#
|
||||||
|
# This script will run the load-save-session.sh script over each session in a
|
||||||
|
# directory containing session directories.
|
||||||
|
#
|
||||||
|
# This script only supports the default option of the load-save-session.sh
|
||||||
|
# script, so no valgind or gdb options as it isn't useful on more than a single
|
||||||
|
# session at a time, use load-save-session.sh directly for that.
|
||||||
|
|
||||||
|
DIR_PATH=$1
|
||||||
|
if [ "$DIR_PATH" == "" ]; then
|
||||||
|
echo "Syntax: load-save-session-collection.sh <session collection dir>"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
for SESSION_DIR in `find $DIR_PATH -mindepth 1 -maxdepth 1 -type d`; do
|
||||||
|
./load-save-session.sh $SESSION_DIR
|
||||||
|
done
|
48
libs/ardour/load-save-session.sh
Executable file
48
libs/ardour/load-save-session.sh
Executable file
@ -0,0 +1,48 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
#
|
||||||
|
# Run load-save-session utility program on an existing session, as the session
|
||||||
|
# may be modified I would not use this utility on a session that you care
|
||||||
|
# about.
|
||||||
|
#
|
||||||
|
# The utility outputs some basic timing information and can be used to look at
|
||||||
|
# changes in the Session file resulting from the save if for instance the
|
||||||
|
# session is contained in a git repository.
|
||||||
|
#
|
||||||
|
|
||||||
|
TOP=`dirname "$0"`/../..
|
||||||
|
. $TOP/build/gtk2_ardour/ardev_common_waf.sh
|
||||||
|
ARDOUR_LIBS_DIR=$TOP/build/libs/ardour
|
||||||
|
PROGRAM_NAME=load-save-session
|
||||||
|
|
||||||
|
if [ ! -f './tempo.cc' ];
|
||||||
|
then echo "This script must be run from within the libs/ardour directory";
|
||||||
|
exit 1;
|
||||||
|
fi
|
||||||
|
|
||||||
|
OPTION=""
|
||||||
|
if [ "$1" == "--debug" -o "$1" == "--valgrind" -o "$1" == "--massif" ]; then
|
||||||
|
OPTION=$1
|
||||||
|
shift 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
DIR_PATH=$1
|
||||||
|
if [ "$DIR_PATH" == "" ]; then
|
||||||
|
echo "Syntax: load-save-session.sh <session dir>"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
NAME=`basename $DIR_PATH`
|
||||||
|
|
||||||
|
if [ "$OPTION" == "--debug" ]; then
|
||||||
|
gdb --args $ARDOUR_LIBS_DIR/$PROGRAM_NAME $DIR_PATH $NAME
|
||||||
|
elif [ "$OPTION" == "--valgrind" ]; then
|
||||||
|
MEMCHECK_OPTIONS="--leak-check=full"
|
||||||
|
valgrind $MEMCHECK_OPTIONS \
|
||||||
|
$ARDOUR_LIBS_DIR/$PROGRAM_NAME $DIR_PATH $NAME
|
||||||
|
elif [ "$OPTION" == "--massif" ]; then
|
||||||
|
MASSIF_OPTIONS="--time-unit=ms --massif-out-file=massif.out.$NAME"
|
||||||
|
valgrind --tool=massif $MASSIF_OPTIONS \
|
||||||
|
$ARDOUR_LIBS_DIR/$PROGRAM_NAME $DIR_PATH $NAME
|
||||||
|
else
|
||||||
|
$ARDOUR_LIBS_DIR/$PROGRAM_NAME $DIR_PATH $NAME
|
||||||
|
fi
|
@ -1,35 +0,0 @@
|
|||||||
#!/bin/bash
|
|
||||||
#
|
|
||||||
# Run simple session load tester over a corpus of sessions.
|
|
||||||
#
|
|
||||||
|
|
||||||
if [ ! -f './tempo.cc' ]; then
|
|
||||||
echo "This script must be run from within the libs/ardour directory";
|
|
||||||
exit 1;
|
|
||||||
fi
|
|
||||||
|
|
||||||
. test-env.sh
|
|
||||||
|
|
||||||
f=""
|
|
||||||
if [ "$1" == "--debug" -o "$1" == "--valgrind" ]; then
|
|
||||||
f=$1
|
|
||||||
shift 1
|
|
||||||
fi
|
|
||||||
|
|
||||||
d=$1
|
|
||||||
if [ "$d" == "" ]; then
|
|
||||||
echo "Syntax: run-session-tests.sh <corpus>"
|
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
|
|
||||||
for s in `find $d -mindepth 1 -maxdepth 1 -type d`; do
|
|
||||||
n=`basename $s`
|
|
||||||
if [ "$f" == "--debug" ]; then
|
|
||||||
gdb --args ./libs/ardour/load-session $s $n
|
|
||||||
elif [ "$f" == "--valgrind" ]; then
|
|
||||||
valgrind ./libs/ardour/load-session $s $n
|
|
||||||
else
|
|
||||||
./libs/ardour/load-session $s $n
|
|
||||||
fi
|
|
||||||
done
|
|
||||||
|
|
121
libs/ardour/test/load_save_session.cc
Normal file
121
libs/ardour/test/load_save_session.cc
Normal file
@ -0,0 +1,121 @@
|
|||||||
|
#include "test_util.h"
|
||||||
|
|
||||||
|
#include <iostream>
|
||||||
|
#include <cstdlib>
|
||||||
|
|
||||||
|
#include <glib.h>
|
||||||
|
|
||||||
|
#include "pbd/failed_constructor.h"
|
||||||
|
#include "pbd/timing.h"
|
||||||
|
|
||||||
|
#include "ardour/ardour.h"
|
||||||
|
#include "ardour/audioengine.h"
|
||||||
|
#include "ardour/session.h"
|
||||||
|
|
||||||
|
#include "test_ui.h"
|
||||||
|
|
||||||
|
using namespace std;
|
||||||
|
using namespace ARDOUR;
|
||||||
|
|
||||||
|
static const char* localedir = LOCALEDIR;
|
||||||
|
|
||||||
|
static const int sleep_seconds = 2;
|
||||||
|
|
||||||
|
static
|
||||||
|
void
|
||||||
|
pause_for_effect()
|
||||||
|
{
|
||||||
|
// It may be useful to pause to make it easier to see what is happening in a
|
||||||
|
// visual tool like massif visualizer
|
||||||
|
|
||||||
|
std::cerr << "pausing for " << sleep_seconds << " seconds" << std::endl;
|
||||||
|
|
||||||
|
g_usleep(sleep_seconds*1000000);
|
||||||
|
}
|
||||||
|
|
||||||
|
int main (int argc, char* argv[])
|
||||||
|
{
|
||||||
|
if (argc != 3) {
|
||||||
|
cerr << "Syntax: " << argv[0] << " <dir> <snapshot-name>\n";
|
||||||
|
exit (EXIT_FAILURE);
|
||||||
|
}
|
||||||
|
|
||||||
|
std::cerr << "ARDOUR::init" << std::endl;
|
||||||
|
|
||||||
|
PBD::Timing ardour_init_timing;
|
||||||
|
|
||||||
|
ARDOUR::init (false, true, localedir);
|
||||||
|
ardour_init_timing.update();
|
||||||
|
|
||||||
|
TestUI* test_ui = new TestUI();
|
||||||
|
|
||||||
|
std::cerr << "ARDOUR::init time : " << ardour_init_timing.elapsed()
|
||||||
|
<< " usecs" << std::endl;
|
||||||
|
|
||||||
|
std::cerr << "Creating Dummy backend" << std::endl;
|
||||||
|
|
||||||
|
create_and_start_dummy_backend ();
|
||||||
|
|
||||||
|
std::cerr << "Loading session: " << argv[2] << std::endl;
|
||||||
|
|
||||||
|
PBD::Timing load_session_timing;
|
||||||
|
|
||||||
|
Session* s = 0;
|
||||||
|
|
||||||
|
try {
|
||||||
|
s = load_session (argv[1], argv[2]);
|
||||||
|
} catch (failed_constructor& e) {
|
||||||
|
cerr << "failed_constructor: " << e.what() << "\n";
|
||||||
|
exit (EXIT_FAILURE);
|
||||||
|
} catch (AudioEngine::PortRegistrationFailure& e) {
|
||||||
|
cerr << "PortRegistrationFailure: " << e.what() << "\n";
|
||||||
|
exit (EXIT_FAILURE);
|
||||||
|
} catch (exception& e) {
|
||||||
|
cerr << "exception: " << e.what() << "\n";
|
||||||
|
exit (EXIT_FAILURE);
|
||||||
|
} catch (...) {
|
||||||
|
cerr << "unknown exception.\n";
|
||||||
|
exit (EXIT_FAILURE);
|
||||||
|
}
|
||||||
|
|
||||||
|
load_session_timing.update();
|
||||||
|
|
||||||
|
std::cerr << "Loading session time : " << load_session_timing.elapsed()
|
||||||
|
<< " usecs" << std::endl;
|
||||||
|
|
||||||
|
PBD::Timing save_session_timing;
|
||||||
|
|
||||||
|
pause_for_effect ();
|
||||||
|
|
||||||
|
std::cerr << "Saving session: " << argv[2] << std::endl;
|
||||||
|
|
||||||
|
s->save_state("");
|
||||||
|
|
||||||
|
save_session_timing.update();
|
||||||
|
|
||||||
|
std::cerr << "Saving session time : " << save_session_timing.elapsed()
|
||||||
|
<< " usecs" << std::endl;
|
||||||
|
|
||||||
|
std::cerr << "AudioEngine::remove_session" << std::endl;
|
||||||
|
|
||||||
|
AudioEngine::instance()->remove_session ();
|
||||||
|
|
||||||
|
PBD::Timing destroy_session_timing;
|
||||||
|
|
||||||
|
delete s;
|
||||||
|
|
||||||
|
destroy_session_timing.update();
|
||||||
|
|
||||||
|
std::cerr << "Destroy session time : " << destroy_session_timing.elapsed()
|
||||||
|
<< " usecs" << std::endl;
|
||||||
|
|
||||||
|
AudioEngine::instance()->stop ();
|
||||||
|
|
||||||
|
AudioEngine::destroy ();
|
||||||
|
|
||||||
|
delete test_ui;
|
||||||
|
|
||||||
|
ARDOUR::cleanup ();
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
@ -1,48 +0,0 @@
|
|||||||
#include "test_util.h"
|
|
||||||
#include "pbd/failed_constructor.h"
|
|
||||||
#include "ardour/ardour.h"
|
|
||||||
#include "ardour/audioengine.h"
|
|
||||||
#include "ardour/session.h"
|
|
||||||
#include <iostream>
|
|
||||||
#include <cstdlib>
|
|
||||||
|
|
||||||
using namespace std;
|
|
||||||
using namespace ARDOUR;
|
|
||||||
|
|
||||||
static const char* localedir = LOCALEDIR;
|
|
||||||
|
|
||||||
int main (int argc, char* argv[])
|
|
||||||
{
|
|
||||||
if (argc != 3) {
|
|
||||||
cerr << "Syntax: " << argv[0] << " <dir> <snapshot-name>\n";
|
|
||||||
exit (EXIT_FAILURE);
|
|
||||||
}
|
|
||||||
|
|
||||||
ARDOUR::init (false, true, localedir);
|
|
||||||
|
|
||||||
Session* s = 0;
|
|
||||||
|
|
||||||
try {
|
|
||||||
s = load_session (argv[1], argv[2]);
|
|
||||||
} catch (failed_constructor& e) {
|
|
||||||
cerr << "failed_constructor: " << e.what() << "\n";
|
|
||||||
exit (EXIT_FAILURE);
|
|
||||||
} catch (AudioEngine::PortRegistrationFailure& e) {
|
|
||||||
cerr << "PortRegistrationFailure: " << e.what() << "\n";
|
|
||||||
exit (EXIT_FAILURE);
|
|
||||||
} catch (exception& e) {
|
|
||||||
cerr << "exception: " << e.what() << "\n";
|
|
||||||
exit (EXIT_FAILURE);
|
|
||||||
} catch (...) {
|
|
||||||
cerr << "unknown exception.\n";
|
|
||||||
exit (EXIT_FAILURE);
|
|
||||||
}
|
|
||||||
|
|
||||||
AudioEngine::instance()->remove_session ();
|
|
||||||
delete s;
|
|
||||||
AudioEngine::instance()->stop ();
|
|
||||||
|
|
||||||
AudioEngine::destroy ();
|
|
||||||
|
|
||||||
return 0;
|
|
||||||
}
|
|
@ -527,23 +527,24 @@ def build(bld):
|
|||||||
|
|
||||||
create_ardour_test_program(bld, obj.includes, 'libardour-tests', 'run-tests', test_sources)
|
create_ardour_test_program(bld, obj.includes, 'libardour-tests', 'run-tests', test_sources)
|
||||||
|
|
||||||
# Tester to just load a session
|
# Utility to load and save a session
|
||||||
session_load_tester = bld(features = 'cxx cxxprogram')
|
load_save_session = bld(features = 'cxx cxxprogram')
|
||||||
session_load_tester.source = '''
|
load_save_session.source = '''
|
||||||
test/test_util.cc
|
test/test_util.cc
|
||||||
test/load_session.cc
|
test/test_ui.cc
|
||||||
|
test/load_save_session.cc
|
||||||
test/dummy_lxvst.cc
|
test/dummy_lxvst.cc
|
||||||
'''.split()
|
'''.split()
|
||||||
|
|
||||||
session_load_tester.includes = obj.includes
|
load_save_session.includes = obj.includes
|
||||||
session_load_tester.includes.append ('test')
|
load_save_session.includes.append ('test')
|
||||||
session_load_tester.uselib = ['CPPUNIT','SIGCPP','GLIBMM','GTHREAD',
|
load_save_session.uselib = ['CPPUNIT','SIGCPP','GLIBMM','GTHREAD',
|
||||||
'SAMPLERATE','XML','LRDF','COREAUDIO']
|
'SAMPLERATE','XML','LRDF','COREAUDIO']
|
||||||
session_load_tester.use = ['libpbd','libmidipp','libardour']
|
load_save_session.use = ['libpbd','libmidipp','libardour']
|
||||||
session_load_tester.name = 'libardour-session-load-tester'
|
load_save_session.name = 'libardour-load-save-session'
|
||||||
session_load_tester.target = 'load-session'
|
load_save_session.target = 'load-save-session'
|
||||||
session_load_tester.install_path = ''
|
load_save_session.install_path = ''
|
||||||
session_load_tester.defines = [
|
load_save_session.defines = [
|
||||||
'PACKAGE="libardour' + str(bld.env['MAJOR']) + 'profile"',
|
'PACKAGE="libardour' + str(bld.env['MAJOR']) + 'profile"',
|
||||||
'DATA_DIR="' + os.path.normpath(bld.env['DATADIR']) + '"',
|
'DATA_DIR="' + os.path.normpath(bld.env['DATADIR']) + '"',
|
||||||
'CONFIG_DIR="' + os.path.normpath(bld.env['SYSCONFDIR']) + '"',
|
'CONFIG_DIR="' + os.path.normpath(bld.env['SYSCONFDIR']) + '"',
|
||||||
|
Loading…
Reference in New Issue
Block a user