From 41bbd4e4f7d66465433e370ca024ab0239fcace3 Mon Sep 17 00:00:00 2001 From: John Firebaugh Date: Tue, 6 Sep 2016 15:01:34 -0700 Subject: [core] Use an actor model for tile worker concurrency --- include/mbgl/util/run_loop.hpp | 15 +++++++++++++-- 1 file changed, 13 insertions(+), 2 deletions(-) (limited to 'include/mbgl/util/run_loop.hpp') diff --git a/include/mbgl/util/run_loop.hpp b/include/mbgl/util/run_loop.hpp index 6559b72ef8..939531d6c3 100644 --- a/include/mbgl/util/run_loop.hpp +++ b/include/mbgl/util/run_loop.hpp @@ -1,5 +1,7 @@ #pragma once +#include +#include #include #include #include @@ -16,7 +18,8 @@ namespace util { typedef void * LOOP_HANDLE; -class RunLoop : private util::noncopyable { +class RunLoop : public Scheduler, + private util::noncopyable { public: enum class Type : uint8_t { Default, @@ -31,7 +34,7 @@ public: }; RunLoop(Type type = Type::Default); - ~RunLoop(); + ~RunLoop() override; static RunLoop* Get(); static LOOP_HANDLE getLoopHandle(); @@ -78,6 +81,14 @@ private: void push(std::shared_ptr); + void schedule(std::weak_ptr mailbox) override { + invoke([mailbox] () { + if (auto locked = mailbox.lock()) { + locked->receive(); + } + }); + } + void withMutex(std::function&& fn) { std::lock_guard lock(mutex); fn(); -- cgit v1.2.1