summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
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
commitf34760650995f475f6e01eceb9a083ac86e99287 (patch)
tree00ddb45e4ce94d6ddf2e25bc3786bf7b422baa8b
parent03a2ff595bd466186e79d8e9274cf2d7362c7ae8 (diff)
downloadqtlocation-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.cpp7
-rw-r--r--platform/android/src/run_loop_impl.hpp3
-rw-r--r--platform/android/src/thread.cpp20
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