diff options
author | Thiago Marcos P. Santos <tmpsantos@gmail.com> | 2019-02-14 16:56:17 +0200 |
---|---|---|
committer | Thiago Marcos P. Santos <tmpsantos@gmail.com> | 2019-05-10 14:20:38 +0300 |
commit | 06f1dc48a2fb317979ab48ce323115be5bd48f16 (patch) | |
tree | 5ef1e78a1f98a7a26034ca519e267bda235b2817 /src/mbgl/actor | |
parent | 947bc75f56fae7f1e70f21b98730dc6b460b9194 (diff) | |
download | qtlocation-mapboxgl-06f1dc48a2fb317979ab48ce323115be5bd48f16.tar.gz |
[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`.
Diffstat (limited to 'src/mbgl/actor')
-rw-r--r-- | src/mbgl/actor/scheduler.cpp | 20 |
1 files changed, 19 insertions, 1 deletions
diff --git a/src/mbgl/actor/scheduler.cpp b/src/mbgl/actor/scheduler.cpp index d7cdb2737b..cb0c7728ec 100644 --- a/src/mbgl/actor/scheduler.cpp +++ b/src/mbgl/actor/scheduler.cpp @@ -1,8 +1,11 @@ #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; @@ -16,4 +19,19 @@ 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 |