From cb51c4c5aa1717d1e37f370b3610e4f8f7b1e0bf Mon Sep 17 00:00:00 2001 From: Robin Gareus Date: Thu, 17 May 2018 22:09:33 +0200 Subject: Collect plugin runtime profile statistics. --- libs/ardour/plugin_insert.cc | 14 ++++++++++++++ 1 file changed, 14 insertions(+) (limited to 'libs/ardour/plugin_insert.cc') diff --git a/libs/ardour/plugin_insert.cc b/libs/ardour/plugin_insert.cc index c179f0d24b..7ce8ea547f 100644 --- a/libs/ardour/plugin_insert.cc +++ b/libs/ardour/plugin_insert.cc @@ -617,6 +617,7 @@ PluginInsert::find_next_event (double now, double end, Evoral::ControlEvent& nex void PluginInsert::activate () { + _timing_stats.reset (); for (Plugins::iterator i = _plugins.begin(); i != _plugins.end(); ++i) { (*i)->activate (); } @@ -638,6 +639,7 @@ PluginInsert::activate () void PluginInsert::deactivate () { + _timing_stats.reset (); Processor::deactivate (); for (Plugins::iterator i = _plugins.begin(); i != _plugins.end(); ++i) { @@ -1204,6 +1206,7 @@ PluginInsert::run (BufferSet& bufs, samplepos_t start_sample, samplepos_t end_sa } if (_pending_active) { + _timing_stats.start (); /* run as normal if we are active or moving from inactive to active */ if (_session.transport_rolling() || _session.bounce_processing()) { @@ -1212,8 +1215,10 @@ PluginInsert::run (BufferSet& bufs, samplepos_t start_sample, samplepos_t end_sa Glib::Threads::Mutex::Lock lm (control_lock(), Glib::Threads::TRY_LOCK); connect_and_run (bufs, start_sample, end_sample, speed, nframes, 0, lm.locked()); } + _timing_stats.update (); } else { + _timing_stats.reset (); // XXX should call ::silence() to run plugin(s) for consistent load. // We'll need to change this anyway when bypass can be automated bypass (bufs, nframes); @@ -3123,6 +3128,15 @@ PluginInsert::end_touch (uint32_t param_id) } } +bool +PluginInsert::get_stats (uint64_t& min, uint64_t& max, double& avg, double& dev) const +{ + /* TODO: consider taking a try/lock: Don't run concurrently with + * TimingStats::update, TimingStats::reset. + */ + return _timing_stats.get_stats (min, max, avg, dev); +} + std::ostream& operator<<(std::ostream& o, const ARDOUR::PluginInsert::Match& m) { switch (m.method) { -- cgit v1.2.3