diff options
author | Łukasz Paczos <lukas.paczos@gmail.com> | 2019-05-21 12:45:58 +0200 |
---|---|---|
committer | Łukasz Paczos <lukas.paczos@gmail.com> | 2019-05-21 14:43:43 +0200 |
commit | f34760650995f475f6e01eceb9a083ac86e99287 (patch) | |
tree | 00ddb45e4ce94d6ddf2e25bc3786bf7b422baa8b | |
parent | 03a2ff595bd466186e79d8e9274cf2d7362c7ae8 (diff) | |
download | qtlocation-mapboxgl-upstream/lp-thread-detaching-14048.tar.gz |
[android] attach/detach core thread pool's threads to JVMupstream/lp-thread-detaching-14048
-rw-r--r-- | platform/android/src/run_loop.cpp | 7 | ||||
-rw-r--r-- | platform/android/src/run_loop_impl.hpp | 3 | ||||
-rw-r--r-- | platform/android/src/thread.cpp | 20 |
3 files changed, 23 insertions, 7 deletions
diff --git a/platform/android/src/run_loop.cpp b/platform/android/src/run_loop.cpp index fc45539e5e..d8c9ade3e8 100644 --- a/platform/android/src/run_loop.cpp +++ b/platform/android/src/run_loop.cpp @@ -1,6 +1,7 @@ #include "run_loop_impl.hpp" #include <mbgl/util/platform.hpp> +#include <mbgl/platform/thread.hpp> #include <mbgl/util/thread_local.hpp> #include <mbgl/util/thread.hpp> #include <mbgl/util/timer.hpp> @@ -81,8 +82,7 @@ private: }; RunLoop::Impl::Impl(RunLoop* runLoop_, RunLoop::Type type) : runLoop(runLoop_) { - using namespace mbgl::android; - detach = attach_jni_thread(theJVM, &env, platform::getCurrentThreadName()); + platform::attachThread(); loop = ALooper_prepare(0); assert(loop); @@ -130,8 +130,7 @@ RunLoop::Impl::~Impl() { ALooper_release(loop); - using namespace mbgl::android; - detach_jni_thread(theJVM, &env, detach); + platform::detachThread(); } void RunLoop::Impl::wake() { diff --git a/platform/android/src/run_loop_impl.hpp b/platform/android/src/run_loop_impl.hpp index 0a9ea156fd..a76d636188 100644 --- a/platform/android/src/run_loop_impl.hpp +++ b/platform/android/src/run_loop_impl.hpp @@ -47,9 +47,6 @@ private: int fds[2]; - JNIEnv *env = nullptr; - bool detach = false; - std::unique_ptr<Thread<Alarm>> alarm; std::mutex mutex; diff --git a/platform/android/src/thread.cpp b/platform/android/src/thread.cpp index c708dfdceb..f0a346ec5a 100644 --- a/platform/android/src/thread.cpp +++ b/platform/android/src/thread.cpp @@ -1,14 +1,21 @@ #include <mbgl/util/logging.hpp> #include <mbgl/util/platform.hpp> +#include <mbgl/platform/thread.hpp> #include <sys/prctl.h> #include <sys/resource.h> +#include <cassert> +#include "jni.hpp" + // Implementation based on Chromium's platform_thread_android.cc. namespace mbgl { namespace platform { +thread_local static JNIEnv* env; +thread_local static bool detach; + std::string getCurrentThreadName() { char name[32] = "unknown"; @@ -33,5 +40,18 @@ void makeThreadLowPriority() { setpriority(PRIO_PROCESS, 0, 19); } +void attachThread() { + using namespace android; + assert(env == nullptr); + detach = attach_jni_thread(theJVM, &env, platform::getCurrentThreadName()); +} + +void detachThread() { + using namespace android; + assert(env); + detach_jni_thread(theJVM, &env, detach); + detach = false; +} + } // namespace platform } // namespace mbgl |