[core] current scheduler
- Adds a way to set the current scheduler on the thread to be used whenever a mailbox is created that needs to reply on this thread
This commit is contained in:
committed by
Ivo van Dongen
parent
d88567ee09
commit
edaa002c3c
@@ -8,6 +8,7 @@ set(MBGL_CORE_FILES
|
||||
include/mbgl/actor/message.hpp
|
||||
include/mbgl/actor/scheduler.hpp
|
||||
src/mbgl/actor/mailbox.cpp
|
||||
src/mbgl/actor/scheduler.cpp
|
||||
|
||||
# algorithm
|
||||
src/mbgl/algorithm/covered_by_children.hpp
|
||||
|
||||
@@ -21,18 +21,21 @@ class Mailbox;
|
||||
Subject to these constraints, processing can happen on whatever thread in the
|
||||
pool is available.
|
||||
|
||||
* `RunLoop` is a `Scheduler` that is typically used to create a mailbox and
|
||||
`ActorRef` for an object that lives on the main thread and is not itself wrapped
|
||||
as an `Actor`:
|
||||
|
||||
auto mailbox = std::make_shared<Mailbox>(*util::RunLoop::Get());
|
||||
* `Scheduler::GetCurrent()` is typically used to create a mailbox and `ActorRef`
|
||||
for an object that lives on the main thread and is not itself wrapped an
|
||||
`Actor`. The underlying implementation of this Scheduler should usually be
|
||||
a `RunLoop`
|
||||
auto mailbox = std::make_shared<Mailbox>(*Scheduler::Get());
|
||||
Actor<Worker> worker(threadPool, ActorRef<Foo>(*this, mailbox));
|
||||
*/
|
||||
|
||||
class Scheduler {
|
||||
public:
|
||||
virtual ~Scheduler() = default;
|
||||
virtual void schedule(std::weak_ptr<Mailbox>) = 0;
|
||||
|
||||
// Set/Get the current Scheduler for this thread
|
||||
static Scheduler* GetCurrent();
|
||||
static void SetCurrent(Scheduler*);
|
||||
};
|
||||
|
||||
} // namespace mbgl
|
||||
|
||||
@@ -58,8 +58,8 @@ void ThreadLocal<T>::set(T* ptr) {
|
||||
}
|
||||
}
|
||||
|
||||
template class ThreadLocal<RunLoop>;
|
||||
template class ThreadLocal<BackendScope>;
|
||||
template class ThreadLocal<Scheduler>;
|
||||
template class ThreadLocal<int>; // For unit tests
|
||||
|
||||
} // namespace util
|
||||
|
||||
19
src/mbgl/actor/scheduler.cpp
Normal file
19
src/mbgl/actor/scheduler.cpp
Normal file
@@ -0,0 +1,19 @@
|
||||
#include <mbgl/actor/scheduler.hpp>
|
||||
#include <mbgl/util/thread_local.hpp>
|
||||
|
||||
namespace mbgl {
|
||||
|
||||
static auto& current() {
|
||||
static util::ThreadLocal<Scheduler> scheduler;
|
||||
return scheduler;
|
||||
};
|
||||
|
||||
void Scheduler::SetCurrent(Scheduler* scheduler) {
|
||||
current().set(scheduler);
|
||||
}
|
||||
|
||||
Scheduler* Scheduler::GetCurrent() {
|
||||
return current().get();
|
||||
}
|
||||
|
||||
} //namespace mbgl
|
||||
Reference in New Issue
Block a user