diff options
author | nick_m <mainsbridge@gmail.com> | 2016-12-24 02:01:37 +1100 |
---|---|---|
committer | nick_m <mainsbridge@gmail.com> | 2016-12-24 02:01:37 +1100 |
commit | da92d2d7648d2625b69fff60a0d645d55e0fa9ac (patch) | |
tree | 6f4a1874e92083a0901082dc67a84278d4d6887a /gtk2_ardour/ghostregion.cc | |
parent | 0e8852963e2b9f0bb84258f0fc68d8b135e0a56c (diff) |
speed up load/quit for sessions containing ~25k events.
- MGR uses a _note_group to hold events.
- MRV & MGR delete canvas notes directly from their note group.
- sysex is untested (it uses MRV note group).
Diffstat (limited to 'gtk2_ardour/ghostregion.cc')
-rw-r--r-- | gtk2_ardour/ghostregion.cc | 13 |
1 files changed, 6 insertions, 7 deletions
diff --git a/gtk2_ardour/ghostregion.cc b/gtk2_ardour/ghostregion.cc index e024a1a6e7..ba8ee05a46 100644 --- a/gtk2_ardour/ghostregion.cc +++ b/gtk2_ardour/ghostregion.cc @@ -179,6 +179,7 @@ MidiGhostRegion::MidiGhostRegion(RegionView& rv, TimeAxisView& source_tv, double initial_unit_pos) : GhostRegion(rv, tv.ghost_group(), tv, source_tv, initial_unit_pos) + , _note_group (new ArdourCanvas::Container (group)) , _optimization_iterator(events.end()) { _outline = UIConfiguration::instance().color ("ghost track midi outline"); @@ -200,6 +201,7 @@ MidiGhostRegion::MidiGhostRegion(RegionView& rv, msv.trackview(), source_tv, initial_unit_pos) + , _note_group (new ArdourCanvas::Container (group)) , _optimization_iterator(events.end()) { _outline = UIConfiguration::instance().color ("ghost track midi outline"); @@ -324,7 +326,7 @@ MidiGhostRegion::update_contents_height () void MidiGhostRegion::add_note (NoteBase* n) { - GhostEvent* event = new GhostEvent (n, group); + GhostEvent* event = new GhostEvent (n, _note_group); events.insert (make_pair (n->note(), event)); event->item->set_fill_color (UIConfiguration::instance().color_mod(n->base_color(), "ghost track midi fill")); @@ -356,12 +358,9 @@ MidiGhostRegion::add_note (NoteBase* n) void MidiGhostRegion::clear_events() { - _optimization_iterator = events.begin(); - - while (_optimization_iterator != events.end()) { - delete (*_optimization_iterator).second; - _optimization_iterator = events.erase (_optimization_iterator); - } + _note_group->clear (true); + events.clear (); + _optimization_iterator = events.end(); } /** Update the x positions of our representation of a parent's note. |