From f94be3db2f2bb6c1b359744cb915683095e4ee80 Mon Sep 17 00:00:00 2001 From: jacqueline Date: Wed, 26 Jul 2023 11:23:36 +1000 Subject: make event queue go faster --- src/audio/track_queue.cpp | 56 +++++++++++++++++++++++++++++++---------------- 1 file changed, 37 insertions(+), 19 deletions(-) (limited to 'src/audio/track_queue.cpp') diff --git a/src/audio/track_queue.cpp b/src/audio/track_queue.cpp index 721329f9..6f17ad33 100644 --- a/src/audio/track_queue.cpp +++ b/src/audio/track_queue.cpp @@ -81,45 +81,57 @@ auto TrackQueue::GetUpcoming(std::size_t limit) const auto TrackQueue::AddNext(database::TrackId t) -> void { const std::lock_guard lock(mutex_); enqueued_.push_front(t); - events::Dispatch( - QueueUpdate{.current_changed = enqueued_.size() < 2}); + + QueueUpdate ev{.current_changed = enqueued_.size() < 2}; + events::Audio().Dispatch(ev); + events::Ui().Dispatch(ev); } auto TrackQueue::AddNext(std::shared_ptr src) -> void { const std::lock_guard lock(mutex_); enqueued_.push_front(src); - events::Dispatch( - QueueUpdate{.current_changed = enqueued_.size() < 2}); + + QueueUpdate ev{.current_changed = enqueued_.size() < 2}; + events::Audio().Dispatch(ev); + events::Ui().Dispatch(ev); } auto TrackQueue::IncludeNext(std::shared_ptr src) -> void { const std::lock_guard lock(mutex_); enqueued_.push_front(src); - events::Dispatch( - QueueUpdate{.current_changed = enqueued_.size() < 2}); + + QueueUpdate ev{.current_changed = enqueued_.size() < 2}; + events::Audio().Dispatch(ev); + events::Ui().Dispatch(ev); } auto TrackQueue::AddLast(database::TrackId t) -> void { const std::lock_guard lock(mutex_); enqueued_.push_back(t); - events::Dispatch( - QueueUpdate{.current_changed = enqueued_.size() < 2}); + + QueueUpdate ev{.current_changed = enqueued_.size() < 2}; + events::Audio().Dispatch(ev); + events::Ui().Dispatch(ev); } auto TrackQueue::AddLast(std::shared_ptr src) -> void { const std::lock_guard lock(mutex_); enqueued_.push_back(src); - events::Dispatch( - QueueUpdate{.current_changed = enqueued_.size() < 2}); + + QueueUpdate ev{.current_changed = enqueued_.size() < 2}; + events::Audio().Dispatch(ev); + events::Ui().Dispatch(ev); } auto TrackQueue::IncludeLast(std::shared_ptr src) -> void { const std::lock_guard lock(mutex_); enqueued_.push_back(src); - events::Dispatch( - QueueUpdate{.current_changed = enqueued_.size() < 2}); + + QueueUpdate ev{.current_changed = enqueued_.size() < 2}; + events::Audio().Dispatch(ev); + events::Ui().Dispatch(ev); } auto TrackQueue::Next() -> void { @@ -149,8 +161,9 @@ auto TrackQueue::Next() -> void { } } - events::Dispatch( - QueueUpdate{.current_changed = true}); + QueueUpdate ev{.current_changed = true}; + events::Audio().Dispatch(ev); + events::Ui().Dispatch(ev); } auto TrackQueue::Previous() -> void { @@ -161,7 +174,9 @@ auto TrackQueue::Previous() -> void { auto src = std::get>( enqueued_.front()); if (src->Previous()) { - events::Dispatch({}); + QueueUpdate ev{.current_changed = false}; + events::Audio().Dispatch(ev); + events::Ui().Dispatch(ev); return; } } @@ -180,16 +195,19 @@ auto TrackQueue::Previous() -> void { } played_.pop_front(); - events::Dispatch( - QueueUpdate{.current_changed = true}); + QueueUpdate ev{.current_changed = true}; + events::Audio().Dispatch(ev); + events::Ui().Dispatch(ev); } auto TrackQueue::Clear() -> void { const std::lock_guard lock(mutex_); + QueueUpdate ev{.current_changed = !enqueued_.empty()}; played_.clear(); enqueued_.clear(); - events::Dispatch( - QueueUpdate{.current_changed = true}); + + events::Audio().Dispatch(ev); + events::Ui().Dispatch(ev); } } // namespace audio -- cgit v1.2.3