[core] [node] pass thread pool impl to Map constructor

Updates mbgl::Map constructor usage everywhere

Adds NodeThreadPool implementation using AsyncQueue to call
Nan::AsyncQueueWorker from main thread
This commit is contained in:
Mike Morris
2016-10-12 17:28:22 -04:00
parent ab85fdb452
commit 817c26111a
41 changed files with 211 additions and 66 deletions

View File

@@ -0,0 +1,39 @@
#include "node_thread_pool.hpp"
#include "util/async_queue.hpp"
#include <mbgl/actor/mailbox.hpp>
namespace node_mbgl {
NodeThreadPool::NodeThreadPool()
: queue(new util::AsyncQueue<std::weak_ptr<mbgl::Mailbox>>(uv_default_loop(), [this](std::weak_ptr<mbgl::Mailbox> mailbox) {
Worker* worker = new Worker(mailbox);
Nan::AsyncQueueWorker(worker);
})) {
// Don't keep the event loop alive.
queue->unref();
}
NodeThreadPool::~NodeThreadPool() {
queue->stop();
}
void NodeThreadPool::schedule(std::weak_ptr<mbgl::Mailbox> mailbox) {
queue->send(std::move(mailbox));
}
NodeThreadPool::Worker::Worker(std::weak_ptr<mbgl::Mailbox> mailbox_)
: AsyncWorker(nullptr),
mailbox(std::move(mailbox_)) {};
void NodeThreadPool::Worker::Execute() {
if (auto locked = mailbox.lock()) {
locked->receive();
}
}
void NodeThreadPool::Worker::WorkComplete() {
// no-op to avoid calling nullptr callback
}
} // namespace node_mbgl