13
0

Add regions at once rather than individually when restoring Selection state

This is a workaround for performance issues with the current implementation
when adding many regions to the selection one at a time.

If the Selection implementation was to change at some point and adding regions
to the selection only takes a small constant amount of time, then this
optimization may no longer be necessary.

Related to: #7274
This commit is contained in:
Tim Mayberry 2017-04-23 21:32:09 +10:00
parent 68883cbb56
commit 1b2bc203ac

View File

@ -1387,6 +1387,8 @@ Selection::set_state (XMLNode const & node, int)
clear_tracks (); clear_tracks ();
clear_markers (); clear_markers ();
RegionSelection selected_regions;
PBD::ID id; PBD::ID id;
XMLNodeList children = node.children (); XMLNodeList children = node.children ();
for (XMLNodeList::const_iterator i = children.begin(); i != children.end(); ++i) { for (XMLNodeList::const_iterator i = children.begin(); i != children.end(); ++i) {
@ -1411,7 +1413,7 @@ Selection::set_state (XMLNode const & node, int)
editor->get_regionviews_by_id (id, rs); editor->get_regionviews_by_id (id, rs);
if (!rs.empty ()) { if (!rs.empty ()) {
add (rs); selected_regions.insert (selected_regions.end(), rs.begin(), rs.end());
} else { } else {
/* /*
regionviews haven't been constructed - stash the region IDs regionviews haven't been constructed - stash the region IDs
@ -1571,6 +1573,9 @@ Selection::set_state (XMLNode const & node, int)
} }
// now add regions to selection at once
add (selected_regions);
return 0; return 0;
} }