Merge "BBQ: Attach calling thread to jvm if needed" into tm-qpr-dev am: cdb26776bb
Original change: https://googleplex-android-review.googlesource.com/c/platform/frameworks/base/+/19120793 Change-Id: Ia838f42a588455a11fbca5d2ee4cc3d1d6bbe2a1 Signed-off-by: Automerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>
This commit is contained in:
@@ -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,28 +65,22 @@ 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);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
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,
|
||||||
|
|||||||
Reference in New Issue
Block a user