Only perform class and method lookup once

Summary: This caches the class and method id references between calls. The class lookup is done once per method still but I think that is ok for now as the code becomes somewhat cleaner and more self contained.

Reviewed By: lucasr

Differential Revision: D3661989

fbshipit-source-id: 68d4557364bb8957400aefb2603c2e46424ccec3
This commit is contained in:
Emil Sjolander
2016-08-04 08:20:05 -07:00
committed by Facebook Github Bot 9
parent c74eae50ac
commit f5caf93c6e

View File

@@ -39,11 +39,17 @@ static void _jniPrint(void *context) {
JNIEnv *env = NULL;
CSS_ASSERT((*jvm)->GetEnv(jvm, (void**) &env, JNI_VERSION) == JNI_OK, "Must have valid jni env");
jclass cssNodeClass = (*env)->FindClass(env, "com/facebook/csslayout/CSSNodeJNI");
CSS_ASSERT(cssNodeClass, "Could not find CSSNode class");
static jclass cssNodeClass = NULL;
if (!cssNodeClass) {
cssNodeClass = (*env)->FindClass(env, "com/facebook/csslayout/CSSNodeJNI");
CSS_ASSERT(cssNodeClass, "Could not find CSSNode class");
}
jmethodID toStringID = (*env)->GetMethodID(env, cssNodeClass, "toString", "()Ljava/lang/String");
CSS_ASSERT(toStringID, "Could not find toString method");
static jmethodID toStringID = NULL;
if (!toStringID) {
toStringID = (*env)->GetMethodID(env, cssNodeClass, "toString", "()Ljava/lang/String");
CSS_ASSERT(toStringID, "Could not find toString method");
}
jstring javaString = (jstring) (*env)->CallObjectMethod(env, context, toStringID);
const char *nativeString = (*env)->GetStringUTFChars(env, javaString, 0);
@@ -56,11 +62,17 @@ static CSSSize _jniMeasureFunc(void *context, float width, CSSMeasureMode widthM
JNIEnv *env = NULL;
CSS_ASSERT((*jvm)->GetEnv(jvm, (void**) &env, JNI_VERSION) == JNI_OK, "Must have valid jni env");
jclass cssNodeClass = (*env)->FindClass(env, "com/facebook/csslayout/CSSNodeJNI");
CSS_ASSERT(cssNodeClass, "Could not find CSSNode class");
static jclass cssNodeClass = NULL;
if (!cssNodeClass) {
cssNodeClass = (*env)->FindClass(env, "com/facebook/csslayout/CSSNodeJNI");
CSS_ASSERT(cssNodeClass, "Could not find CSSNode class");
}
jmethodID measureID = (*env)->GetMethodID(env, cssNodeClass, "measure", "(FIFI)J");
CSS_ASSERT(measureID, "Could not find measure method");
static jmethodID measureID = NULL;
if (!measureID) {
measureID = (*env)->GetMethodID(env, cssNodeClass, "measure", "(FIFI)J");
CSS_ASSERT(measureID, "Could not find measure method");
}
jlong measureResult = (*env)->CallLongMethod(env, context, measureID, width, widthMode, height, heightMode);
CSSSize size = {