24 enum class Type : uint8_t {
63 template <
class Fn,
class... Args>
65 push(priority,
WorkTask::make(std::forward<Fn>(fn), std::forward<Args>(args)...));
69 template <
class Fn,
class... Args>
70 void invoke(Fn&& fn, Args&&... args) {
75 template <
class Fn,
class... Args>
76 std::unique_ptr<AsyncRequest>
78 std::shared_ptr<WorkTask> task =
WorkTask::make(std::forward<Fn>(fn), std::forward<Args>(args)...);
80 return std::make_unique<WorkRequest>(task);
84 ::mapbox::base::WeakPtr<Scheduler>
makeWeakPtr()
override {
return weakFactory.makeWeakPtr(); }
91 using Queue = std::queue<std::shared_ptr<WorkTask>>;
97 void push(
Priority priority, std::shared_ptr<WorkTask> task) {
98 std::lock_guard<std::mutex> lock(mutex);
100 highPriorityQueue.emplace(std::move(task));
102 defaultQueue.emplace(std::move(task));
106 if (platformCallback) {
112 std::shared_ptr<WorkTask> task;
113 std::unique_lock<std::mutex> lock(mutex);
115 if (!highPriorityQueue.empty()) {
116 task = std::move(highPriorityQueue.front());
117 highPriorityQueue.pop();
118 }
else if (!defaultQueue.empty()) {
119 task = std::move(defaultQueue.front());
131 std::function<void()> platformCallback;
134 Queue highPriorityQueue;
137 std::unique_ptr<Impl> impl;
138 ::mapbox::base::WeakPtrFactory<Scheduler> weakFactory{
this};
static std::shared_ptr< WorkTask > make(Fn &&, Args &&...)
std::unique_ptr< AsyncRequest > invokeCancellable(Fn &&fn, Args &&... args)
::mapbox::base::WeakPtr< Scheduler > makeWeakPtr() override
Makes a weak pointer to this Scheduler.
void invoke(Priority priority, Fn &&fn, Args &&... args)
static LOOP_HANDLE getLoopHandle()
void schedule(std::function< void()> fn) override
Enqueues a function for execution.
RunLoop(Type type=Type::Default)
void invoke(Fn &&fn, Args &&... args)
void setPlatformCallback(std::function< void()> callback)
void addWatch(int fd, Event, std::function< void(int, Event)> &&callback)
#define MBGL_STORE_THREAD(tid)