summaryrefslogtreecommitdiff
path: root/src/mbgl/actor/scheduler.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/mbgl/actor/scheduler.cpp')
-rw-r--r--src/mbgl/actor/scheduler.cpp20
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