summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorMike Morris <mikemorris@users.noreply.github.com>2016-10-12 17:28:22 -0400
committerMike Morris <mikemorris@users.noreply.github.com>2016-10-20 14:37:36 -0400
commit817c26111a0d6650e7ebae73e46621626106d0a7 (patch)
tree60a5206f2f7658b06b214d9b7435a65a243d6e83 /src
parentab85fdb4524788ce7279e8ac362a0c1edbd5d5df (diff)
downloadqtlocation-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.cpp55
-rw-r--r--src/mbgl/actor/thread_pool.hpp27
-rw-r--r--src/mbgl/map/map.cpp15
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,