diff options
author | Konstantin Käfer <mail@kkaefer.com> | 2015-04-28 18:23:32 +0200 |
---|---|---|
committer | Konstantin Käfer <mail@kkaefer.com> | 2015-05-04 17:33:05 +0200 |
commit | 27d8e82e1ce7c6210a33f100cfb4f157ea9583d2 (patch) | |
tree | e97de81f16743ac7e527f796adc416cdc91e911c /src | |
parent | 7390062c4589877dfc51e0b6f84e2fd5446b7a96 (diff) | |
download | qtlocation-mapboxgl-27d8e82e1ce7c6210a33f100cfb4f157ea9583d2.tar.gz |
lower thread priority of worker threads
Diffstat (limited to 'src')
-rw-r--r-- | src/mbgl/map/map.cpp | 2 | ||||
-rw-r--r-- | src/mbgl/storage/default_file_source.cpp | 2 | ||||
-rw-r--r-- | src/mbgl/util/thread.hpp | 14 | ||||
-rw-r--r-- | src/mbgl/util/worker.cpp | 3 |
4 files changed, 16 insertions, 5 deletions
diff --git a/src/mbgl/map/map.cpp b/src/mbgl/map/map.cpp index be2355206c..0464ed3f1e 100644 --- a/src/mbgl/map/map.cpp +++ b/src/mbgl/map/map.cpp @@ -11,7 +11,7 @@ namespace mbgl { Map::Map(View& view, FileSource& fileSource, MapMode mode, bool startPaused) : data(util::make_unique<MapData>(view, mode)), - context(util::make_unique<util::Thread<MapContext>>("Map", view, fileSource, *data, startPaused)) + context(util::make_unique<util::Thread<MapContext>>("Map", util::ThreadPriority::Regular, view, fileSource, *data, startPaused)) { view.initialize(this); } diff --git a/src/mbgl/storage/default_file_source.cpp b/src/mbgl/storage/default_file_source.cpp index 1063b22ecc..ddfcc89845 100644 --- a/src/mbgl/storage/default_file_source.cpp +++ b/src/mbgl/storage/default_file_source.cpp @@ -27,7 +27,7 @@ namespace algo = boost::algorithm; namespace mbgl { DefaultFileSource::DefaultFileSource(FileCache* cache, const std::string& root) - : thread(util::make_unique<util::Thread<Impl>>("FileSource", cache, root)) { + : thread(util::make_unique<util::Thread<Impl>>("FileSource", util::ThreadPriority::Low, cache, root)) { } DefaultFileSource::~DefaultFileSource() { diff --git a/src/mbgl/util/thread.hpp b/src/mbgl/util/thread.hpp index 55c3d4d281..e97872a502 100644 --- a/src/mbgl/util/thread.hpp +++ b/src/mbgl/util/thread.hpp @@ -7,6 +7,7 @@ #include <functional> #include <mbgl/util/run_loop.hpp> +#include <mbgl/platform/platform.hpp> namespace { @@ -34,11 +35,16 @@ namespace util { // Thread<> constructor blocks until the thread and the Object are fully created, so after the // object creation, it's safe to obtain the Object stored in this thread. +enum class ThreadPriority : bool { + Regular, + Low, +}; + template <class Object> class Thread { public: template <class... Args> - Thread(const std::string& name, Args&&... args); + Thread(const std::string& name, ThreadPriority priority, Args&&... args); ~Thread(); // Invoke object->fn(args...) in the runloop thread. @@ -97,7 +103,7 @@ private: template <class Object> template <class... Args> -Thread<Object>::Thread(const std::string& name, Args&&... args) { +Thread<Object>::Thread(const std::string& name, ThreadPriority priority, Args&&... args) { // Note: We're using std::tuple<> to store the arguments because GCC 4.9 has a bug // when expanding parameters packs captured in lambdas. std::tuple<Args...> params = std::forward_as_tuple(::std::forward<Args>(args)...); @@ -109,6 +115,10 @@ Thread<Object>::Thread(const std::string& name, Args&&... args) { (void(name)); #endif + if (priority == ThreadPriority::Low) { + platform::makeThreadLowPriority(); + } + constexpr auto seq = typename integer_sequence<sizeof...(Args)>::type(); run(std::move(params), seq); }); diff --git a/src/mbgl/util/worker.cpp b/src/mbgl/util/worker.cpp index 1a6eaf4d96..9792f1a099 100644 --- a/src/mbgl/util/worker.cpp +++ b/src/mbgl/util/worker.cpp @@ -1,4 +1,5 @@ #include <mbgl/util/worker.hpp> +#include <mbgl/platform/platform.hpp> #include <cassert> @@ -15,7 +16,7 @@ public: Worker::Worker(std::size_t count) { for (std::size_t i = 0; i < count; i++) { - threads.emplace_back(util::make_unique<util::Thread<Impl>>("Worker")); + threads.emplace_back(util::make_unique<util::Thread<Impl>>("Worker", util::ThreadPriority::Low)); } } |