Files
MapLibreParticleLab/src/mbgl/actor/scheduler.cpp
Thiago Marcos P. Santos 06f1dc48a2 [core] Make the BackgroundScheduler a singleton
- 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`.
2019-05-10 14:20:38 +03:00

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