summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorŁukasz Paczos <lukas.paczos@gmail.com>2019-05-21 12:45:58 +0200
committerŁukasz Paczos <lukasz.paczos@mapbox.com>2019-05-22 15:52:55 +0200
commit470b99e7957b44fb929fe95d0a8b58c41583e7f6 (patch)
treecedc7870a2c2ae347bfb523cc47e5d14d21a3686
parent7d6255c8605bd18a7c7d90de19346392a51c90b7 (diff)
downloadqtlocation-mapboxgl-470b99e7957b44fb929fe95d0a8b58c41583e7f6.tar.gz
[android] attach/detach core thread pool's threads to JVM
-rw-r--r--platform/android/src/run_loop.cpp6
-rw-r--r--platform/android/src/run_loop_impl.hpp3
-rw-r--r--platform/android/src/thread.cpp12
3 files changed, 12 insertions, 9 deletions
diff --git a/platform/android/src/run_loop.cpp b/platform/android/src/run_loop.cpp
index fc45539e5e..2966ecdfb0 100644
--- a/platform/android/src/run_loop.cpp
+++ b/platform/android/src/run_loop.cpp
@@ -81,9 +81,6 @@ private:
};
RunLoop::Impl::Impl(RunLoop* runLoop_, RunLoop::Type type) : runLoop(runLoop_) {
- using namespace mbgl::android;
- detach = attach_jni_thread(theJVM, &env, platform::getCurrentThreadName());
-
loop = ALooper_prepare(0);
assert(loop);
@@ -129,9 +126,6 @@ RunLoop::Impl::~Impl() {
}
ALooper_release(loop);
-
- using namespace mbgl::android;
- detach_jni_thread(theJVM, &env, detach);
}
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 721c63a531..cd0a72306e 100644
--- a/platform/android/src/thread.cpp
+++ b/platform/android/src/thread.cpp
@@ -5,11 +5,17 @@
#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";
@@ -35,9 +41,15 @@ void makeThreadLowPriority() {
}
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);
}
} // namespace platform