From eb9719cc8b9a308654ccd2c3bce8a7047b6e2a1a Mon Sep 17 00:00:00 2001 From: Nicolas James Date: Wed, 8 Apr 2026 00:56:40 +1000 Subject: Refactor storing submissions into FrameSpan class, reduce AntiLag thread contention --- src/strategies/anti_lag/queue_strategy.cc | 33 +++++++++++-------------------- 1 file changed, 11 insertions(+), 22 deletions(-) (limited to 'src/strategies/anti_lag/queue_strategy.cc') diff --git a/src/strategies/anti_lag/queue_strategy.cc b/src/strategies/anti_lag/queue_strategy.cc index 27a9337..9c49e7c 100644 --- a/src/strategies/anti_lag/queue_strategy.cc +++ b/src/strategies/anti_lag/queue_strategy.cc @@ -12,7 +12,7 @@ AntiLagQueueStrategy::~AntiLagQueueStrategy() {} void AntiLagQueueStrategy::notify_submit( [[maybe_unused]] const VkSubmitInfo& submit, - std::unique_ptr submission) { + std::shared_ptr handle) { const auto strategy = dynamic_cast(this->queue.device.strategy.get()); @@ -22,12 +22,16 @@ void AntiLagQueueStrategy::notify_submit( } const auto lock = std::scoped_lock(this->mutex); - this->pending_submissions.push_back(std::move(submission)); + if (this->frame_span) { + this->frame_span->update(std::move(handle)); + } else { + this->frame_span = std::make_unique(std::move(handle)); + } } void AntiLagQueueStrategy::notify_submit( [[maybe_unused]] const VkSubmitInfo2& submit, - std::unique_ptr submission) { + std::shared_ptr handle) { const auto strategy = dynamic_cast(this->queue.device.strategy.get()); @@ -37,26 +41,11 @@ void AntiLagQueueStrategy::notify_submit( } const auto lock = std::scoped_lock(this->mutex); - this->pending_submissions.push_back(std::move(submission)); -} - -void AntiLagQueueStrategy::await_complete() { - - // Grab submissions while under a lock. - const auto submissions = [&]() -> std::deque> { - const auto lock = std::scoped_lock{this->mutex}; - - auto submissions = std::move(this->pending_submissions); - this->pending_submissions.clear(); - return submissions; - }(); - - // Wait for completion on the last submission. - if (submissions.empty()) { - return; + if (this->frame_span) { + this->frame_span->update(std::move(handle)); + } else { + this->frame_span = std::make_unique(std::move(handle)); } - const auto& last = submissions.back(); - last->handle->await_end_time(); } // Stub - AntiLag doesn't care about presents. -- cgit v1.2.3