From 44f46d2b0dd0ef0265b823d0126857ec4458345b Mon Sep 17 00:00:00 2001 From: Tim Mayberry Date: Thu, 5 Nov 2015 14:06:03 +1000 Subject: 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 --- libs/ardour/test/load_save_session.cc | 121 ++++++++++++++++++++++++++++++++++ 1 file changed, 121 insertions(+) create mode 100644 libs/ardour/test/load_save_session.cc (limited to 'libs/ardour/test/load_save_session.cc') diff --git a/libs/ardour/test/load_save_session.cc b/libs/ardour/test/load_save_session.cc new file mode 100644 index 0000000000..ab4573c883 --- /dev/null +++ b/libs/ardour/test/load_save_session.cc @@ -0,0 +1,121 @@ +#include "test_util.h" + +#include +#include + +#include + +#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] << " \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; +} -- cgit v1.2.3