Merge "BBQ: Attach calling thread to jvm if needed" into tm-qpr-dev

This commit is contained in:
Vishnu Nair
2022-07-11 15:12:54 +00:00
committed by Android (Google) Code Review

View File

@@ -41,7 +41,12 @@ struct {
static JNIEnv* getenv(JavaVM* vm) { static JNIEnv* getenv(JavaVM* vm) {
JNIEnv* env; JNIEnv* env;
if (vm->GetEnv(reinterpret_cast<void**>(&env), JNI_VERSION_1_6) != JNI_OK) { auto result = vm->GetEnv(reinterpret_cast<void**>(&env), JNI_VERSION_1_6);
if (result == JNI_EDETACHED) {
if (vm->AttachCurrentThreadAsDaemon(&env, nullptr) != JNI_OK) {
LOG_ALWAYS_FATAL("Failed to AttachCurrentThread!");
}
} else if (result != JNI_OK) {
LOG_ALWAYS_FATAL("Failed to get JNIEnv for JavaVM: %p", vm); LOG_ALWAYS_FATAL("Failed to get JNIEnv for JavaVM: %p", vm);
} }
return env; return env;
@@ -60,15 +65,15 @@ public:
} }
~TransactionHangCallbackWrapper() { ~TransactionHangCallbackWrapper() {
if (mTransactionHangObject) { if (mTransactionHangObject != nullptr) {
getenv()->DeleteGlobalRef(mTransactionHangObject); getenv(mVm)->DeleteGlobalRef(mTransactionHangObject);
mTransactionHangObject = nullptr; mTransactionHangObject = nullptr;
} }
} }
void onTransactionHang(bool isGpuHang) { void onTransactionHang(bool isGpuHang) {
if (mTransactionHangObject) { if (mTransactionHangObject) {
getenv()->CallVoidMethod(mTransactionHangObject, getenv(mVm)->CallVoidMethod(mTransactionHangObject,
gTransactionHangCallback.onTransactionHang, isGpuHang); gTransactionHangCallback.onTransactionHang, isGpuHang);
} }
} }
@@ -76,12 +81,6 @@ public:
private: private:
JavaVM* mVm; JavaVM* mVm;
jobject mTransactionHangObject; jobject mTransactionHangObject;
JNIEnv* getenv() {
JNIEnv* env;
mVm->GetEnv(reinterpret_cast<void**>(&env), JNI_VERSION_1_6);
return env;
}
}; };
static jlong nativeCreate(JNIEnv* env, jclass clazz, jstring jName, static jlong nativeCreate(JNIEnv* env, jclass clazz, jstring jName,