summaryrefslogtreecommitdiff
path: root/libs/ardour/plugin_insert.cc
diff options
context:
space:
mode:
authorRobin Gareus <robin@gareus.org>2018-05-17 22:09:33 +0200
committerRobin Gareus <robin@gareus.org>2018-05-17 22:15:07 +0200
commitcb51c4c5aa1717d1e37f370b3610e4f8f7b1e0bf (patch)
tree779a6f48d36b93ed13d57aa007d4bec5eb180ff9 /libs/ardour/plugin_insert.cc
parent353403509180166ca274a1e4585c83b2107728d4 (diff)
Collect plugin runtime profile statistics.
Diffstat (limited to 'libs/ardour/plugin_insert.cc')
-rw-r--r--libs/ardour/plugin_insert.cc14
1 files changed, 14 insertions, 0 deletions
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) {