- Do not carry it over everywhere as parameter, it is a shared instance anyway and the lifecycle is pretty much the app lifecycle from the moment we instantiate a map. - Rename to BackgroundScheduler because it is a Scheduler that will do tasks in the background, we don't make assumptions if it is a thread pool or a single thread. - Most importantly, remove the dependency from `core` on `platform`.
38 lines
803 B
C++
38 lines
803 B
C++
#include <mbgl/actor/scheduler.hpp>
|
|
#include <mbgl/util/thread_local.hpp>
|
|
#include <mbgl/util/thread_pool.hpp>
|
|
|
|
namespace mbgl {
|
|
|
|
util::ThreadLocal<Scheduler> g_currentScheduler;
|
|
|
|
static auto& current() {
|
|
static util::ThreadLocal<Scheduler> scheduler;
|
|
return scheduler;
|
|
};
|
|
|
|
void Scheduler::SetCurrent(Scheduler* scheduler) {
|
|
current().set(scheduler);
|
|
}
|
|
|
|
Scheduler* Scheduler::GetCurrent() {
|
|
return current().get();
|
|
}
|
|
|
|
// static
|
|
std::shared_ptr<Scheduler> Scheduler::GetBackground() {
|
|
static std::weak_ptr<Scheduler> weak;
|
|
static std::mutex mtx;
|
|
|
|
std::lock_guard<std::mutex> lock(mtx);
|
|
std::shared_ptr<Scheduler> scheduler = weak.lock();
|
|
|
|
if (!scheduler) {
|
|
weak = scheduler = std::make_shared<ThreadPool>(4);
|
|
}
|
|
|
|
return scheduler;
|
|
}
|
|
|
|
} //namespace mbgl
|