diff options
author | David Robillard <d@drobilla.net> | 2008-09-23 22:23:39 +0000 |
---|---|---|
committer | David Robillard <d@drobilla.net> | 2008-09-23 22:23:39 +0000 |
commit | 95d82d7a16b241632bd3d35a5c11c27e7e257984 (patch) | |
tree | 4b248d519f369d73817ed6a1470ece4cbbfd6ce3 /gtk2_ardour/tempo_lines.h | |
parent | 81c571f2f01e7d5ab86220c1334403daeffff165 (diff) |
An actual tempo line cache (not quite perfect when scrolling left, but miles ahead of the previous one didn't really help at all).
Tempo line updating done immediately/directly rather than in an idle handler.
Looking for feedback how this works for other people, performance wise...
Feel-wise, the obvious lag between scrolling and tempo lines being drawn is now gone.
git-svn-id: svn://localhost/ardour2/branches/3.0@3799 d708f5d6-7413-0410-9779-e7cbd77b26cf
Diffstat (limited to 'gtk2_ardour/tempo_lines.h')
-rw-r--r-- | gtk2_ardour/tempo_lines.h | 29 |
1 files changed, 19 insertions, 10 deletions
diff --git a/gtk2_ardour/tempo_lines.h b/gtk2_ardour/tempo_lines.h index 375ae9342b..7d276595e4 100644 --- a/gtk2_ardour/tempo_lines.h +++ b/gtk2_ardour/tempo_lines.h @@ -19,30 +19,39 @@ #ifndef __ardour_tempo_lines_h__ #define __ardour_tempo_lines_h__ -#include <vector> +#include <map> +#include <boost/pool/pool.hpp> +#include <boost/pool/pool_alloc.hpp> #include <ardour/tempo.h> #include "canvas.h" #include "simpleline.h" +typedef boost::fast_pool_allocator< + std::pair<double, ArdourCanvas::SimpleLine>, + boost::default_user_allocator_new_delete, + boost::details::pool::null_mutex, + 8192> + MapAllocator; + class TempoLines { public: - TempoLines(ArdourCanvas::Canvas& canvas, ArdourCanvas::Group* group) - : _canvas(canvas) - , _group(group) - {} - - ArdourCanvas::SimpleLine* get_line(); + TempoLines(ArdourCanvas::Canvas& canvas, ArdourCanvas::Group* group); + + void tempo_map_changed(); void draw(ARDOUR::TempoMap::BBTPointList& points, double frames_per_unit); + + void show(); void hide(); private: - typedef std::vector<ArdourCanvas::SimpleLine*> Lines; - Lines _free_lines; - Lines _used_lines; + typedef std::map<double, ArdourCanvas::SimpleLine*, std::less<double>, MapAllocator> Lines; + Lines _lines; ArdourCanvas::Canvas& _canvas; ArdourCanvas::Group* _group; + double _clean_left; + double _clean_right; }; #endif /* __ardour_tempo_lines_h__ */ |