Files
strato/app/src/main/cpp/skyline/jvm.cpp
◱ PixelyIon 48d47a2b25 Move from dependency on JNI and Implement AtomicMutex
This commit is the start of moving towards a lockless and faster kernel which can run multiple independent threads with fast userspace synchronization.
2020-02-15 10:25:14 +00:00

38 lines
1.1 KiB
C++

#include "jvm.h"
thread_local JNIEnv *env;
namespace skyline {
JvmManager::JvmManager(JNIEnv *environ, jobject instance) : instance(instance), instanceClass(reinterpret_cast<jclass>(environ->NewGlobalRef(environ->GetObjectClass(instance)))) {
env = environ;
if(env->GetJavaVM(&vm) < 0)
throw exception("Cannot get JavaVM from environment");
}
void JvmManager::AttachThread() {
if(!env)
vm->AttachCurrentThread(&env, nullptr);
}
void JvmManager::DetachThread() {
if(env)
vm->DetachCurrentThread();
}
JNIEnv* JvmManager::GetEnv() {
return env;
}
jobject JvmManager::GetField(const char *key, const char *signature) {
return env->GetObjectField(instance, env->GetFieldID(instanceClass, key, signature));
}
bool JvmManager::CheckNull(const char *key, const char *signature) {
return env->IsSameObject(env->GetObjectField(instance, env->GetFieldID(instanceClass, key, signature)), nullptr);
}
bool JvmManager::CheckNull(jobject& object) {
return env->IsSameObject(object, nullptr);
}
}