summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorKonstantin Käfer <mail@kkaefer.com>2017-02-20 14:59:17 +0100
committerKonstantin Käfer <mail@kkaefer.com>2017-02-20 19:26:06 +0100
commit3ef9e26593bfda1f32bc15d29016d9bb83acb67c (patch)
treed153624f97f189527af040f10594f3326e3a1e22
parent4e752f63b94b71d901a1933a1bb121332fffe96b (diff)
downloadqtlocation-mapboxgl-3ef9e26593bfda1f32bc15d29016d9bb83acb67c.tar.gz
[ios,macos,android,qt] use shared threadpool
-rw-r--r--platform/android/config.cmake2
-rwxr-xr-xplatform/android/src/native_map_view.cpp5
-rwxr-xr-xplatform/android/src/native_map_view.hpp2
-rw-r--r--platform/default/mbgl/util/default_thread_pool.cpp6
-rw-r--r--platform/default/mbgl/util/shared_thread_pool.cpp14
-rw-r--r--platform/default/mbgl/util/shared_thread_pool.hpp9
-rw-r--r--platform/ios/config.cmake2
-rw-r--r--platform/ios/src/MGLMapView.mm11
-rw-r--r--platform/macos/config.cmake2
-rw-r--r--platform/macos/src/MGLMapView.mm10
-rw-r--r--platform/qt/qt.cmake4
-rw-r--r--platform/qt/src/qmapboxgl.cpp5
-rw-r--r--platform/qt/src/qmapboxgl_p.hpp2
13 files changed, 52 insertions, 22 deletions
diff --git a/platform/android/config.cmake b/platform/android/config.cmake
index dc65e7a51b..bda2c27e78 100644
--- a/platform/android/config.cmake
+++ b/platform/android/config.cmake
@@ -73,6 +73,8 @@ macro(mbgl_platform_core)
PRIVATE platform/android/src/image.cpp
# Thread pool
+ PRIVATE platform/default/mbgl/util/shared_thread_pool.cpp
+ PRIVATE platform/default/mbgl/util/shared_thread_pool.hpp
PRIVATE platform/default/mbgl/util/default_thread_pool.cpp
PRIVATE platform/default/mbgl/util/default_thread_pool.hpp
diff --git a/platform/android/src/native_map_view.cpp b/platform/android/src/native_map_view.cpp
index 129eb4c19c..22711f1547 100755
--- a/platform/android/src/native_map_view.cpp
+++ b/platform/android/src/native_map_view.cpp
@@ -18,6 +18,7 @@
#include <mbgl/gl/context.hpp>
#include <mbgl/util/constants.hpp>
#include <mbgl/util/image.hpp>
+#include <mbgl/util/shared_thread_pool.hpp>
#include "bitmap.hpp"
@@ -29,7 +30,7 @@ NativeMapView::NativeMapView(JNIEnv *env_, jobject obj_, float pixelRatio, int a
availableProcessors(availableProcessors_),
totalMemory(totalMemory_),
fileSource(defaultFileSource(mbgl::android::cachePath + "/mbgl-offline.db", mbgl::android::apkPath)),
- threadPool(4) {
+ threadPool(sharedThreadPool()) {
assert(env_ != nullptr);
assert(obj_ != nullptr);
@@ -47,7 +48,7 @@ NativeMapView::NativeMapView(JNIEnv *env_, jobject obj_, float pixelRatio, int a
map = std::make_unique<mbgl::Map>(
*this, mbgl::Size{ static_cast<uint32_t>(width), static_cast<uint32_t>(height) },
- pixelRatio, fileSource, threadPool, MapMode::Continuous);
+ pixelRatio, fileSource, *threadPool, MapMode::Continuous);
float zoomFactor = map->getMaxZoom() - map->getMinZoom() + 1;
float cpuFactor = availableProcessors;
diff --git a/platform/android/src/native_map_view.hpp b/platform/android/src/native_map_view.hpp
index 42c8a9f40c..e776b839fc 100755
--- a/platform/android/src/native_map_view.hpp
+++ b/platform/android/src/native_map_view.hpp
@@ -97,7 +97,7 @@ private:
// Ensure these are initialised last
mbgl::DefaultFileSource& fileSource;
- mbgl::ThreadPool threadPool;
+ std::shared_ptr<mbgl::ThreadPool> threadPool;
std::unique_ptr<mbgl::Map> map;
mbgl::EdgeInsets insets;
diff --git a/platform/default/mbgl/util/default_thread_pool.cpp b/platform/default/mbgl/util/default_thread_pool.cpp
index 92c0f06745..d3950bb8aa 100644
--- a/platform/default/mbgl/util/default_thread_pool.cpp
+++ b/platform/default/mbgl/util/default_thread_pool.cpp
@@ -1,12 +1,16 @@
#include <mbgl/util/default_thread_pool.hpp>
#include <mbgl/actor/mailbox.hpp>
+#include <mbgl/util/platform.hpp>
+#include <mbgl/util/string.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] () {
+ threads.emplace_back([this, i]() {
+ platform::setCurrentThreadName(std::string{ "Worker " } + util::toString(i + 1));
+
while (true) {
std::unique_lock<std::mutex> lock(mutex);
diff --git a/platform/default/mbgl/util/shared_thread_pool.cpp b/platform/default/mbgl/util/shared_thread_pool.cpp
new file mode 100644
index 0000000000..7a42df21de
--- /dev/null
+++ b/platform/default/mbgl/util/shared_thread_pool.cpp
@@ -0,0 +1,14 @@
+#include "shared_thread_pool.hpp"
+
+namespace mbgl {
+
+std::shared_ptr<ThreadPool> sharedThreadPool() {
+ static std::weak_ptr<ThreadPool> weak;
+ auto pool = weak.lock();
+ if (!pool) {
+ weak = pool = std::make_shared<ThreadPool>(4);
+ }
+ return pool;
+}
+
+} // namespace mbgl
diff --git a/platform/default/mbgl/util/shared_thread_pool.hpp b/platform/default/mbgl/util/shared_thread_pool.hpp
new file mode 100644
index 0000000000..04a3cb58d5
--- /dev/null
+++ b/platform/default/mbgl/util/shared_thread_pool.hpp
@@ -0,0 +1,9 @@
+#pragma once
+
+#include <mbgl/util/default_thread_pool.hpp>
+
+namespace mbgl {
+
+std::shared_ptr<ThreadPool> sharedThreadPool();
+
+} // namespace mbgl
diff --git a/platform/ios/config.cmake b/platform/ios/config.cmake
index b37aae9f32..72e1c88525 100644
--- a/platform/ios/config.cmake
+++ b/platform/ios/config.cmake
@@ -58,6 +58,8 @@ macro(mbgl_platform_core)
PRIVATE platform/default/mbgl/gl/offscreen_view.hpp
# Thread pool
+ PRIVATE platform/default/mbgl/util/shared_thread_pool.cpp
+ PRIVATE platform/default/mbgl/util/shared_thread_pool.hpp
PRIVATE platform/default/mbgl/util/default_thread_pool.cpp
PRIVATE platform/default/mbgl/util/default_thread_pool.cpp
)
diff --git a/platform/ios/src/MGLMapView.mm b/platform/ios/src/MGLMapView.mm
index 3830b6b044..7ff327c237 100644
--- a/platform/ios/src/MGLMapView.mm
+++ b/platform/ios/src/MGLMapView.mm
@@ -29,6 +29,7 @@
#include <mbgl/util/default_styles.hpp>
#include <mbgl/util/chrono.hpp>
#include <mbgl/util/run_loop.hpp>
+#include <mbgl/util/shared_thread_pool.hpp>
#import "Mapbox.h"
#import "MGLFeature_Private.h"
@@ -265,7 +266,7 @@ public:
{
mbgl::Map *_mbglMap;
MBGLView *_mbglView;
- mbgl::ThreadPool *_mbglThreadPool;
+ std::shared_ptr<mbgl::ThreadPool> _mbglThreadPool;
BOOL _opaque;
@@ -421,7 +422,7 @@ public:
// setup mbgl map
mbgl::DefaultFileSource *mbglFileSource = [MGLOfflineStorage sharedOfflineStorage].mbglFileSource;
const float scaleFactor = [UIScreen instancesRespondToSelector:@selector(nativeScale)] ? [[UIScreen mainScreen] nativeScale] : [[UIScreen mainScreen] scale];
- _mbglThreadPool = new mbgl::ThreadPool(4);
+ _mbglThreadPool = mbgl::sharedThreadPool();
_mbglMap = new mbgl::Map(*_mbglView, self.size, scaleFactor, *mbglFileSource, *_mbglThreadPool, mbgl::MapMode::Continuous, mbgl::GLContextMode::Unique, mbgl::ConstrainMode::None, mbgl::ViewportMode::Default);
[self validateTileCacheSize];
@@ -687,12 +688,6 @@ public:
_mbglView = nullptr;
}
- if (_mbglThreadPool)
- {
- delete _mbglThreadPool;
- _mbglThreadPool = nullptr;
- }
-
if ([[EAGLContext currentContext] isEqual:_context])
{
[EAGLContext setCurrentContext:nil];
diff --git a/platform/macos/config.cmake b/platform/macos/config.cmake
index 6ccec6465f..309d8e82f3 100644
--- a/platform/macos/config.cmake
+++ b/platform/macos/config.cmake
@@ -54,6 +54,8 @@ macro(mbgl_platform_core)
PRIVATE platform/default/mbgl/gl/offscreen_view.hpp
# Thread pool
+ PRIVATE platform/default/mbgl/util/shared_thread_pool.cpp
+ PRIVATE platform/default/mbgl/util/shared_thread_pool.hpp
PRIVATE platform/default/mbgl/util/default_thread_pool.cpp
PRIVATE platform/default/mbgl/util/default_thread_pool.cpp
)
diff --git a/platform/macos/src/MGLMapView.mm b/platform/macos/src/MGLMapView.mm
index 7776e54183..7709632d13 100644
--- a/platform/macos/src/MGLMapView.mm
+++ b/platform/macos/src/MGLMapView.mm
@@ -11,6 +11,7 @@
#import "MGLMultiPoint_Private.h"
#import "MGLOfflineStorage_Private.h"
#import "MGLStyle_Private.h"
+#import "MGLFoundation_Private.h"
#import "MGLAccountManager.h"
#import "MGLMapCamera.h"
@@ -35,6 +36,7 @@
#import <mbgl/util/constants.hpp>
#import <mbgl/util/chrono.hpp>
#import <mbgl/util/run_loop.hpp>
+#import <mbgl/util/shared_thread_pool.hpp>
#import <map>
#import <unordered_map>
@@ -146,7 +148,7 @@ public:
/// Cross-platform map view controller.
mbgl::Map *_mbglMap;
MGLMapViewImpl *_mbglView;
- mbgl::ThreadPool *_mbglThreadPool;
+ std::shared_ptr<mbgl::ThreadPool> _mbglThreadPool;
NSPanGestureRecognizer *_panGestureRecognizer;
NSMagnificationGestureRecognizer *_magnificationGestureRecognizer;
@@ -260,7 +262,7 @@ public:
mbgl::DefaultFileSource* mbglFileSource = [MGLOfflineStorage sharedOfflineStorage].mbglFileSource;
- _mbglThreadPool = new mbgl::ThreadPool(4);
+ _mbglThreadPool = mbgl::sharedThreadPool();
_mbglMap = new mbgl::Map(*_mbglView, self.size, [NSScreen mainScreen].backingScaleFactor, *mbglFileSource, *_mbglThreadPool, mbgl::MapMode::Continuous, mbgl::GLContextMode::Unique, mbgl::ConstrainMode::None, mbgl::ViewportMode::Default);
[self validateTileCacheSize];
@@ -515,10 +517,6 @@ public:
delete _mbglView;
_mbglView = nullptr;
}
- if (_mbglThreadPool) {
- delete _mbglThreadPool;
- _mbglThreadPool = nullptr;
- }
}
- (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(__unused NSDictionary *)change context:(void *)context {
diff --git a/platform/qt/qt.cmake b/platform/qt/qt.cmake
index 32ffe89bfe..cee0d1080c 100644
--- a/platform/qt/qt.cmake
+++ b/platform/qt/qt.cmake
@@ -31,8 +31,10 @@ set(MBGL_QT_FILES
PRIVATE platform/default/logging_stderr.cpp
# Thread pool
+ PRIVATE platform/default/mbgl/util/shared_thread_pool.cpp
+ PRIVATE platform/default/mbgl/util/shared_thread_pool.hpp
PRIVATE platform/default/mbgl/util/default_thread_pool.cpp
- PRIVATE platform/default/mbgl/util/default_thread_pool.cpp
+ PRIVATE platform/default/mbgl/util/default_thread_pool.hpp
# Platform integration
PRIVATE platform/qt/src/async_task.cpp
diff --git a/platform/qt/src/qmapboxgl.cpp b/platform/qt/src/qmapboxgl.cpp
index ca42f51ebd..cf9d5f39d6 100644
--- a/platform/qt/src/qmapboxgl.cpp
+++ b/platform/qt/src/qmapboxgl.cpp
@@ -22,6 +22,7 @@
#include <mbgl/util/geo.hpp>
#include <mbgl/util/geometry.hpp>
#include <mbgl/util/run_loop.hpp>
+#include <mbgl/util/shared_thread_pool.hpp>
#include <mbgl/util/traits.hpp>
#if QT_VERSION >= 0x050000
@@ -1532,10 +1533,10 @@ QMapboxGLPrivate::QMapboxGLPrivate(QMapboxGL *q, const QMapboxGLSettings &settin
settings.cacheDatabasePath().toStdString(),
settings.assetPath().toStdString(),
settings.cacheDatabaseMaximumSize()))
- , threadPool(4)
+ , threadPool(mbgl::sharedThreadPool())
, mapObj(std::make_unique<mbgl::Map>(
*this, mbgl::Size{ static_cast<uint32_t>(size.width()), static_cast<uint32_t>(size.height()) },
- pixelRatio, *fileSourceObj, threadPool,
+ pixelRatio, *fileSourceObj, *threadPool,
mbgl::MapMode::Continuous,
static_cast<mbgl::GLContextMode>(settings.contextMode()),
static_cast<mbgl::ConstrainMode>(settings.constrainMode()),
diff --git a/platform/qt/src/qmapboxgl_p.hpp b/platform/qt/src/qmapboxgl_p.hpp
index e2edf3f96c..6894e0de8b 100644
--- a/platform/qt/src/qmapboxgl_p.hpp
+++ b/platform/qt/src/qmapboxgl_p.hpp
@@ -38,7 +38,7 @@ public:
QMapboxGL *q_ptr { nullptr };
std::unique_ptr<mbgl::DefaultFileSource> fileSourceObj;
- mbgl::ThreadPool threadPool;
+ std::shared_ptr<mbgl::ThreadPool> threadPool;
std::unique_ptr<mbgl::Map> mapObj;
bool dirty { false };