diff --git a/java/com/facebook/yoga/YogaConfig.java b/java/com/facebook/yoga/YogaConfig.java index 2121d643..bc2538da 100644 --- a/java/com/facebook/yoga/YogaConfig.java +++ b/java/com/facebook/yoga/YogaConfig.java @@ -11,7 +11,6 @@ import com.facebook.soloader.SoLoader; public class YogaConfig { public static int SPACING_TYPE = 1; - public static boolean useBatchingForLayoutOutputs = false; long mNativePointer; private YogaLogger mLogger; diff --git a/java/com/facebook/yoga/YogaNative.java b/java/com/facebook/yoga/YogaNative.java index fbda3ca6..5b294898 100644 --- a/java/com/facebook/yoga/YogaNative.java +++ b/java/com/facebook/yoga/YogaNative.java @@ -28,8 +28,8 @@ public class YogaNative { // YGNode related - static native long jni_YGNodeNew(boolean useBatchingForLayoutOutputs); - static native long jni_YGNodeNewWithConfig(long configPointer, boolean useBatchingForLayoutOutputs); + static native long jni_YGNodeNew(); + static native long jni_YGNodeNewWithConfig(long configPointer); static native void jni_YGNodeFree(long nativePointer); static native void jni_YGNodeReset(long nativePointer); static native void jni_YGNodeInsertChild(long nativePointer, long childPointer, int index); diff --git a/java/com/facebook/yoga/YogaNode.java b/java/com/facebook/yoga/YogaNode.java index a01a0bdd..42a5bd8d 100644 --- a/java/com/facebook/yoga/YogaNode.java +++ b/java/com/facebook/yoga/YogaNode.java @@ -10,11 +10,11 @@ import javax.annotation.Nullable; public abstract class YogaNode { public static YogaNode create() { - return YogaConfig.useBatchingForLayoutOutputs ? new YogaNodeJNIBatching() : new YogaNodeJNI(); + return new YogaNodeJNIBatching(); } public static YogaNode create(YogaConfig config) { - return YogaConfig.useBatchingForLayoutOutputs ? new YogaNodeJNIBatching(config) : new YogaNodeJNI(config); + return new YogaNodeJNIBatching(config); } public abstract void reset(); diff --git a/java/com/facebook/yoga/YogaNodeJNIBase.java b/java/com/facebook/yoga/YogaNodeJNIBase.java index c48162f4..0d9500ce 100644 --- a/java/com/facebook/yoga/YogaNodeJNIBase.java +++ b/java/com/facebook/yoga/YogaNodeJNIBase.java @@ -22,14 +22,14 @@ public abstract class YogaNodeJNIBase extends YogaNode implements Cloneable { @Nullable private Object mData; public YogaNodeJNIBase() { - mNativePointer = YogaNative.jni_YGNodeNew(YogaConfig.useBatchingForLayoutOutputs); + mNativePointer = YogaNative.jni_YGNodeNew(); if (mNativePointer == 0) { throw new IllegalStateException("Failed to allocate native memory"); } } public YogaNodeJNIBase(YogaConfig config) { - mNativePointer = YogaNative.jni_YGNodeNewWithConfig(config.mNativePointer, YogaConfig.useBatchingForLayoutOutputs); + mNativePointer = YogaNative.jni_YGNodeNewWithConfig(config.mNativePointer); if (mNativePointer == 0) { throw new IllegalStateException("Failed to allocate native memory"); } diff --git a/java/jni/YGJNI.cpp b/java/jni/YGJNI.cpp index f1283681..4e75d17c 100644 --- a/java/jni/YGJNI.cpp +++ b/java/jni/YGJNI.cpp @@ -73,8 +73,6 @@ const short int LAYOUT_MARGIN_START_INDEX = 6; const short int LAYOUT_PADDING_START_INDEX = 10; const short int LAYOUT_BORDER_START_INDEX = 14; -bool useBatchingForLayoutOutputs; - namespace { union YGNodeContext { @@ -165,142 +163,57 @@ static void YGTransferLayoutOutputsRecursive( auto edgesSet = YGNodeEdges{root}; - if (useBatchingForLayoutOutputs) { - bool marginFieldSet = edgesSet.has(YGNodeEdges::MARGIN); - bool paddingFieldSet = edgesSet.has(YGNodeEdges::PADDING); - bool borderFieldSet = edgesSet.has(YGNodeEdges::BORDER); + bool marginFieldSet = edgesSet.has(YGNodeEdges::MARGIN); + bool paddingFieldSet = edgesSet.has(YGNodeEdges::PADDING); + bool borderFieldSet = edgesSet.has(YGNodeEdges::BORDER); - int fieldFlags = edgesSet.get(); - fieldFlags |= HAS_NEW_LAYOUT; - if (YGNodeLayoutGetDidLegacyStretchFlagAffectLayout(root)) { - fieldFlags |= DOES_LEGACY_STRETCH_BEHAVIOUR; - } - - const int arrSize = 6 + (marginFieldSet ? 4 : 0) + - (paddingFieldSet ? 4 : 0) + (borderFieldSet ? 4 : 0); - float arr[18]; - arr[LAYOUT_EDGE_SET_FLAG_INDEX] = fieldFlags; - arr[LAYOUT_WIDTH_INDEX] = YGNodeLayoutGetWidth(root); - arr[LAYOUT_HEIGHT_INDEX] = YGNodeLayoutGetHeight(root); - arr[LAYOUT_LEFT_INDEX] = YGNodeLayoutGetLeft(root); - arr[LAYOUT_TOP_INDEX] = YGNodeLayoutGetTop(root); - arr[LAYOUT_DIRECTION_INDEX] = - static_cast(YGNodeLayoutGetDirection(root)); - if (marginFieldSet) { - arr[LAYOUT_MARGIN_START_INDEX] = YGNodeLayoutGetMargin(root, YGEdgeLeft); - arr[LAYOUT_MARGIN_START_INDEX + 1] = - YGNodeLayoutGetMargin(root, YGEdgeTop); - arr[LAYOUT_MARGIN_START_INDEX + 2] = - YGNodeLayoutGetMargin(root, YGEdgeRight); - arr[LAYOUT_MARGIN_START_INDEX + 3] = - YGNodeLayoutGetMargin(root, YGEdgeBottom); - } - if (paddingFieldSet) { - int paddingStartIndex = - LAYOUT_PADDING_START_INDEX - (marginFieldSet ? 0 : 4); - arr[paddingStartIndex] = YGNodeLayoutGetPadding(root, YGEdgeLeft); - arr[paddingStartIndex + 1] = YGNodeLayoutGetPadding(root, YGEdgeTop); - arr[paddingStartIndex + 2] = YGNodeLayoutGetPadding(root, YGEdgeRight); - arr[paddingStartIndex + 3] = YGNodeLayoutGetPadding(root, YGEdgeBottom); - } - - if (borderFieldSet) { - int borderStartIndex = LAYOUT_BORDER_START_INDEX - - (marginFieldSet ? 0 : 4) - (paddingFieldSet ? 0 : 4); - arr[borderStartIndex] = YGNodeLayoutGetBorder(root, YGEdgeLeft); - arr[borderStartIndex + 1] = YGNodeLayoutGetBorder(root, YGEdgeTop); - arr[borderStartIndex + 2] = YGNodeLayoutGetBorder(root, YGEdgeRight); - arr[borderStartIndex + 3] = YGNodeLayoutGetBorder(root, YGEdgeBottom); - } - - static auto arrField = obj->getClass()->getField("arr"); - local_ref arrFinal = make_float_array(arrSize); - arrFinal->setRegion(0, arrSize, arr); - obj->setFieldValue(arrField, arrFinal.get()); - - } else { - static auto widthField = obj->getClass()->getField("mWidth"); - static auto heightField = obj->getClass()->getField("mHeight"); - static auto leftField = obj->getClass()->getField("mLeft"); - static auto topField = obj->getClass()->getField("mTop"); - - static auto marginLeftField = - obj->getClass()->getField("mMarginLeft"); - static auto marginTopField = - obj->getClass()->getField("mMarginTop"); - static auto marginRightField = - obj->getClass()->getField("mMarginRight"); - static auto marginBottomField = - obj->getClass()->getField("mMarginBottom"); - - static auto paddingLeftField = - obj->getClass()->getField("mPaddingLeft"); - static auto paddingTopField = - obj->getClass()->getField("mPaddingTop"); - static auto paddingRightField = - obj->getClass()->getField("mPaddingRight"); - static auto paddingBottomField = - obj->getClass()->getField("mPaddingBottom"); - - static auto borderLeftField = - obj->getClass()->getField("mBorderLeft"); - static auto borderTopField = - obj->getClass()->getField("mBorderTop"); - static auto borderRightField = - obj->getClass()->getField("mBorderRight"); - static auto borderBottomField = - obj->getClass()->getField("mBorderBottom"); - - static auto hasNewLayoutField = - obj->getClass()->getField("mHasNewLayout"); - static auto doesLegacyStretchBehaviour = - obj->getClass()->getField( - "mDoesLegacyStretchFlagAffectsLayout"); - - obj->setFieldValue(widthField, YGNodeLayoutGetWidth(root)); - obj->setFieldValue(heightField, YGNodeLayoutGetHeight(root)); - obj->setFieldValue(leftField, YGNodeLayoutGetLeft(root)); - obj->setFieldValue(topField, YGNodeLayoutGetTop(root)); - obj->setFieldValue( - doesLegacyStretchBehaviour, - YGNodeLayoutGetDidLegacyStretchFlagAffectLayout(root)); - obj->setFieldValue(hasNewLayoutField, true); - YGTransferLayoutDirection(root, obj); - - if (edgesSet.has(YGNodeEdges::MARGIN)) { - obj->setFieldValue( - marginLeftField, YGNodeLayoutGetMargin(root, YGEdgeLeft)); - obj->setFieldValue( - marginTopField, YGNodeLayoutGetMargin(root, YGEdgeTop)); - obj->setFieldValue( - marginRightField, YGNodeLayoutGetMargin(root, YGEdgeRight)); - obj->setFieldValue( - marginBottomField, YGNodeLayoutGetMargin(root, YGEdgeBottom)); - } - - if (edgesSet.has(YGNodeEdges::PADDING)) { - obj->setFieldValue( - paddingLeftField, YGNodeLayoutGetPadding(root, YGEdgeLeft)); - obj->setFieldValue( - paddingTopField, YGNodeLayoutGetPadding(root, YGEdgeTop)); - obj->setFieldValue( - paddingRightField, YGNodeLayoutGetPadding(root, YGEdgeRight)); - obj->setFieldValue( - paddingBottomField, YGNodeLayoutGetPadding(root, YGEdgeBottom)); - } - - if (edgesSet.has(YGNodeEdges::BORDER)) { - obj->setFieldValue( - borderLeftField, YGNodeLayoutGetBorder(root, YGEdgeLeft)); - obj->setFieldValue( - borderTopField, YGNodeLayoutGetBorder(root, YGEdgeTop)); - obj->setFieldValue( - borderRightField, YGNodeLayoutGetBorder(root, YGEdgeRight)); - obj->setFieldValue( - borderBottomField, YGNodeLayoutGetBorder(root, YGEdgeBottom)); - } + int fieldFlags = edgesSet.get(); + fieldFlags |= HAS_NEW_LAYOUT; + if (YGNodeLayoutGetDidLegacyStretchFlagAffectLayout(root)) { + fieldFlags |= DOES_LEGACY_STRETCH_BEHAVIOUR; } + const int arrSize = 6 + (marginFieldSet ? 4 : 0) + (paddingFieldSet ? 4 : 0) + + (borderFieldSet ? 4 : 0); + float arr[18]; + arr[LAYOUT_EDGE_SET_FLAG_INDEX] = fieldFlags; + arr[LAYOUT_WIDTH_INDEX] = YGNodeLayoutGetWidth(root); + arr[LAYOUT_HEIGHT_INDEX] = YGNodeLayoutGetHeight(root); + arr[LAYOUT_LEFT_INDEX] = YGNodeLayoutGetLeft(root); + arr[LAYOUT_TOP_INDEX] = YGNodeLayoutGetTop(root); + arr[LAYOUT_DIRECTION_INDEX] = + static_cast(YGNodeLayoutGetDirection(root)); + if (marginFieldSet) { + arr[LAYOUT_MARGIN_START_INDEX] = YGNodeLayoutGetMargin(root, YGEdgeLeft); + arr[LAYOUT_MARGIN_START_INDEX + 1] = YGNodeLayoutGetMargin(root, YGEdgeTop); + arr[LAYOUT_MARGIN_START_INDEX + 2] = + YGNodeLayoutGetMargin(root, YGEdgeRight); + arr[LAYOUT_MARGIN_START_INDEX + 3] = + YGNodeLayoutGetMargin(root, YGEdgeBottom); + } + if (paddingFieldSet) { + int paddingStartIndex = + LAYOUT_PADDING_START_INDEX - (marginFieldSet ? 0 : 4); + arr[paddingStartIndex] = YGNodeLayoutGetPadding(root, YGEdgeLeft); + arr[paddingStartIndex + 1] = YGNodeLayoutGetPadding(root, YGEdgeTop); + arr[paddingStartIndex + 2] = YGNodeLayoutGetPadding(root, YGEdgeRight); + arr[paddingStartIndex + 3] = YGNodeLayoutGetPadding(root, YGEdgeBottom); + } + + if (borderFieldSet) { + int borderStartIndex = LAYOUT_BORDER_START_INDEX - + (marginFieldSet ? 0 : 4) - (paddingFieldSet ? 0 : 4); + arr[borderStartIndex] = YGNodeLayoutGetBorder(root, YGEdgeLeft); + arr[borderStartIndex + 1] = YGNodeLayoutGetBorder(root, YGEdgeTop); + arr[borderStartIndex + 2] = YGNodeLayoutGetBorder(root, YGEdgeRight); + arr[borderStartIndex + 3] = YGNodeLayoutGetBorder(root, YGEdgeBottom); + } + + static auto arrField = obj->getClass()->getField("arr"); + local_ref arrFinal = make_float_array(arrSize); + arrFinal->setRegion(0, arrSize, arr); + obj->setFieldValue(arrField, arrFinal.get()); + root->setHasNewLayout(false); for (uint32_t i = 0; i < YGNodeGetChildCount(root); i++) { @@ -410,21 +323,16 @@ static int YGJNILogFunc( return result; } -jlong jni_YGNodeNew(alias_ref thiz, jboolean useBatching) { +jlong jni_YGNodeNew(alias_ref thiz) { const YGNodeRef node = YGNodeNew(); node->setContext(YGNodeContext{}.asVoidPtr); node->setPrintFunc(YGPrint); - useBatchingForLayoutOutputs = useBatching; return reinterpret_cast(node); } -jlong jni_YGNodeNewWithConfig( - alias_ref, - jlong configPointer, - jboolean useBatching) { +jlong jni_YGNodeNewWithConfig(alias_ref, jlong configPointer) { const YGNodeRef node = YGNodeNewWithConfig(_jlong2YGConfigRef(configPointer)); node->setContext(YGNodeContext{}.asVoidPtr); - useBatchingForLayoutOutputs = useBatching; return reinterpret_cast(node); }