Add callback hack to find out when to load system properties.
Use this to reload the trace and layout bounds properties.
This is ONLY for debugging.
Change-Id: I1c4bdb52c823520c352c5bac45fa9ee31160793c
diff --git a/core/jni/android_os_SystemProperties.cpp b/core/jni/android_os_SystemProperties.cpp
index add616e..677396d1 100644
--- a/core/jni/android_os_SystemProperties.cpp
+++ b/core/jni/android_os_SystemProperties.cpp
@@ -15,7 +15,11 @@
** limitations under the License.
*/
+#define LOG_TAG "SysPropJNI"
+
#include "cutils/properties.h"
+#include "utils/misc.h"
+#include <utils/Log.h>
#include "jni.h"
#include "android_runtime/AndroidRuntime.h"
#include <nativehelper/JNIHelp.h>
@@ -188,6 +192,34 @@
}
}
+static JavaVM* sVM = NULL;
+static jclass sClazz = NULL;
+static jmethodID sCallChangeCallbacks;
+
+static void do_report_sysprop_change() {
+ //ALOGI("Java SystemProperties: VM=%p, Clazz=%p", sVM, sClazz);
+ if (sVM != NULL && sClazz != NULL) {
+ JNIEnv* env;
+ if (sVM->GetEnv((void **)&env, JNI_VERSION_1_4) >= 0) {
+ //ALOGI("Java SystemProperties: calling %p", sCallChangeCallbacks);
+ env->CallStaticVoidMethod(sClazz, sCallChangeCallbacks);
+ }
+ }
+}
+
+static void SystemProperties_add_change_callback(JNIEnv *env, jobject clazz)
+{
+ // This is called with the Java lock held.
+ if (sVM == NULL) {
+ env->GetJavaVM(&sVM);
+ }
+ if (sClazz == NULL) {
+ sClazz = (jclass) env->NewGlobalRef(clazz);
+ sCallChangeCallbacks = env->GetStaticMethodID(sClazz, "callChangeCallbacks", "()V");
+ add_sysprop_change_callback(do_report_sysprop_change, -10000);
+ }
+}
+
static JNINativeMethod method_table[] = {
{ "native_get", "(Ljava/lang/String;)Ljava/lang/String;",
(void*) SystemProperties_getS },
@@ -201,6 +233,8 @@
(void*) SystemProperties_get_boolean },
{ "native_set", "(Ljava/lang/String;Ljava/lang/String;)V",
(void*) SystemProperties_set },
+ { "native_add_change_callback", "()V",
+ (void*) SystemProperties_add_change_callback },
};
int register_android_os_SystemProperties(JNIEnv *env)