From 8583d85de18f84d1ac51cc866d92f7061f837089 Mon Sep 17 00:00:00 2001 From: Sidharth Guglani Date: Thu, 26 Sep 2019 17:30:28 -0700 Subject: [PATCH] Add boolean flag to decide whether to use fbjni or jni Summary: Adds a flag useVanillaJNI in YogaConfig to determine whether to use FbJNI or JNI. Currently default is set to false. We will experiment based on this flag once all code have been migrated. Reviewed By: Andrey-Mishanin Differential Revision: D17601703 fbshipit-source-id: 377a5bd2a6f8a7584e84932e87fa7044d8165efd --- .../src/main/java/com/facebook/yoga/YogaConfig.java | 4 ++++ .../java/com/facebook/yoga/YogaConfigJNIBase.java | 11 +++++++++++ .../main/java/com/facebook/yoga/YogaNodeJNIBase.java | 9 ++++++++- 3 files changed, 23 insertions(+), 1 deletion(-) diff --git a/ReactAndroid/src/main/java/com/facebook/yoga/YogaConfig.java b/ReactAndroid/src/main/java/com/facebook/yoga/YogaConfig.java index 6a670407651..501a3cca52d 100644 --- a/ReactAndroid/src/main/java/com/facebook/yoga/YogaConfig.java +++ b/ReactAndroid/src/main/java/com/facebook/yoga/YogaConfig.java @@ -37,4 +37,8 @@ public abstract class YogaConfig { public abstract YogaLogger getLogger(); abstract long getNativePointer(); + + public abstract void setUseVanillaJNI(boolean useVanillaJNI); + + public abstract boolean useVanillaJNI(); } diff --git a/ReactAndroid/src/main/java/com/facebook/yoga/YogaConfigJNIBase.java b/ReactAndroid/src/main/java/com/facebook/yoga/YogaConfigJNIBase.java index c093c5c24c5..3fbd6646816 100644 --- a/ReactAndroid/src/main/java/com/facebook/yoga/YogaConfigJNIBase.java +++ b/ReactAndroid/src/main/java/com/facebook/yoga/YogaConfigJNIBase.java @@ -10,6 +10,7 @@ public abstract class YogaConfigJNIBase extends YogaConfig { long mNativePointer; private YogaLogger mLogger; + private boolean useVanillaJNI = false; private YogaConfigJNIBase(long nativePointer) { if (nativePointer == 0) { @@ -70,4 +71,14 @@ public abstract class YogaConfigJNIBase extends YogaConfig { long getNativePointer() { return mNativePointer; } + + @Override + public void setUseVanillaJNI(boolean useVanillaJNI) { + this.useVanillaJNI = useVanillaJNI; + } + + @Override + public boolean useVanillaJNI() { + return this.useVanillaJNI; + } } diff --git a/ReactAndroid/src/main/java/com/facebook/yoga/YogaNodeJNIBase.java b/ReactAndroid/src/main/java/com/facebook/yoga/YogaNodeJNIBase.java index dcf31bbe4a9..87a22dbbd33 100644 --- a/ReactAndroid/src/main/java/com/facebook/yoga/YogaNodeJNIBase.java +++ b/ReactAndroid/src/main/java/com/facebook/yoga/YogaNodeJNIBase.java @@ -46,6 +46,8 @@ public abstract class YogaNodeJNIBase extends YogaNode implements Cloneable { private boolean mHasNewLayout = true; + private boolean useVanillaJNI = false; + private YogaNodeJNIBase(long nativePointer) { if (nativePointer == 0) { throw new IllegalStateException("Failed to allocate native memory"); @@ -59,6 +61,7 @@ public abstract class YogaNodeJNIBase extends YogaNode implements Cloneable { YogaNodeJNIBase(YogaConfig config) { this(YogaNative.jni_YGNodeNewWithConfig(((YogaConfigJNIBase)config).mNativePointer)); + this.useVanillaJNI = config.useVanillaJNI(); } public void reset() { @@ -284,7 +287,11 @@ public abstract class YogaNodeJNIBase extends YogaNode implements Cloneable { } public void setFlex(float flex) { - YogaNative.jni_YGNodeStyleSetFlex(mNativePointer, flex); + if (useVanillaJNI) { + YogaNative.jni_YGNodeStyleSetFlexJNI(mNativePointer, flex); + } else { + YogaNative.jni_YGNodeStyleSetFlex(mNativePointer, flex); + } } public float getFlexGrow() {