Skip to content

Commit

Permalink
Simplify scheduler assignment logic and prevent skipping
Browse files Browse the repository at this point in the history
  • Loading branch information
TimSylvester committed Jan 15, 2025
1 parent d4730c3 commit 32cef0a
Showing 1 changed file with 9 additions and 16 deletions.
25 changes: 9 additions & 16 deletions src/mbgl/actor/scheduler.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -48,29 +48,22 @@ std::shared_ptr<Scheduler> Scheduler::GetBackground() {

// static
std::shared_ptr<Scheduler> Scheduler::GetSequenced() {
const std::size_t kSchedulersCount = 10;
constexpr std::size_t kSchedulersCount = 10;
static std::vector<std::weak_ptr<Scheduler>> weaks(kSchedulersCount);
static std::mutex mtx;
static std::size_t lastUsedIndex = 0u;

std::lock_guard<std::mutex> lock(mtx);
std::lock_guard lock(mtx);

if (++lastUsedIndex == kSchedulersCount) lastUsedIndex = 0u;
lastUsedIndex = (lastUsedIndex + 1) % kSchedulersCount;

std::shared_ptr<Scheduler> result;
for (std::size_t i = 0; i < kSchedulersCount; ++i) {
auto& weak = weaks[i];
if (auto scheduler = weak.lock()) {
if (lastUsedIndex == i) result = scheduler;
continue;
}
result = std::make_shared<SequencedScheduler>();
weak = result;
lastUsedIndex = i;
break;
if (auto scheduler = weaks[lastUsedIndex].lock()) {
return scheduler;
} else {
auto result = std::make_shared<SequencedScheduler>();
weaks[lastUsedIndex] = result;
return result;
}

return result;
}

} // namespace mbgl

0 comments on commit 32cef0a

Please sign in to comment.