From 4cdd3f5df65da12b316733b37f2a27bfba675095 Mon Sep 17 00:00:00 2001 From: Robin Gareus Date: Mon, 6 Nov 2017 00:12:32 +0100 Subject: Some further notes (and experiments) on optimizations --- libs/ardour/port_manager.cc | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-) (limited to 'libs/ardour') diff --git a/libs/ardour/port_manager.cc b/libs/ardour/port_manager.cc index 98b85e03b7..df6eee247b 100644 --- a/libs/ardour/port_manager.cc +++ b/libs/ardour/port_manager.cc @@ -755,7 +755,7 @@ PortManager::cycle_start (pframes_t nframes, Session* s) /* TODO optimize * - when speed == 1.0, the resampler copies data without processing - * it may be more efficient to just run all in sequence + * it may (or may not) be more efficient to just run all in sequence. * * - single sequential task for 'lightweight' tasks would make sense * (run it in parallel with 'heavy' resampling. @@ -766,8 +766,13 @@ PortManager::cycle_start (pframes_t nframes, Session* s) * amount of work (how many connected ports are there, how * many resamplers need to run) vs. available CPU cores and semaphore * synchronization overhead. + * + * - input ports: it would make sense to resample each input only once + * (rather than resample into each ardour-owned input port). + * A single external source-port may be connected to many ardour + * input-ports. Currently re-sampling is per input. */ - if (s && s->rt_tasklist () /* && fabs (Port::speed_ratio ()) != 1.0 */) { + if (s && s->rt_tasklist () && fabs (Port::speed_ratio ()) != 1.0) { RTTaskList::TaskList tl; for (Ports::iterator p = _cycle_ports->begin(); p != _cycle_ports->end(); ++p) { tl.push_back (boost::bind (&Port::cycle_start, p->second, nframes)); @@ -784,7 +789,7 @@ void PortManager::cycle_end (pframes_t nframes, Session* s) { // see optimzation note in ::cycle_start() - if (s && s->rt_tasklist () /* && fabs (Port::speed_ratio ()) != 1.0 */) { + if (s && s->rt_tasklist () && fabs (Port::speed_ratio ()) != 1.0) { RTTaskList::TaskList tl; for (Ports::iterator p = _cycle_ports->begin(); p != _cycle_ports->end(); ++p) { tl.push_back (boost::bind (&Port::cycle_end, p->second, nframes)); @@ -887,7 +892,7 @@ void PortManager::cycle_end_fade_out (gain_t base_gain, gain_t gain_step, pframes_t nframes, Session* s) { // see optimzation note in ::cycle_start() - if (s && s->rt_tasklist () /* && fabs (Port::speed_ratio ()) != 1.0 */) { + if (s && s->rt_tasklist () && fabs (Port::speed_ratio ()) != 1.0) { RTTaskList::TaskList tl; for (Ports::iterator p = _cycle_ports->begin(); p != _cycle_ports->end(); ++p) { tl.push_back (boost::bind (&Port::cycle_end, p->second, nframes)); -- cgit v1.2.3