From 7d6255c8605bd18a7c7d90de19346392a51c90b7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C5=81ukasz=20Paczos?= Date: Tue, 21 May 2019 12:45:01 +0200 Subject: [PATCH] [core] option to perform platform specific operations when creating/destroying core threads --- include/mbgl/platform/thread.hpp | 13 +++++++++++++ include/mbgl/util/thread.hpp | 3 +++ platform/android/src/thread.cpp | 7 +++++++ platform/darwin/src/nsthread.mm | 7 +++++++ platform/default/src/mbgl/util/thread.cpp | 7 +++++++ platform/qt/src/thread.cpp | 7 +++++++ src/core-files.json | 1 + src/mbgl/util/thread_pool.cpp | 3 +++ 8 files changed, 48 insertions(+) create mode 100644 include/mbgl/platform/thread.hpp diff --git a/include/mbgl/platform/thread.hpp b/include/mbgl/platform/thread.hpp new file mode 100644 index 000000000..72899a4fd --- /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 bc5842734..0e9bd8f75 100644 --- a/include/mbgl/util/thread.hpp +++ b/include/mbgl/util/thread.hpp @@ -6,6 +6,7 @@ #include #include #include +#include #include #include @@ -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 c708dfdce..721c63a53 100644 --- a/platform/android/src/thread.cpp +++ b/platform/android/src/thread.cpp @@ -1,5 +1,6 @@ #include #include +#include #include #include @@ -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 458db968d..f7edcdf5d 100644 --- a/platform/darwin/src/nsthread.mm +++ b/platform/darwin/src/nsthread.mm @@ -1,6 +1,7 @@ #import #include +#include #include @@ -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 c7c79b4fb..28772d956 100644 --- a/platform/default/src/mbgl/util/thread.cpp +++ b/platform/default/src/mbgl/util/thread.cpp @@ -1,4 +1,5 @@ #include +#include #include #include @@ -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 ade3629b6..103b6d74f 100644 --- a/platform/qt/src/thread.cpp +++ b/platform/qt/src/thread.cpp @@ -1,4 +1,5 @@ #include +#include #include @@ -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 2385b18c3..05870661d 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 79c2f7501..e839d1b4b 100644 --- a/src/mbgl/util/thread_pool.cpp +++ b/src/mbgl/util/thread_pool.cpp @@ -2,6 +2,7 @@ #include #include +#include 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 lock(mutex); @@ -20,6 +22,7 @@ ThreadPool::ThreadPool(std::size_t count) { }); if (terminate) { + platform::detachThread(); return; }