diff options
author | Mike Morris <mikemorris@users.noreply.github.com> | 2016-10-12 17:28:22 -0400 |
---|---|---|
committer | Mike Morris <mikemorris@users.noreply.github.com> | 2016-10-20 14:37:36 -0400 |
commit | 817c26111a0d6650e7ebae73e46621626106d0a7 (patch) | |
tree | 60a5206f2f7658b06b214d9b7435a65a243d6e83 /src | |
parent | ab85fdb4524788ce7279e8ac362a0c1edbd5d5df (diff) | |
download | qtlocation-mapboxgl-817c26111a0d6650e7ebae73e46621626106d0a7.tar.gz |
[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
Diffstat (limited to 'src')
-rw-r--r-- | src/mbgl/actor/thread_pool.cpp | 55 | ||||
-rw-r--r-- | src/mbgl/actor/thread_pool.hpp | 27 | ||||
-rw-r--r-- | src/mbgl/map/map.cpp | 15 |
3 files changed, 8 insertions, 89 deletions
diff --git a/src/mbgl/actor/thread_pool.cpp b/src/mbgl/actor/thread_pool.cpp deleted file mode 100644 index 2995ed26ad..0000000000 --- a/src/mbgl/actor/thread_pool.cpp +++ /dev/null @@ -1,55 +0,0 @@ -#include <mbgl/actor/thread_pool.hpp> -#include <mbgl/actor/mailbox.hpp> - -namespace mbgl { - -ThreadPool::ThreadPool(std::size_t count) { - threads.reserve(count); - for (std::size_t i = 0; i < count; ++i) { - threads.emplace_back([this] () { - while (true) { - std::unique_lock<std::mutex> lock(mutex); - - cv.wait(lock, [this] { - return !queue.empty() || terminate; - }); - - if (terminate) { - return; - } - - auto mailbox = queue.front(); - queue.pop(); - lock.unlock(); - - if (auto locked = mailbox.lock()) { - locked->receive(); - } - } - }); - } -} - -ThreadPool::~ThreadPool() { - { - std::lock_guard<std::mutex> lock(mutex); - terminate = true; - } - - cv.notify_all(); - - for (auto& thread : threads) { - thread.join(); - } -} - -void ThreadPool::schedule(std::weak_ptr<Mailbox> mailbox) { - { - std::lock_guard<std::mutex> lock(mutex); - queue.push(mailbox); - } - - cv.notify_one(); -} - -} // namespace mbgl diff --git a/src/mbgl/actor/thread_pool.hpp b/src/mbgl/actor/thread_pool.hpp deleted file mode 100644 index a14d16d771..0000000000 --- a/src/mbgl/actor/thread_pool.hpp +++ /dev/null @@ -1,27 +0,0 @@ -#pragma once - -#include <mbgl/actor/scheduler.hpp> - -#include <condition_variable> -#include <mutex> -#include <queue> -#include <thread> - -namespace mbgl { - -class ThreadPool : public Scheduler { -public: - ThreadPool(std::size_t count); - ~ThreadPool() override; - - void schedule(std::weak_ptr<Mailbox>) override; - -private: - std::vector<std::thread> threads; - std::queue<std::weak_ptr<Mailbox>> queue; - std::mutex mutex; - std::condition_variable cv; - bool terminate { false }; -}; - -} // namespace mbgl diff --git a/src/mbgl/map/map.cpp b/src/mbgl/map/map.cpp index bf2462e2ab..d948225d8a 100644 --- a/src/mbgl/map/map.cpp +++ b/src/mbgl/map/map.cpp @@ -21,7 +21,7 @@ #include <mbgl/util/async_task.hpp> #include <mbgl/util/mapbox.hpp> #include <mbgl/util/tile_coordinate.hpp> -#include <mbgl/actor/thread_pool.hpp> +#include <mbgl/actor/scheduler.hpp> #include <mbgl/platform/log.hpp> namespace mbgl { @@ -36,7 +36,7 @@ enum class RenderState : uint8_t { class Map::Impl : public style::Observer { public: - Impl(View&, FileSource&, MapMode, GLContextMode, ConstrainMode, ViewportMode); + Impl(View&, FileSource&, Scheduler&, MapMode, GLContextMode, ConstrainMode, ViewportMode); void onSourceAttributionChanged(style::Source&, const std::string&) override; void onUpdate(Update) override; @@ -51,6 +51,7 @@ public: View& view; FileSource& fileSource; + Scheduler& scheduler; RenderState renderState = RenderState::Never; Transform transform; @@ -63,7 +64,6 @@ public: Update updateFlags = Update::Nothing; util::AsyncTask asyncUpdate; - ThreadPool workerThreadPool; std::unique_ptr<AnnotationManager> annotationManager; std::unique_ptr<Painter> painter; @@ -81,20 +81,22 @@ public: bool loading = false; }; -Map::Map(View& view, FileSource& fileSource, MapMode mapMode, GLContextMode contextMode, ConstrainMode constrainMode, ViewportMode viewportMode) - : impl(std::make_unique<Impl>(view, fileSource, mapMode, contextMode, constrainMode, viewportMode)) { +Map::Map(View& view, FileSource& fileSource, Scheduler& scheduler, MapMode mapMode, GLContextMode contextMode, ConstrainMode constrainMode, ViewportMode viewportMode) + : impl(std::make_unique<Impl>(view, fileSource, scheduler, mapMode, contextMode, constrainMode, viewportMode)) { view.initialize(this); update(Update::Dimensions); } Map::Impl::Impl(View& view_, FileSource& fileSource_, + Scheduler& scheduler_, MapMode mode_, GLContextMode contextMode_, ConstrainMode constrainMode_, ViewportMode viewportMode_) : view(view_), fileSource(fileSource_), + scheduler(scheduler_), transform([this](MapChange change) { view.notifyMapChange(change); }, constrainMode_, viewportMode_), @@ -102,7 +104,6 @@ Map::Impl::Impl(View& view_, contextMode(contextMode_), pixelRatio(view.getPixelRatio()), asyncUpdate([this] { update(); }), - workerThreadPool(4), annotationManager(std::make_unique<AnnotationManager>(pixelRatio)) { } @@ -230,7 +231,7 @@ void Map::Impl::update() { style::UpdateParameters parameters(pixelRatio, debugOptions, transform.getState(), - workerThreadPool, + scheduler, fileSource, mode, *annotationManager, |