summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorŁukasz Paczos <lukas.paczos@gmail.com>2019-05-21 12:45:01 +0200
committerŁukasz Paczos <lukasz.paczos@mapbox.com>2019-05-22 15:52:55 +0200
commit7d6255c8605bd18a7c7d90de19346392a51c90b7 (patch)
tree65b52ac4f4b4e64598dcc885a161251d62c5d38e
parente79080771b36ad3a4be0dee8ca12032cd1c8488a (diff)
downloadqtlocation-mapboxgl-7d6255c8605bd18a7c7d90de19346392a51c90b7.tar.gz
[core] option to perform platform specific operations when creating/destroying core threads
-rw-r--r--include/mbgl/platform/thread.hpp13
-rw-r--r--include/mbgl/util/thread.hpp3
-rw-r--r--platform/android/src/thread.cpp7
-rw-r--r--platform/darwin/src/nsthread.mm7
-rw-r--r--platform/default/src/mbgl/util/thread.cpp7
-rw-r--r--platform/qt/src/thread.cpp7
-rw-r--r--src/core-files.json1
-rw-r--r--src/mbgl/util/thread_pool.cpp3
8 files changed, 48 insertions, 0 deletions
diff --git a/include/mbgl/platform/thread.hpp b/include/mbgl/platform/thread.hpp
new file mode 100644
index 0000000000..72899a4fd8
--- /dev/null
+++ b/include/mbgl/platform/thread.hpp
@@ -0,0 +1,13 @@
+#pragma once
+
+namespace mbgl {
+namespace platform {
+
+// Called when a thread is created
+void attachThread();
+
+// Called when a thread is destroyed
+void detachThread();
+
+} // namespace platform
+} // namespace mbgl
diff --git a/include/mbgl/util/thread.hpp b/include/mbgl/util/thread.hpp
index bc58427349..0e9bd8f759 100644
--- a/include/mbgl/util/thread.hpp
+++ b/include/mbgl/util/thread.hpp
@@ -6,6 +6,7 @@
#include <mbgl/util/platform.hpp>
#include <mbgl/util/run_loop.hpp>
#include <mbgl/util/util.hpp>
+#include <mbgl/platform/thread.hpp>
#include <cassert>
#include <future>
@@ -55,6 +56,7 @@ public:
] () mutable {
platform::setCurrentThreadName(name);
platform::makeThreadLowPriority();
+ platform::attachThread();
util::RunLoop loop_(util::RunLoop::Type::New);
loop = &loop_;
@@ -67,6 +69,7 @@ public:
(void) establishedActor;
loop = nullptr;
+ platform::detachThread();
});
}
diff --git a/platform/android/src/thread.cpp b/platform/android/src/thread.cpp
index c708dfdceb..721c63a531 100644
--- a/platform/android/src/thread.cpp
+++ b/platform/android/src/thread.cpp
@@ -1,5 +1,6 @@
#include <mbgl/util/logging.hpp>
#include <mbgl/util/platform.hpp>
+#include <mbgl/platform/thread.hpp>
#include <sys/prctl.h>
#include <sys/resource.h>
@@ -33,5 +34,11 @@ void makeThreadLowPriority() {
setpriority(PRIO_PROCESS, 0, 19);
}
+void attachThread() {
+}
+
+void detachThread() {
+}
+
} // namespace platform
} // namespace mbgl
diff --git a/platform/darwin/src/nsthread.mm b/platform/darwin/src/nsthread.mm
index 458db968d8..f7edcdf5d6 100644
--- a/platform/darwin/src/nsthread.mm
+++ b/platform/darwin/src/nsthread.mm
@@ -1,6 +1,7 @@
#import <Foundation/Foundation.h>
#include <mbgl/util/platform.hpp>
+#include <mbgl/platform/thread.hpp>
#include <pthread.h>
@@ -23,5 +24,11 @@ void makeThreadLowPriority() {
[[NSThread currentThread] setThreadPriority:0.0];
}
+void attachThread() {
+}
+
+void detachThread() {
+}
+
}
}
diff --git a/platform/default/src/mbgl/util/thread.cpp b/platform/default/src/mbgl/util/thread.cpp
index c7c79b4fb0..28772d9561 100644
--- a/platform/default/src/mbgl/util/thread.cpp
+++ b/platform/default/src/mbgl/util/thread.cpp
@@ -1,4 +1,5 @@
#include <mbgl/util/platform.hpp>
+#include <mbgl/platform/thread.hpp>
#include <mbgl/util/logging.hpp>
#include <string>
@@ -33,5 +34,11 @@ void makeThreadLowPriority() {
}
}
+void attachThread() {
+}
+
+void detachThread() {
+}
+
} // namespace platform
} // namespace mbgl
diff --git a/platform/qt/src/thread.cpp b/platform/qt/src/thread.cpp
index ade3629b63..103b6d74f1 100644
--- a/platform/qt/src/thread.cpp
+++ b/platform/qt/src/thread.cpp
@@ -1,4 +1,5 @@
#include <mbgl/util/platform.hpp>
+#include <mbgl/platform/thread.hpp>
#include <string>
@@ -15,5 +16,11 @@ void setCurrentThreadName(const std::string&) {
void makeThreadLowPriority() {
}
+void attachThread() {
+}
+
+void detachThread() {
+}
+
} // namespace platform
} // namespace mbgl
diff --git a/src/core-files.json b/src/core-files.json
index 2385b18c3f..05870661db 100644
--- a/src/core-files.json
+++ b/src/core-files.json
@@ -351,6 +351,7 @@
"mbgl/math/minmax.hpp": "include/mbgl/math/minmax.hpp",
"mbgl/math/wrap.hpp": "include/mbgl/math/wrap.hpp",
"mbgl/platform/gl_functions.hpp": "include/mbgl/platform/gl_functions.hpp",
+ "mbgl/platform/thread.hpp": "include/mbgl/platform/thread.hpp",
"mbgl/renderer/query.hpp": "include/mbgl/renderer/query.hpp",
"mbgl/renderer/renderer.hpp": "include/mbgl/renderer/renderer.hpp",
"mbgl/renderer/renderer_frontend.hpp": "include/mbgl/renderer/renderer_frontend.hpp",
diff --git a/src/mbgl/util/thread_pool.cpp b/src/mbgl/util/thread_pool.cpp
index 79c2f75012..e839d1b4be 100644
--- a/src/mbgl/util/thread_pool.cpp
+++ b/src/mbgl/util/thread_pool.cpp
@@ -2,6 +2,7 @@
#include <mbgl/util/platform.hpp>
#include <mbgl/util/string.hpp>
+#include <mbgl/platform/thread.hpp>
namespace mbgl {
@@ -11,6 +12,7 @@ ThreadPool::ThreadPool(std::size_t count) {
for (std::size_t i = 0; i < count; ++i) {
threads.emplace_back([this, i]() {
platform::setCurrentThreadName(std::string{ "Worker " } + util::toString(i + 1));
+ platform::attachThread();
while (true) {
std::unique_lock<std::mutex> lock(mutex);
@@ -20,6 +22,7 @@ ThreadPool::ThreadPool(std::size_t count) {
});
if (terminate) {
+ platform::detachThread();
return;
}