From 1c94d56a1176eb2ba8017ed93282fcce0f40d07c Mon Sep 17 00:00:00 2001 From: Mis012 Date: Tue, 27 Dec 2022 17:14:30 +0100 Subject: [PATCH] src/api-impl-jni/util.c: add caching for SurfaceHolder; add gdb helper functions --- src/api-impl-jni/util.c | 26 ++++++++++++++++++++++++++ src/api-impl-jni/util.h | 4 ++++ 2 files changed, 30 insertions(+) diff --git a/src/api-impl-jni/util.c b/src/api-impl-jni/util.c index 3d0cdcdc..035a6f6e 100644 --- a/src/api-impl-jni/util.c +++ b/src/api-impl-jni/util.c @@ -18,8 +18,31 @@ int attribute_set_get_int(JNIEnv *env, jobject attrs, char *attribute, char *sch return (*env)->CallIntMethod(env, attrs, handle_cache.attribute_set.getAttributeValue_int, _JSTRING(schema), _JSTRING(attribute), default_value); } +JavaVM *jvm; + +// TODO: use this everywhere, not just for gdb helper functions +JNIEnv * get_jni_env(void) +{ + JNIEnv *env; + (*jvm)->GetEnv(jvm, (void**)&env, JNI_VERSION_1_6); + return env; +} + +JNIEnv * _gdb_get_jni_env(void) +{ + return get_jni_env(); +} + +void _gdb_get_java_stack_trace(void) +{ + JNIEnv *env = get_jni_env(); + (*env)->ExceptionDescribe(env); +} + void set_up_handle_cache(JNIEnv *env, char *apk_main_activity_class) { + (*env)->GetJavaVM(env, &jvm); + handle_cache.apk_main_activity.class = _REF((*env)->FindClass(env, apk_main_activity_class)); if((*env)->ExceptionCheck(env)) (*env)->ExceptionDescribe(env); @@ -71,6 +94,9 @@ void set_up_handle_cache(JNIEnv *env, char *apk_main_activity_class) handle_cache.input_queue_callback.class = _REF((*env)->FindClass(env, "android/view/InputQueue$Callback")); handle_cache.input_queue_callback.onInputQueueCreated = _METHOD(handle_cache.input_queue_callback.class, "onInputQueueCreated", "(Landroid/view/InputQueue;)V"); + handle_cache.surface_holder_callback.class = _REF((*env)->FindClass(env, "android/view/SurfaceHolder$Callback")); + handle_cache.surface_holder_callback.surfaceCreated = _METHOD(handle_cache.surface_holder_callback.class, "surfaceCreated", "(Landroid/view/SurfaceHolder;)V"); + handle_cache.view.class = _REF((*env)->FindClass(env, "android/view/View")); if((*env)->ExceptionCheck(env)) (*env)->ExceptionDescribe(env); diff --git a/src/api-impl-jni/util.h b/src/api-impl-jni/util.h index 70dc412a..2fd4a23f 100644 --- a/src/api-impl-jni/util.h +++ b/src/api-impl-jni/util.h @@ -61,6 +61,10 @@ struct handle_cache { jclass class; jmethodID onInputQueueCreated; } input_queue_callback; + struct { + jclass class; + jmethodID surfaceCreated; + } surface_holder_callback; struct { jclass class; jmethodID setLayoutParams;