From c378be490f78735ac00dc17ca7e1d6fcfa94dc3c Mon Sep 17 00:00:00 2001 From: Sidharth Guglani Date: Mon, 1 Apr 2019 06:11:50 -0700 Subject: [PATCH] moved all the properties used for layout outputs to YogaNodeJNI Summary: Moved layout outputs transfer logic from YogaNodeJNIBase to YogaNodeJNI. This change set is for adding experiment for layout outputs batching using a float array Reviewed By: davidaurelio Differential Revision: D14642995 fbshipit-source-id: 5d0bc7fa18c1985be7e216d7351f5eab2e03861d --- .../java/com/facebook/yoga/YogaNodeJNI.java | 165 ++++++++++++++++++ .../com/facebook/yoga/YogaNodeJNIBase.java | 153 +--------------- 2 files changed, 166 insertions(+), 152 deletions(-) diff --git a/ReactAndroid/src/main/java/com/facebook/yoga/YogaNodeJNI.java b/ReactAndroid/src/main/java/com/facebook/yoga/YogaNodeJNI.java index ff5d11490f625a..d2a9357bb3dd0b 100644 --- a/ReactAndroid/src/main/java/com/facebook/yoga/YogaNodeJNI.java +++ b/ReactAndroid/src/main/java/com/facebook/yoga/YogaNodeJNI.java @@ -11,6 +11,45 @@ @DoNotStrip public class YogaNodeJNI extends YogaNodeJNIBase { + @DoNotStrip + private float mWidth = YogaConstants.UNDEFINED; + @DoNotStrip + private float mHeight = YogaConstants.UNDEFINED; + @DoNotStrip + private float mTop = YogaConstants.UNDEFINED; + @DoNotStrip + private float mLeft = YogaConstants.UNDEFINED; + @DoNotStrip + private float mMarginLeft = 0; + @DoNotStrip + private float mMarginTop = 0; + @DoNotStrip + private float mMarginRight = 0; + @DoNotStrip + private float mMarginBottom = 0; + @DoNotStrip + private float mPaddingLeft = 0; + @DoNotStrip + private float mPaddingTop = 0; + @DoNotStrip + private float mPaddingRight = 0; + @DoNotStrip + private float mPaddingBottom = 0; + @DoNotStrip + private float mBorderLeft = 0; + @DoNotStrip + private float mBorderTop = 0; + @DoNotStrip + private float mBorderRight = 0; + @DoNotStrip + private float mBorderBottom = 0; + @DoNotStrip + private int mLayoutDirection = 0; + @DoNotStrip + private boolean mHasNewLayout = true; + @DoNotStrip + private boolean mDoesLegacyStretchFlagAffectsLayout = false; + public YogaNodeJNI() { super(); } @@ -18,4 +57,130 @@ public YogaNodeJNI() { public YogaNodeJNI(YogaConfig config) { super(config); } + + @Override + public void reset() { + super.reset(); + mHasNewLayout = true; + + mWidth = YogaConstants.UNDEFINED; + mHeight = YogaConstants.UNDEFINED; + mTop = YogaConstants.UNDEFINED; + mLeft = YogaConstants.UNDEFINED; + mMarginLeft = 0; + mMarginTop = 0; + mMarginRight = 0; + mMarginBottom = 0; + mPaddingLeft = 0; + mPaddingTop = 0; + mPaddingRight = 0; + mPaddingBottom = 0; + mBorderLeft = 0; + mBorderTop = 0; + mBorderRight = 0; + mBorderBottom = 0; + mLayoutDirection = 0; + + mDoesLegacyStretchFlagAffectsLayout = false; + } + + @Override + public boolean hasNewLayout() { + return mHasNewLayout; + } + + @Override + public void markLayoutSeen() { + mHasNewLayout = false; + } + + @Override + public float getLayoutX() { + return mLeft; + } + + @Override + public float getLayoutY() { + return mTop; + } + + @Override + public float getLayoutWidth() { + return mWidth; + } + + @Override + public float getLayoutHeight() { + return mHeight; + } + + @Override + public boolean getDoesLegacyStretchFlagAffectsLayout() { + return mDoesLegacyStretchFlagAffectsLayout; + } + + @Override + public float getLayoutMargin(YogaEdge edge) { + switch (edge) { + case LEFT: + return mMarginLeft; + case TOP: + return mMarginTop; + case RIGHT: + return mMarginRight; + case BOTTOM: + return mMarginBottom; + case START: + return getLayoutDirection() == YogaDirection.RTL ? mMarginRight : mMarginLeft; + case END: + return getLayoutDirection() == YogaDirection.RTL ? mMarginLeft : mMarginRight; + default: + throw new IllegalArgumentException("Cannot get layout margins of multi-edge shorthands"); + } + } + + @Override + public float getLayoutPadding(YogaEdge edge) { + switch (edge) { + case LEFT: + return mPaddingLeft; + case TOP: + return mPaddingTop; + case RIGHT: + return mPaddingRight; + case BOTTOM: + return mPaddingBottom; + case START: + return getLayoutDirection() == YogaDirection.RTL ? mPaddingRight : mPaddingLeft; + case END: + return getLayoutDirection() == YogaDirection.RTL ? mPaddingLeft : mPaddingRight; + default: + throw new IllegalArgumentException("Cannot get layout paddings of multi-edge shorthands"); + } + } + + @Override + public float getLayoutBorder(YogaEdge edge) { + switch (edge) { + case LEFT: + return mBorderLeft; + case TOP: + return mBorderTop; + case RIGHT: + return mBorderRight; + case BOTTOM: + return mBorderBottom; + case START: + return getLayoutDirection() == YogaDirection.RTL ? mBorderRight : mBorderLeft; + case END: + return getLayoutDirection() == YogaDirection.RTL ? mBorderLeft : mBorderRight; + default: + throw new IllegalArgumentException("Cannot get layout border of multi-edge shorthands"); + } + } + + @Override + public YogaDirection getLayoutDirection() { + return YogaDirection.fromInt(mLayoutDirection); + } } diff --git a/ReactAndroid/src/main/java/com/facebook/yoga/YogaNodeJNIBase.java b/ReactAndroid/src/main/java/com/facebook/yoga/YogaNodeJNIBase.java index 7ddfa228ac02e2..52184d37883d8f 100644 --- a/ReactAndroid/src/main/java/com/facebook/yoga/YogaNodeJNIBase.java +++ b/ReactAndroid/src/main/java/com/facebook/yoga/YogaNodeJNIBase.java @@ -21,49 +21,6 @@ public abstract class YogaNodeJNIBase extends YogaNode { private long mNativePointer; @Nullable private Object mData; - /* Those flags needs be in sync with YGJNI.cpp */ - private static final int MARGIN = 1; - private static final int PADDING = 2; - private static final int BORDER = 4; - - @DoNotStrip - private float mWidth = YogaConstants.UNDEFINED; - @DoNotStrip - private float mHeight = YogaConstants.UNDEFINED; - @DoNotStrip - private float mTop = YogaConstants.UNDEFINED; - @DoNotStrip - private float mLeft = YogaConstants.UNDEFINED; - @DoNotStrip - private float mMarginLeft = 0; - @DoNotStrip - private float mMarginTop = 0; - @DoNotStrip - private float mMarginRight = 0; - @DoNotStrip - private float mMarginBottom = 0; - @DoNotStrip - private float mPaddingLeft = 0; - @DoNotStrip - private float mPaddingTop = 0; - @DoNotStrip - private float mPaddingRight = 0; - @DoNotStrip - private float mPaddingBottom = 0; - @DoNotStrip - private float mBorderLeft = 0; - @DoNotStrip - private float mBorderTop = 0; - @DoNotStrip - private float mBorderRight = 0; - @DoNotStrip - private float mBorderBottom = 0; - @DoNotStrip - private int mLayoutDirection = 0; - @DoNotStrip - private boolean mHasNewLayout = true; - @DoNotStrip private boolean mDoesLegacyStretchFlagAffectsLayout = false; - public YogaNodeJNIBase() { mNativePointer = YogaNative.jni_YGNodeNew(); if (mNativePointer == 0) { @@ -96,30 +53,9 @@ public void freeNatives() { } } public void reset() { - mHasNewLayout = true; - - mWidth = YogaConstants.UNDEFINED; - mHeight = YogaConstants.UNDEFINED; - mTop = YogaConstants.UNDEFINED; - mLeft = YogaConstants.UNDEFINED; - mMarginLeft = 0; - mMarginTop = 0; - mMarginRight = 0; - mMarginBottom = 0; - mPaddingLeft = 0; - mPaddingTop = 0; - mPaddingRight = 0; - mPaddingBottom = 0; - mBorderLeft = 0; - mBorderTop = 0; - mBorderRight = 0; - mBorderBottom = 0; - mLayoutDirection = 0; - mMeasureFunction = null; mBaselineFunction = null; mData = null; - mDoesLegacyStretchFlagAffectsLayout = false; YogaNative.jni_YGNodeReset(mNativePointer); } @@ -219,10 +155,6 @@ public void calculateLayout(float width, float height) { YogaNative.jni_YGNodeCalculateLayout(mNativePointer, width, height, nativePointers, nodes); } - public boolean hasNewLayout() { - return mHasNewLayout; - } - public void dirty() { YogaNative.jni_YGNodeMarkDirty(mNativePointer); } @@ -240,10 +172,6 @@ public void copyStyle(YogaNode srcNode) { YogaNative.jni_YGNodeCopyStyle(mNativePointer, ((YogaNodeJNIBase) srcNode).mNativePointer); } - public void markLayoutSeen() { - mHasNewLayout = false; - } - public YogaDirection getStyleDirection() { return YogaDirection.fromInt(YogaNative.jni_YGNodeStyleGetDirection(mNativePointer)); } @@ -500,86 +428,7 @@ public void setAspectRatio(float aspectRatio) { YogaNative.jni_YGNodeStyleSetAspectRatio(mNativePointer, aspectRatio); } - public float getLayoutX() { - return mLeft; - } - - public float getLayoutY() { - return mTop; - } - - public float getLayoutWidth() { - return mWidth; - } - - public float getLayoutHeight() { - return mHeight; - } - - public boolean getDoesLegacyStretchFlagAffectsLayout() { - return mDoesLegacyStretchFlagAffectsLayout; - } - - public float getLayoutMargin(YogaEdge edge) { - switch (edge) { - case LEFT: - return mMarginLeft; - case TOP: - return mMarginTop; - case RIGHT: - return mMarginRight; - case BOTTOM: - return mMarginBottom; - case START: - return getLayoutDirection() == YogaDirection.RTL ? mMarginRight : mMarginLeft; - case END: - return getLayoutDirection() == YogaDirection.RTL ? mMarginLeft : mMarginRight; - default: - throw new IllegalArgumentException("Cannot get layout margins of multi-edge shorthands"); - } - } - - public float getLayoutPadding(YogaEdge edge) { - switch (edge) { - case LEFT: - return mPaddingLeft; - case TOP: - return mPaddingTop; - case RIGHT: - return mPaddingRight; - case BOTTOM: - return mPaddingBottom; - case START: - return getLayoutDirection() == YogaDirection.RTL ? mPaddingRight : mPaddingLeft; - case END: - return getLayoutDirection() == YogaDirection.RTL ? mPaddingLeft : mPaddingRight; - default: - throw new IllegalArgumentException("Cannot get layout paddings of multi-edge shorthands"); - } - } - - public float getLayoutBorder(YogaEdge edge) { - switch (edge) { - case LEFT: - return mBorderLeft; - case TOP: - return mBorderTop; - case RIGHT: - return mBorderRight; - case BOTTOM: - return mBorderBottom; - case START: - return getLayoutDirection() == YogaDirection.RTL ? mBorderRight : mBorderLeft; - case END: - return getLayoutDirection() == YogaDirection.RTL ? mBorderLeft : mBorderRight; - default: - throw new IllegalArgumentException("Cannot get layout border of multi-edge shorthands"); - } - } - - public YogaDirection getLayoutDirection() { - return YogaDirection.fromInt(mLayoutDirection); - } + public abstract boolean getDoesLegacyStretchFlagAffectsLayout(); public void setMeasureFunction(YogaMeasureFunction measureFunction) { mMeasureFunction = measureFunction;