summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorAlexander Shalamov <alexander.shalamov@mapbox.com>2020-01-31 17:06:37 +0200
committerAlexander Shalamov <alexander.shalamov@mapbox.com>2020-02-06 23:54:19 +0200
commitbb85ec442dd7b5b0966d73bc6b868d33bb03e5e9 (patch)
treee0fef3271ab6e4f21b05f4f00dd6aa4386efd499 /src
parent4be2fa4f9af29cfad869412d2d794964554d4eba (diff)
downloadqtlocation-mapboxgl-bb85ec442dd7b5b0966d73bc6b868d33bb03e5e9.tar.gz
[core] Add hooks for setting experimental thread priorities for mbgl threads
Diffstat (limited to 'src')
-rw-r--r--src/core-files.json3
-rw-r--r--src/mbgl/util/thread.cpp19
-rw-r--r--src/mbgl/util/thread_pool.cpp11
3 files changed, 31 insertions, 2 deletions
diff --git a/src/core-files.json b/src/core-files.json
index 3c0e128b18..fe68df16bf 100644
--- a/src/core-files.json
+++ b/src/core-files.json
@@ -62,6 +62,7 @@
"src/mbgl/map/transform_state.cpp",
"src/mbgl/math/log2.cpp",
"src/mbgl/platform/gl_functions.cpp",
+ "src/mbgl/platform/settings.cpp",
"src/mbgl/programs/background_program.cpp",
"src/mbgl/programs/circle_program.cpp",
"src/mbgl/programs/clipping_mask_program.cpp",
@@ -316,6 +317,7 @@
"src/mbgl/util/rapidjson.cpp",
"src/mbgl/util/stopwatch.cpp",
"src/mbgl/util/string.cpp",
+ "src/mbgl/util/thread.cpp",
"src/mbgl/util/thread_pool.cpp",
"src/mbgl/util/tile_cover.cpp",
"src/mbgl/util/tile_cover_impl.cpp",
@@ -369,6 +371,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/settings.hpp": "include/mbgl/platform/settings.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",
diff --git a/src/mbgl/util/thread.cpp b/src/mbgl/util/thread.cpp
new file mode 100644
index 0000000000..016d23a928
--- /dev/null
+++ b/src/mbgl/util/thread.cpp
@@ -0,0 +1,19 @@
+#include <functional>
+#include <mbgl/platform/settings.hpp>
+#include <mbgl/util/platform.hpp>
+
+namespace mbgl {
+namespace util {
+std::function<void()> makeThreadPrioritySetter(std::string threadType_) {
+ return [threadType = std::move(threadType_)] {
+ auto& settings = platform::Settings::getInstance();
+ auto value = settings.get(threadType);
+ if (auto* priority = value.getDouble()) {
+ platform::setCurrentThreadPriority(*priority);
+ } else {
+ platform::makeThreadLowPriority();
+ }
+ };
+}
+} // namespace util
+} // namespace mbgl
diff --git a/src/mbgl/util/thread_pool.cpp b/src/mbgl/util/thread_pool.cpp
index 040e996dd4..e1c18a45b5 100644
--- a/src/mbgl/util/thread_pool.cpp
+++ b/src/mbgl/util/thread_pool.cpp
@@ -1,8 +1,9 @@
#include <mbgl/util/thread_pool.hpp>
+#include <mbgl/platform/settings.hpp>
+#include <mbgl/platform/thread.hpp>
#include <mbgl/util/platform.hpp>
#include <mbgl/util/string.hpp>
-#include <mbgl/platform/thread.hpp>
namespace mbgl {
@@ -17,7 +18,13 @@ void ThreadedSchedulerBase::terminate() {
}
std::thread ThreadedSchedulerBase::makeSchedulerThread(size_t index) {
- return std::thread([this, index]() {
+ return std::thread([this, index] {
+ auto& settings = platform::Settings::getInstance();
+ auto value = settings.get(platform::EXPERIMENTAL_THREAD_PRIORITY_WORKER);
+ if (auto* priority = value.getDouble()) {
+ platform::setCurrentThreadPriority(*priority);
+ }
+
platform::setCurrentThreadName(std::string{"Worker "} + util::toString(index + 1));
platform::attachThread();