Speed up AFL/PFL changes for large sessions
authorRobin Gareus <robin@gareus.org>
Fri, 25 Nov 2016 09:41:23 +0000 (10:41 +0100)
committerRobin Gareus <robin@gareus.org>
Fri, 25 Nov 2016 09:41:23 +0000 (10:41 +0100)
update_latency_compensation() and resort_routes() are expensive and
were called for every individual change.

libs/ardour/session.cc

index 0f4c5b4f735a66118398914fc9da125dca83d947..cfb08b48ecad0819c6e42536223520ecad3ec20a 100644 (file)
@@ -6223,11 +6223,14 @@ Session::update_route_record_state ()
 void
 Session::listen_position_changed ()
 {
-       boost::shared_ptr<RouteList> r = routes.reader ();
-
-       for (RouteList::iterator i = r->begin(); i != r->end(); ++i) {
-               (*i)->listen_position_changed ();
+       {
+               boost::shared_ptr<RouteList> r = routes.reader ();
+               PBD::Unwinder<bool> uw (ignore_route_processor_changes, true);
+               for (RouteList::iterator i = r->begin(); i != r->end(); ++i) {
+                       (*i)->listen_position_changed ();
+               }
        }
+       route_processors_changed (RouteProcessorChange ());
 }
 
 void