Tempo ramps - remove the concept of bars from tempo sections.
[ardour.git] / libs / ardour / test / load_save_session.cc
1 #include "test_util.h"
2
3 #include <iostream>
4 #include <cstdlib>
5
6 #include <glib.h>
7
8 #include "pbd/failed_constructor.h"
9 #include "pbd/timing.h"
10
11 #include "ardour/ardour.h"
12 #include "ardour/audioengine.h"
13 #include "ardour/session.h"
14
15 #include "test_ui.h"
16
17 using namespace std;
18 using namespace ARDOUR;
19
20 static const char* localedir = LOCALEDIR;
21
22 static const int sleep_seconds = 2;
23
24 static
25 void
26 pause_for_effect()
27 {
28         // It may be useful to pause to make it easier to see what is happening in a
29         // visual tool like massif visualizer
30
31         std::cerr << "pausing for " << sleep_seconds << " seconds" << std::endl;
32
33         g_usleep(sleep_seconds*1000000);
34 }
35
36 int main (int argc, char* argv[])
37 {
38         if (argc != 3) {
39                 cerr << "Syntax: " << argv[0] << " <dir> <snapshot-name>\n";
40                 exit (EXIT_FAILURE);
41         }
42
43         std::cerr << "ARDOUR::init" << std::endl;
44
45         PBD::Timing ardour_init_timing;
46
47         ARDOUR::init (false, true, localedir);
48         ardour_init_timing.update();
49
50         TestUI* test_ui = new TestUI();
51
52         std::cerr << "ARDOUR::init time : " << ardour_init_timing.elapsed()
53                   << " usecs" << std::endl;
54
55         std::cerr << "Creating Dummy backend" << std::endl;
56
57         create_and_start_dummy_backend ();
58
59         std::cerr << "Loading session: " << argv[2] << std::endl;
60
61         PBD::Timing load_session_timing;
62
63         Session* s = 0;
64
65         try {
66                 s = load_session (argv[1], argv[2]);
67         } catch (failed_constructor& e) {
68                 cerr << "failed_constructor: " << e.what() << "\n";
69                 exit (EXIT_FAILURE);
70         } catch (AudioEngine::PortRegistrationFailure& e) {
71                 cerr << "PortRegistrationFailure: " << e.what() << "\n";
72                 exit (EXIT_FAILURE);
73         } catch (exception& e) {
74                 cerr << "exception: " << e.what() << "\n";
75                 exit (EXIT_FAILURE);
76         } catch (...) {
77                 cerr << "unknown exception.\n";
78                 exit (EXIT_FAILURE);
79         }
80
81         load_session_timing.update();
82
83         std::cerr << "Loading session time : " << load_session_timing.elapsed()
84                   << " usecs" << std::endl;
85
86         PBD::Timing save_session_timing;
87
88         pause_for_effect ();
89
90         std::cerr << "Saving session: " << argv[2] << std::endl;
91
92         s->save_state("");
93
94         save_session_timing.update();
95
96         std::cerr << "Saving session time : " << save_session_timing.elapsed()
97                   << " usecs" << std::endl;
98
99         std::cerr << "AudioEngine::remove_session" << std::endl;
100
101         AudioEngine::instance()->remove_session ();
102
103         PBD::Timing destroy_session_timing;
104
105         delete s;
106
107         destroy_session_timing.update();
108
109         std::cerr << "Destroy session time : " << destroy_session_timing.elapsed()
110                   << " usecs" << std::endl;
111
112         AudioEngine::instance()->stop ();
113
114         AudioEngine::destroy ();
115
116         delete test_ui;
117
118         ARDOUR::cleanup ();
119
120         return 0;
121 }