diff options
| author | Nicolas James <nj3ahxac@gmail.com> | 2026-04-08 00:56:40 +1000 |
|---|---|---|
| committer | Nicolas James <nj3ahxac@gmail.com> | 2026-04-08 00:56:40 +1000 |
| commit | eb9719cc8b9a308654ccd2c3bce8a7047b6e2a1a (patch) | |
| tree | 5e72b419d3dc900a35921be5e551b17552251769 /src/strategies/anti_lag/queue_strategy.cc | |
| parent | 69764a869d99e9abd0fbe10c2773d3556d7f35e8 (diff) | |
Refactor storing submissions into FrameSpan class, reduce AntiLag thread contention
Diffstat (limited to 'src/strategies/anti_lag/queue_strategy.cc')
| -rw-r--r-- | src/strategies/anti_lag/queue_strategy.cc | 33 |
1 files changed, 11 insertions, 22 deletions
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> submission) { + std::shared_ptr<TimestampPool::Handle> handle) { const auto strategy = dynamic_cast<AntiLagDeviceStrategy*>(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<FrameSpan>(std::move(handle)); + } } void AntiLagQueueStrategy::notify_submit( [[maybe_unused]] const VkSubmitInfo2& submit, - std::unique_ptr<Submission> submission) { + std::shared_ptr<TimestampPool::Handle> handle) { const auto strategy = dynamic_cast<AntiLagDeviceStrategy*>(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<std::unique_ptr<Submission>> { - 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<FrameSpan>(std::move(handle)); } - const auto& last = submissions.back(); - last->handle->await_end_time(); } // Stub - AntiLag doesn't care about presents. |
