From 4b20e719a893e985ee2b21e6440daa0433c61305 Mon Sep 17 00:00:00 2001 From: Robin Gareus Date: Tue, 15 Sep 2015 17:42:59 +0200 Subject: prepare displaying peakfile queue-len --- libs/ardour/ardour/source_factory.h | 1 + libs/ardour/source_factory.cc | 18 +++++++++++++++++- 2 files changed, 18 insertions(+), 1 deletion(-) diff --git a/libs/ardour/ardour/source_factory.h b/libs/ardour/ardour/source_factory.h index 614fdce7b1..a41cd36258 100644 --- a/libs/ardour/ardour/source_factory.h +++ b/libs/ardour/ardour/source_factory.h @@ -68,6 +68,7 @@ class LIBARDOUR_API SourceFactory { static Glib::Threads::Mutex peak_building_lock; static std::list< boost::weak_ptr > files_with_peaks; + static int peak_work_queue_length (); static int setup_peakfile (boost::shared_ptr, bool async); }; diff --git a/libs/ardour/source_factory.cc b/libs/ardour/source_factory.cc index 4b4a3cba33..7ef7ae12d1 100644 --- a/libs/ardour/source_factory.cc +++ b/libs/ardour/source_factory.cc @@ -32,6 +32,7 @@ #include "ardour/audio_playlist_source.h" #include "ardour/midi_playlist.h" #include "ardour/midi_playlist_source.h" +#include "ardour/source.h" #include "ardour/source_factory.h" #include "ardour/sndfilesource.h" #include "ardour/silentfilesource.h" @@ -54,6 +55,8 @@ Glib::Threads::Cond SourceFactory::PeaksToBuild; Glib::Threads::Mutex SourceFactory::peak_building_lock; std::list > SourceFactory::files_with_peaks; +static int active_threads = 0; + static void peak_thread_work () { @@ -74,6 +77,7 @@ peak_thread_work () boost::shared_ptr as (SourceFactory::files_with_peaks.front().lock()); SourceFactory::files_with_peaks.pop_front (); + ++active_threads; SourceFactory::peak_building_lock.unlock (); if (!as) { @@ -81,9 +85,20 @@ peak_thread_work () } as->setup_peakfile (); + SourceFactory::peak_building_lock.lock (); + --active_threads; + SourceFactory::peak_building_lock.unlock (); } } +int +SourceFactory::peak_work_queue_length () +{ + // ideally we'd loop over the queue and check for duplicates + // and existing valid peak-files.. + return SourceFactory::files_with_peaks.size () + active_threads; +} + void SourceFactory::init () { @@ -99,7 +114,8 @@ SourceFactory::setup_peakfile (boost::shared_ptr s, bool async) if (as) { - if (async) { + // immediately set 'peakfile-path' for empty and NoPeakFile sources + if (async && !as->empty() && !(as->flags() & Source::NoPeakFile)) { Glib::Threads::Mutex::Lock lm (peak_building_lock); files_with_peaks.push_back (boost::weak_ptr (as)); -- cgit v1.2.3