replace ::cast_dynamic() with relevant ActionManager::get_*_action() calls
[ardour.git] / tools / split_benchmark.lua
1 -- cd gtk2_ardour; ./arlua < ../tools/split_benchmark.lua
2
3 reclen = 30 -- seconds
4
5 backend = AudioEngine:set_backend("None (Dummy)", "", "")
6 backend:set_device_name ("Uniform White Noise")
7
8 os.execute('rm -rf /tmp/luabench')
9 s = create_session ("/tmp/luabench", "luabench", 48000)
10 assert (s)
11
12 s:new_audio_track (1, 2, nil, 16, "",  ARDOUR.PresentationInfo.max_order, ARDOUR.TrackMode.Normal)
13
14 for t in s:get_tracks():iter() do
15         t:rec_enable_control():set_value(1, PBD.GroupControlDisposition.UseGroup)
16 end
17
18 ARDOUR.LuaAPI.usleep (100000)
19
20 s:goto_start()
21 s:maybe_enable_record()
22
23 s:request_transport_speed(1.0, true, 4)
24 ARDOUR.LuaAPI.usleep (1000000 * reclen)
25 s:request_transport_speed(0.0, false, 4)
26
27 for t in s:get_tracks():iter() do
28         t:rec_enable_control():set_value(0, PBD.GroupControlDisposition.UseGroup)
29 end
30
31 ARDOUR.LuaAPI.usleep (100000)
32
33 s:goto_start()
34 s:save_state("")
35
36 function split_at (pos)
37         local add_undo = false -- keep track if something has changed
38         Session:begin_reversible_command ("Auto Region Split")
39         for route in Session:get_tracks():iter() do
40                 local playlist = route:to_track():playlist ()
41                 playlist:to_stateful ():clear_changes ()
42                 for region in playlist:regions_at (pos):iter () do
43                         playlist:split_region (region, ARDOUR.MusicSample (pos, 0))
44                 end
45                 if not Session:add_stateful_diff_command (playlist:to_statefuldestructible ()):empty () then
46                         add_undo = true
47                 end
48         end
49         if add_undo then
50                 Session:commit_reversible_command (nil)
51         else
52                 Session:abort_reversible_command ()
53         end
54 end
55
56 function count_regions ()
57         local total = 0
58         for route in Session:get_tracks():iter() do
59                 total = total + route:to_track():playlist():region_list():size()
60         end
61         return total
62 end
63
64 stepsize = Session:samples_per_timecode_frame()
65 fps = Session:nominal_sample_rate () / stepsize
66 n_steps = 10
67 cnt = reclen * fps / n_steps
68
69 for x = 2, cnt do
70         local playhead = Session:transport_sample ()
71
72         local t_start = ARDOUR.LuaAPI.monotonic_time ()
73         for i = 1, n_steps do
74                 split_at (playhead + stepsize * i)
75         end
76         local t_end = ARDOUR.LuaAPI.monotonic_time ()
77
78         Session:request_locate((playhead + stepsize * n_steps), false, 5)
79         print (count_regions (), (t_end - t_start) / 1000 / n_steps)
80         collectgarbage ();
81         ARDOUR.LuaAPI.usleep(500000)
82 end
83
84 s:save_state("")
85 close_session()
86 quit()