From 6199d08f71649a825d8e0ebdb380dceb644fb3ec Mon Sep 17 00:00:00 2001 From: Robin Gareus Date: Wed, 8 Sep 2021 21:45:16 +0200 Subject: [PATCH] Add API to report I/O Latency --- libs/ardour/ardour/session.h | 2 ++ libs/ardour/luabindings.cc | 2 ++ libs/ardour/session.cc | 3 +++ share/scripts/_dump_latency.lua | 1 + 4 files changed, 8 insertions(+) diff --git a/libs/ardour/ardour/session.h b/libs/ardour/ardour/session.h index 1244a9ffdf..03d759f906 100644 --- a/libs/ardour/ardour/session.h +++ b/libs/ardour/ardour/session.h @@ -542,6 +542,7 @@ public: samplecnt_t worst_output_latency () const { return _worst_output_latency; } samplecnt_t worst_input_latency () const { return _worst_input_latency; } samplecnt_t worst_route_latency () const { return _worst_route_latency; } + samplecnt_t io_latency () const { return _io_latency; } samplecnt_t worst_latency_preroll () const; samplecnt_t worst_latency_preroll_buffer_size_ceil () const; @@ -1409,6 +1410,7 @@ private: samplecnt_t _worst_output_latency; samplecnt_t _worst_input_latency; samplecnt_t _worst_route_latency; + samplecnt_t _io_latency; uint32_t _send_latency_changes; bool _have_captured; samplecnt_t _capture_duration; diff --git a/libs/ardour/luabindings.cc b/libs/ardour/luabindings.cc index 9ce4d4753a..3404021515 100644 --- a/libs/ardour/luabindings.cc +++ b/libs/ardour/luabindings.cc @@ -2524,7 +2524,9 @@ LuaBindings::common (lua_State* L) .addFunction ("worst_output_latency", &Session::worst_output_latency) .addFunction ("worst_input_latency", &Session::worst_input_latency) .addFunction ("worst_route_latency", &Session::worst_route_latency) + .addFunction ("io_latency", &Session::io_latency) .addFunction ("worst_latency_preroll", &Session::worst_latency_preroll) + .addFunction ("worst_latency_preroll_buffer_size_ceil", &Session::worst_latency_preroll_buffer_size_ceil) .addFunction ("cfg", &Session::cfg) .addFunction ("route_groups", &Session::route_groups) .addFunction ("new_route_group", &Session::new_route_group) diff --git a/libs/ardour/session.cc b/libs/ardour/session.cc index 3486d01198..7593655024 100644 --- a/libs/ardour/session.cc +++ b/libs/ardour/session.cc @@ -201,6 +201,7 @@ Session::Session (AudioEngine &eng, , _worst_output_latency (0) , _worst_input_latency (0) , _worst_route_latency (0) + , _io_latency (0) , _send_latency_changes (0) , _have_captured (false) , _capture_duration (0) @@ -6820,6 +6821,7 @@ Session::set_worst_output_latency () } _worst_output_latency = 0; + _io_latency = 0; if (!_engine.running()) { return; @@ -6829,6 +6831,7 @@ Session::set_worst_output_latency () for (RouteList::iterator i = r->begin(); i != r->end(); ++i) { _worst_output_latency = max (_worst_output_latency, (*i)->output()->latency()); + _io_latency = max (_io_latency, (*i)->output()->latency() + (*i)->input()->latency()); } _worst_output_latency = max (_worst_output_latency, _click_io->latency()); diff --git a/share/scripts/_dump_latency.lua b/share/scripts/_dump_latency.lua index 95f47dd8c8..79752ced22 100644 --- a/share/scripts/_dump_latency.lua +++ b/share/scripts/_dump_latency.lua @@ -12,6 +12,7 @@ function factory () return function () print ("Worst Input Latency: ", Session:worst_input_latency ()) print ("Worst Track Latency: ", Session:worst_route_latency ()) print ("Worst Latency Preroll: ", Session:worst_latency_preroll ()) + print ("I/O Latency: ", Session:io_latency ()) print (" -- Routes --") for t in Session:get_routes ():iter () do