react-nitro-yoga 0.0.0-stage → 0.0.1-alpha.7
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/Generated/.gitattributes +1 -0
- package/Generated/api.d.ts +100 -0
- package/Generated/ffigen_yoga_adapters.h +52 -0
- package/Generated/native.d.ts +84 -0
- package/Generated/native.ts +283 -0
- package/Generated/yoga.c +1087 -0
- package/LICENSE +21 -0
- package/Package.swift +57 -0
- package/README.md +61 -2
- package/Sources/ReactNitroYoga/InstallHermesBindings.cpp +11 -0
- package/Sources/ReactNitroYoga/SHUnit.h +16 -0
- package/include/ReactNitroYoga/InstallHermesBindings.hpp +12 -0
- package/package.json +26 -4
- package/yoga/.clang-format +109 -0
- package/yoga/.clang-tidy +217 -0
- package/yoga/.editorconfig +11 -0
- package/yoga/.eslintrc.cjs +84 -0
- package/yoga/.github/ISSUE_TEMPLATE.md +21 -0
- package/yoga/.github/actions/black/action.yml +25 -0
- package/yoga/.github/actions/cache-emsdk/action.yml +10 -0
- package/yoga/.github/actions/install-ninja/action.yml +14 -0
- package/yoga/.github/actions/setup-android/action.yml +12 -0
- package/yoga/.github/actions/setup-apple/action.yml +8 -0
- package/yoga/.github/actions/setup-cpp/action.yml +34 -0
- package/yoga/.github/actions/setup-js/action.yml +18 -0
- package/yoga/.github/workflows/publish-android-release.yml +38 -0
- package/yoga/.github/workflows/publish-android-snashot.yml +36 -0
- package/yoga/.github/workflows/publish-npm-release.yml +25 -0
- package/yoga/.github/workflows/validate-android.yml +30 -0
- package/yoga/.github/workflows/validate-cpp.yml +101 -0
- package/yoga/.github/workflows/validate-format.yml +36 -0
- package/yoga/.github/workflows/validate-js.yml +119 -0
- package/yoga/.github/workflows/validate-swiftpm.yml +29 -0
- package/yoga/.github/workflows/validate-tests.yml +35 -0
- package/yoga/.github/workflows/validate-website.yml +45 -0
- package/yoga/.prettierignore +3 -0
- package/yoga/.prettierrc.js +16 -0
- package/yoga/.vscode/extensions.json +7 -0
- package/yoga/.vscode/launch.json +25 -0
- package/yoga/.vscode/settings.json +20 -0
- package/yoga/.vscode/tasks.json +23 -0
- package/yoga/CMakeLists.txt +58 -0
- package/yoga/CODE_OF_CONDUCT.md +76 -0
- package/yoga/CONTRIBUTING.md +44 -0
- package/yoga/LICENSE +21 -0
- package/yoga/LICENSE-examples +9 -0
- package/yoga/Package.swift +32 -0
- package/yoga/README.md +36 -0
- package/yoga/benchmark/Benchmark.cpp +400 -0
- package/yoga/benchmark/Benchmark.h +39 -0
- package/yoga/benchmark/CMakeLists.txt +27 -0
- package/yoga/benchmark/TreeDeserialization.cpp +248 -0
- package/yoga/benchmark/TreeDeserialization.h +52 -0
- package/yoga/benchmark/YGBenchmark.c +183 -0
- package/yoga/benchmark/benchmark +15 -0
- package/yoga/benchmark/captures/chat-mac.json +24426 -0
- package/yoga/benchmark/captures/feed-android.json +10335 -0
- package/yoga/benchmark/captures/profile-ios.json +1955 -0
- package/yoga/benchmark/captures/rendering-sample-mac.json +1927 -0
- package/yoga/build.gradle +46 -0
- package/yoga/build_fuzz_tests +28 -0
- package/yoga/capture/CMakeLists.txt +23 -0
- package/yoga/capture/CaptureTree.cpp +100 -0
- package/yoga/capture/CaptureTree.h +47 -0
- package/yoga/capture/NodeToString.cpp +359 -0
- package/yoga/capture/NodeToString.h +40 -0
- package/yoga/cmake/project-defaults.cmake +50 -0
- package/yoga/cmake/yoga-config.cmake.in +10 -0
- package/yoga/enums.py +394 -0
- package/yoga/fuzz/CMakeLists.txt +21 -0
- package/yoga/fuzz/FuzzLayout.cpp +57 -0
- package/yoga/gentest/babel.config.cjs +12 -0
- package/yoga/gentest/fixtures/YGAbsolutePositionTest.html +168 -0
- package/yoga/gentest/fixtures/YGAlignContentTest.html +479 -0
- package/yoga/gentest/fixtures/YGAlignItemsTest.html +227 -0
- package/yoga/gentest/fixtures/YGAlignSelfTest.html +23 -0
- package/yoga/gentest/fixtures/YGAndroidNewsFeed.html +28 -0
- package/yoga/gentest/fixtures/YGAspectRatioTest.html +3 -0
- package/yoga/gentest/fixtures/YGAutoTest.html +25 -0
- package/yoga/gentest/fixtures/YGBorderTest.html +18 -0
- package/yoga/gentest/fixtures/YGBoxSizingTest.html +240 -0
- package/yoga/gentest/fixtures/YGDimensionTest.html +9 -0
- package/yoga/gentest/fixtures/YGDisplayTest.html +89 -0
- package/yoga/gentest/fixtures/YGFlexBasisFitContentTest.html +55 -0
- package/yoga/gentest/fixtures/YGFlexDirectionTest.html +391 -0
- package/yoga/gentest/fixtures/YGFlexTest.html +53 -0
- package/yoga/gentest/fixtures/YGFlexWrapTest.html +160 -0
- package/yoga/gentest/fixtures/YGGapTest.html +233 -0
- package/yoga/gentest/fixtures/YGIntrinsicSizeTest.html +295 -0
- package/yoga/gentest/fixtures/YGJustifyContentTest.html +164 -0
- package/yoga/gentest/fixtures/YGMarginTest.html +157 -0
- package/yoga/gentest/fixtures/YGMinMaxDimensionTest.html +116 -0
- package/yoga/gentest/fixtures/YGPaddingTest.html +29 -0
- package/yoga/gentest/fixtures/YGPercentageTest.html +125 -0
- package/yoga/gentest/fixtures/YGRoundingTest.html +95 -0
- package/yoga/gentest/fixtures/YGSizeOverflowTest.html +17 -0
- package/yoga/gentest/fixtures/YGStaticPositionTest.html +712 -0
- package/yoga/gentest/fonts/Ahem.ttf +0 -0
- package/yoga/gentest/gentest-driver.ts +141 -0
- package/yoga/gentest/gentest-validate.ts +43 -0
- package/yoga/gentest/package.json +24 -0
- package/yoga/gentest/scripts/gentest-validate.ts +43 -0
- package/yoga/gentest/signedsource.d.ts +10 -0
- package/yoga/gentest/src/ChromePool.ts +78 -0
- package/yoga/gentest/src/CssToYoga.ts +958 -0
- package/yoga/gentest/src/buildLayoutTree.ts +98 -0
- package/yoga/gentest/src/cli.ts +163 -0
- package/yoga/gentest/src/emitters/CppEmitter.ts +452 -0
- package/yoga/gentest/src/emitters/Emitter.ts +204 -0
- package/yoga/gentest/src/emitters/JavaEmitter.ts +469 -0
- package/yoga/gentest/src/emitters/JavascriptEmitter.ts +353 -0
- package/yoga/gentest/src/types.ts +41 -0
- package/yoga/gentest/test-template.html +42 -0
- package/yoga/gentest/tsconfig.json +13 -0
- package/yoga/gradle/wrapper/gradle-wrapper.jar +0 -0
- package/yoga/gradle/wrapper/gradle-wrapper.properties +7 -0
- package/yoga/gradle.properties +14 -0
- package/yoga/gradlew +251 -0
- package/yoga/gradlew.bat +94 -0
- package/yoga/java/AndroidManifest.xml +14 -0
- package/yoga/java/CMakeLists.txt +22 -0
- package/yoga/java/build.gradle.kts +127 -0
- package/yoga/java/com/facebook/yoga/LayoutPassReason.kt +35 -0
- package/yoga/java/com/facebook/yoga/YogaAlign.kt +45 -0
- package/yoga/java/com/facebook/yoga/YogaBaselineFunction.kt +16 -0
- package/yoga/java/com/facebook/yoga/YogaBoxSizing.kt +27 -0
- package/yoga/java/com/facebook/yoga/YogaConfig.kt +48 -0
- package/yoga/java/com/facebook/yoga/YogaConfigFactory.kt +12 -0
- package/yoga/java/com/facebook/yoga/YogaConfigJNIBase.kt +70 -0
- package/yoga/java/com/facebook/yoga/YogaConfigJNIFinalizer.kt +30 -0
- package/yoga/java/com/facebook/yoga/YogaConstants.kt +18 -0
- package/yoga/java/com/facebook/yoga/YogaDimension.kt +27 -0
- package/yoga/java/com/facebook/yoga/YogaDirection.kt +29 -0
- package/yoga/java/com/facebook/yoga/YogaDisplay.kt +31 -0
- package/yoga/java/com/facebook/yoga/YogaEdge.kt +41 -0
- package/yoga/java/com/facebook/yoga/YogaErrata.kt +39 -0
- package/yoga/java/com/facebook/yoga/YogaExperimentalFeature.kt +27 -0
- package/yoga/java/com/facebook/yoga/YogaFlexDirection.kt +31 -0
- package/yoga/java/com/facebook/yoga/YogaGridTrackType.kt +33 -0
- package/yoga/java/com/facebook/yoga/YogaGutter.kt +29 -0
- package/yoga/java/com/facebook/yoga/YogaJustify.kt +43 -0
- package/yoga/java/com/facebook/yoga/YogaLayoutType.kt +27 -0
- package/yoga/java/com/facebook/yoga/YogaLogLevel.kt +39 -0
- package/yoga/java/com/facebook/yoga/YogaLogger.kt +19 -0
- package/yoga/java/com/facebook/yoga/YogaMeasureFunction.kt +19 -0
- package/yoga/java/com/facebook/yoga/YogaMeasureMode.kt +29 -0
- package/yoga/java/com/facebook/yoga/YogaMeasureOutput.kt +29 -0
- package/yoga/java/com/facebook/yoga/YogaNative.kt +347 -0
- package/yoga/java/com/facebook/yoga/YogaNode.kt +254 -0
- package/yoga/java/com/facebook/yoga/YogaNodeFactory.kt +14 -0
- package/yoga/java/com/facebook/yoga/YogaNodeJNIBase.kt +762 -0
- package/yoga/java/com/facebook/yoga/YogaNodeJNIFinalizer.kt +33 -0
- package/yoga/java/com/facebook/yoga/YogaNodeType.kt +27 -0
- package/yoga/java/com/facebook/yoga/YogaOverflow.kt +29 -0
- package/yoga/java/com/facebook/yoga/YogaPositionType.kt +29 -0
- package/yoga/java/com/facebook/yoga/YogaProps.kt +205 -0
- package/yoga/java/com/facebook/yoga/YogaStyleInputs.kt +51 -0
- package/yoga/java/com/facebook/yoga/YogaUnit.kt +37 -0
- package/yoga/java/com/facebook/yoga/YogaValue.kt +66 -0
- package/yoga/java/com/facebook/yoga/YogaWrap.kt +29 -0
- package/yoga/java/com/facebook/yoga/annotations/DoNotStrip.kt +19 -0
- package/yoga/java/gen/com/facebook/yoga/BuildConfig.java +15 -0
- package/yoga/java/jni/LayoutContext.cpp +34 -0
- package/yoga/java/jni/LayoutContext.h +29 -0
- package/yoga/java/jni/ScopedGlobalRef.h +140 -0
- package/yoga/java/jni/ScopedLocalRef.h +141 -0
- package/yoga/java/jni/YGJNI.h +77 -0
- package/yoga/java/jni/YGJNIVanilla.cpp +1178 -0
- package/yoga/java/jni/YGJNIVanilla.h +12 -0
- package/yoga/java/jni/YGJTypesVanilla.h +52 -0
- package/yoga/java/jni/YogaJniException.cpp +49 -0
- package/yoga/java/jni/YogaJniException.h +35 -0
- package/yoga/java/jni/common.cpp +109 -0
- package/yoga/java/jni/common.h +73 -0
- package/yoga/java/jni/corefunctions.cpp +91 -0
- package/yoga/java/jni/corefunctions.h +50 -0
- package/yoga/java/jni/macros.h +23 -0
- package/yoga/java/jni/tests/corefunctionsTest.cpp +247 -0
- package/yoga/java/jni/yogajni.cpp +18 -0
- package/yoga/java/proguard-rules.pro +10 -0
- package/yoga/java/res/values/strings.xml +12 -0
- package/yoga/java/tests/com/facebook/yoga/TestParametrization.kt +29 -0
- package/yoga/java/tests/com/facebook/yoga/YGAlignBaselineTest.kt +117 -0
- package/yoga/java/tests/com/facebook/yoga/YogaExceptionTest.kt +140 -0
- package/yoga/java/tests/com/facebook/yoga/YogaLoggerTest.kt +77 -0
- package/yoga/java/tests/com/facebook/yoga/YogaNodeStylePropertiesTest.kt +1020 -0
- package/yoga/java/tests/com/facebook/yoga/YogaNodeTest.kt +319 -0
- package/yoga/java/tests/com/facebook/yoga/YogaValueTest.kt +23 -0
- package/yoga/java/tests/com/facebook/yoga/utils/TestUtils.kt +99 -0
- package/yoga/java/tests/generated/com/facebook/yoga/YGAbsolutePositionTest.java +1670 -0
- package/yoga/java/tests/generated/com/facebook/yoga/YGAlignContentTest.java +5440 -0
- package/yoga/java/tests/generated/com/facebook/yoga/YGAlignItemsTest.java +2132 -0
- package/yoga/java/tests/generated/com/facebook/yoga/YGAlignSelfTest.java +271 -0
- package/yoga/java/tests/generated/com/facebook/yoga/YGAndroidNewsFeed.java +313 -0
- package/yoga/java/tests/generated/com/facebook/yoga/YGAspectRatioTest.java +73 -0
- package/yoga/java/tests/generated/com/facebook/yoga/YGAutoTest.java +326 -0
- package/yoga/java/tests/generated/com/facebook/yoga/YGBorderTest.java +222 -0
- package/yoga/java/tests/generated/com/facebook/yoga/YGBoxSizingTest.java +2165 -0
- package/yoga/java/tests/generated/com/facebook/yoga/YGDimensionTest.java +122 -0
- package/yoga/java/tests/generated/com/facebook/yoga/YGDisplayContentsTest.java +107 -0
- package/yoga/java/tests/generated/com/facebook/yoga/YGDisplayTest.java +1021 -0
- package/yoga/java/tests/generated/com/facebook/yoga/YGFlexBasisFitContentTest.java +391 -0
- package/yoga/java/tests/generated/com/facebook/yoga/YGFlexDirectionTest.java +4118 -0
- package/yoga/java/tests/generated/com/facebook/yoga/YGFlexTest.java +630 -0
- package/yoga/java/tests/generated/com/facebook/yoga/YGFlexWrapTest.java +1863 -0
- package/yoga/java/tests/generated/com/facebook/yoga/YGGapTest.java +2988 -0
- package/yoga/java/tests/generated/com/facebook/yoga/YGIntrinsicSizeTest.java +926 -0
- package/yoga/java/tests/generated/com/facebook/yoga/YGJustifyContentTest.java +1865 -0
- package/yoga/java/tests/generated/com/facebook/yoga/YGMarginTest.java +1796 -0
- package/yoga/java/tests/generated/com/facebook/yoga/YGMinMaxDimensionTest.java +1210 -0
- package/yoga/java/tests/generated/com/facebook/yoga/YGPaddingTest.java +307 -0
- package/yoga/java/tests/generated/com/facebook/yoga/YGPercentageTest.java +1345 -0
- package/yoga/java/tests/generated/com/facebook/yoga/YGRoundingTest.java +1099 -0
- package/yoga/java/tests/generated/com/facebook/yoga/YGSizeOverflowTest.java +195 -0
- package/yoga/java/tests/generated/com/facebook/yoga/YGStaticPositionTest.java +5992 -0
- package/yoga/java/yogajni.version +13 -0
- package/yoga/javascript/CMakeLists.txt +59 -0
- package/yoga/javascript/README.md +27 -0
- package/yoga/javascript/babel.config.cjs +30 -0
- package/yoga/javascript/jest.config.js +14 -0
- package/yoga/javascript/jest.setup.js +12 -0
- package/yoga/javascript/just.config.cjs +258 -0
- package/yoga/javascript/package.json +52 -0
- package/yoga/javascript/src/generated/YGEnums.ts +249 -0
- package/yoga/javascript/src/index.ts +23 -0
- package/yoga/javascript/src/load.ts +25 -0
- package/yoga/javascript/src/wasm_bridge.c +155 -0
- package/yoga/javascript/src/wrapAssembly.ts +1025 -0
- package/yoga/javascript/tests/Benchmarks/YGBenchmark.test.ts +110 -0
- package/yoga/javascript/tests/YGAlignBaselineTest.test.ts +104 -0
- package/yoga/javascript/tests/YGComputedBorderTest.test.ts +25 -0
- package/yoga/javascript/tests/YGComputedMarginTest.test.ts +25 -0
- package/yoga/javascript/tests/YGComputedPaddingTest.test.ts +25 -0
- package/yoga/javascript/tests/YGDirtiedTest.test.ts +149 -0
- package/yoga/javascript/tests/YGErrataTest.test.ts +34 -0
- package/yoga/javascript/tests/YGFlexBasisAuto.test.ts +21 -0
- package/yoga/javascript/tests/YGHadOverflowTest.test.ts +110 -0
- package/yoga/javascript/tests/YGHasNewLayout.test.ts +81 -0
- package/yoga/javascript/tests/YGMeasureCacheTest.test.ts +29 -0
- package/yoga/javascript/tests/YGMeasureTest.test.ts +66 -0
- package/yoga/javascript/tests/bin/run-bench.ts +60 -0
- package/yoga/javascript/tests/generated/YGAbsolutePositionTest.test.ts +1531 -0
- package/yoga/javascript/tests/generated/YGAlignContentTest.test.ts +5181 -0
- package/yoga/javascript/tests/generated/YGAlignItemsTest.test.ts +2013 -0
- package/yoga/javascript/tests/generated/YGAlignSelfTest.test.ts +248 -0
- package/yoga/javascript/tests/generated/YGAndroidNewsFeed.test.ts +306 -0
- package/yoga/javascript/tests/generated/YGAspectRatioTest.test.ts +66 -0
- package/yoga/javascript/tests/generated/YGAutoTest.test.ts +303 -0
- package/yoga/javascript/tests/generated/YGBorderTest.test.ts +199 -0
- package/yoga/javascript/tests/generated/YGBoxSizingTest.test.ts +1978 -0
- package/yoga/javascript/tests/generated/YGDimensionTest.test.ts +111 -0
- package/yoga/javascript/tests/generated/YGDisplayContentsTest.test.ts +99 -0
- package/yoga/javascript/tests/generated/YGDisplayTest.test.ts +962 -0
- package/yoga/javascript/tests/generated/YGFlexBasisFitContentTest.test.ts +364 -0
- package/yoga/javascript/tests/generated/YGFlexDirectionTest.test.ts +3903 -0
- package/yoga/javascript/tests/generated/YGFlexTest.test.ts +587 -0
- package/yoga/javascript/tests/generated/YGFlexWrapTest.test.ts +1768 -0
- package/yoga/javascript/tests/generated/YGGapTest.test.ts +2857 -0
- package/yoga/javascript/tests/generated/YGIntrinsicSizeTest.test.ts +843 -0
- package/yoga/javascript/tests/generated/YGJustifyContentTest.test.ts +1750 -0
- package/yoga/javascript/tests/generated/YGMarginTest.test.ts +1657 -0
- package/yoga/javascript/tests/generated/YGMinMaxDimensionTest.test.ts +1111 -0
- package/yoga/javascript/tests/generated/YGPaddingTest.test.ts +276 -0
- package/yoga/javascript/tests/generated/YGPercentageTest.test.ts +1246 -0
- package/yoga/javascript/tests/generated/YGRoundingTest.test.ts +1044 -0
- package/yoga/javascript/tests/generated/YGSizeOverflowTest.test.ts +180 -0
- package/yoga/javascript/tests/generated/YGStaticPositionTest.test.ts +5741 -0
- package/yoga/javascript/tests/tools/MeasureCounter.ts +66 -0
- package/yoga/javascript/tests/tools/globals.ts +19 -0
- package/yoga/javascript/tests/tools/utils.ts +90 -0
- package/yoga/javascript/tsconfig.json +23 -0
- package/yoga/lib/jni/jni.h +13 -0
- package/yoga/lib/jni/real/jni.h +1141 -0
- package/yoga/lib/jsr-305/jsr305.jar +0 -0
- package/yoga/lib/nlohmann/json.hpp +24766 -0
- package/yoga/lib/soloader/soloader-0.5.1.aar +0 -0
- package/yoga/package.json +44 -0
- package/yoga/scripts/clang-format +52 -0
- package/yoga/scripts/clang-format.js +93 -0
- package/yoga/scripts/format-kotlin.js +88 -0
- package/yoga/scripts/format-python.js +150 -0
- package/yoga/scripts/format-utils.js +82 -0
- package/yoga/set-version.py +37 -0
- package/yoga/settings.gradle.kts +29 -0
- package/yoga/test/AssertFatalTest.cpp +70 -0
- package/yoga/tests/.clang-tidy +7 -0
- package/yoga/tests/CMakeLists.txt +35 -0
- package/yoga/tests/CacheTest.cpp +229 -0
- package/yoga/tests/EventPublisherTest.cpp +162 -0
- package/yoga/tests/EventsTest.cpp +362 -0
- package/yoga/tests/FlexGapTest.cpp +93 -0
- package/yoga/tests/FloatOptionalTest.cpp +214 -0
- package/yoga/tests/GridStyleTest.cpp +103 -0
- package/yoga/tests/OrdinalsTest.cpp +35 -0
- package/yoga/tests/SmallValueBufferTest.cpp +161 -0
- package/yoga/tests/StyleTest.cpp +48 -0
- package/yoga/tests/StyleValuePoolTest.cpp +146 -0
- package/yoga/tests/YGAlignBaselineTest.cpp +837 -0
- package/yoga/tests/YGAspectRatioTest.cpp +898 -0
- package/yoga/tests/YGAutoMinSizeTest.cpp +581 -0
- package/yoga/tests/YGBaselineFuncTest.cpp +62 -0
- package/yoga/tests/YGCloneNodeTest.cpp +131 -0
- package/yoga/tests/YGComputedMarginTest.cpp +117 -0
- package/yoga/tests/YGComputedPaddingTest.cpp +119 -0
- package/yoga/tests/YGConfigTest.cpp +239 -0
- package/yoga/tests/YGContentsNodeHasNewLayoutTest.cpp +190 -0
- package/yoga/tests/YGDefaultValuesTest.cpp +175 -0
- package/yoga/tests/YGDirtiedTest.cpp +110 -0
- package/yoga/tests/YGDirtyMarkingTest.cpp +341 -0
- package/yoga/tests/YGEdgeTest.cpp +161 -0
- package/yoga/tests/YGFirstChildMinWidthTest.cpp +133 -0
- package/yoga/tests/YGFlexBasisFitContentTest.cpp +241 -0
- package/yoga/tests/YGFlexShrinkBorderBugTest.cpp +48 -0
- package/yoga/tests/YGHadOverflowTest.cpp +135 -0
- package/yoga/tests/YGLayoutableChildrenTest.cpp +191 -0
- package/yoga/tests/YGMeasureCacheTest.cpp +178 -0
- package/yoga/tests/YGMeasureModeTest.cpp +332 -0
- package/yoga/tests/YGMeasureTest.cpp +1010 -0
- package/yoga/tests/YGNodeCallbackTest.cpp +80 -0
- package/yoga/tests/YGNodeChildTest.cpp +68 -0
- package/yoga/tests/YGPersistenceTest.cpp +291 -0
- package/yoga/tests/YGPersistentNodeCloningTest.cpp +214 -0
- package/yoga/tests/YGRelayoutTest.cpp +255 -0
- package/yoga/tests/YGRoundingFunctionTest.cpp +186 -0
- package/yoga/tests/YGRoundingMeasureFuncTest.cpp +139 -0
- package/yoga/tests/YGScaleChangeTest.cpp +176 -0
- package/yoga/tests/YGStyleTest.cpp +75 -0
- package/yoga/tests/YGTreeMutationTest.cpp +115 -0
- package/yoga/tests/YGValueTest.cpp +23 -0
- package/yoga/tests/YGZeroOutLayoutRecursivelyTest.cpp +37 -0
- package/yoga/tests/generated/YGAbsolutePositionTest.cpp +1685 -0
- package/yoga/tests/generated/YGAlignContentTest.cpp +5485 -0
- package/yoga/tests/generated/YGAlignItemsTest.cpp +2142 -0
- package/yoga/tests/generated/YGAlignSelfTest.cpp +257 -0
- package/yoga/tests/generated/YGAndroidNewsFeed.cpp +295 -0
- package/yoga/tests/generated/YGAspectRatioTest.cpp +55 -0
- package/yoga/tests/generated/YGAutoTest.cpp +312 -0
- package/yoga/tests/generated/YGBorderTest.cpp +208 -0
- package/yoga/tests/generated/YGBoxSizingTest.cpp +2192 -0
- package/yoga/tests/generated/YGDimensionTest.cpp +105 -0
- package/yoga/tests/generated/YGDisplayContentsTest.cpp +89 -0
- package/yoga/tests/generated/YGDisplayTest.cpp +1016 -0
- package/yoga/tests/generated/YGFlexBasisFitContentTest.cpp +378 -0
- package/yoga/tests/generated/YGFlexDirectionTest.cpp +4152 -0
- package/yoga/tests/generated/YGFlexTest.cpp +621 -0
- package/yoga/tests/generated/YGFlexWrapTest.cpp +1867 -0
- package/yoga/tests/generated/YGGapTest.cpp +3001 -0
- package/yoga/tests/generated/YGIntrinsicSizeTest.cpp +924 -0
- package/yoga/tests/generated/YGJustifyContentTest.cpp +1874 -0
- package/yoga/tests/generated/YGMarginTest.cpp +1811 -0
- package/yoga/tests/generated/YGMinMaxDimensionTest.cpp +1215 -0
- package/yoga/tests/generated/YGPaddingTest.cpp +295 -0
- package/yoga/tests/generated/YGPercentageTest.cpp +1350 -0
- package/yoga/tests/generated/YGRoundingTest.cpp +1093 -0
- package/yoga/tests/generated/YGSizeOverflowTest.cpp +179 -0
- package/yoga/tests/generated/YGStaticPositionTest.cpp +6035 -0
- package/yoga/tests/util/TestUtil.cpp +164 -0
- package/yoga/tests/util/TestUtil.h +43 -0
- package/yoga/unit_tests +25 -0
- package/yoga/unit_tests.bat +28 -0
- package/yoga/website/.eslintrc.cjs +26 -0
- package/yoga/website/README.md +41 -0
- package/yoga/website/babel.config.cjs +10 -0
- package/yoga/website/blog/2023-06-30-announcing-yoga-2.0.md +183 -0
- package/yoga/website/blog/2024-06-24-announcing-yoga-3.1.md +67 -0
- package/yoga/website/blog/2024-12-02-announcing-yoga-3.2.md +84 -0
- package/yoga/website/blog/authors.yml +10 -0
- package/yoga/website/blog/yoga-3-release/2024-03-14-announcing-yoga-3.0.md +586 -0
- package/yoga/website/blog/yoga-3-release/img/image1.png +0 -0
- package/yoga/website/blog/yoga-3-release/img/image10.png +0 -0
- package/yoga/website/blog/yoga-3-release/img/image11.png +0 -0
- package/yoga/website/blog/yoga-3-release/img/image12.png +0 -0
- package/yoga/website/blog/yoga-3-release/img/image13.png +0 -0
- package/yoga/website/blog/yoga-3-release/img/image14.png +0 -0
- package/yoga/website/blog/yoga-3-release/img/image15.png +0 -0
- package/yoga/website/blog/yoga-3-release/img/image16.png +0 -0
- package/yoga/website/blog/yoga-3-release/img/image17.png +0 -0
- package/yoga/website/blog/yoga-3-release/img/image2.png +0 -0
- package/yoga/website/blog/yoga-3-release/img/image3.png +0 -0
- package/yoga/website/blog/yoga-3-release/img/image4.png +0 -0
- package/yoga/website/blog/yoga-3-release/img/image5.png +0 -0
- package/yoga/website/blog/yoga-3-release/img/image6.png +0 -0
- package/yoga/website/blog/yoga-3-release/img/image7.png +0 -0
- package/yoga/website/blog/yoga-3-release/img/image8.png +0 -0
- package/yoga/website/blog/yoga-3-release/img/image9.png +0 -0
- package/yoga/website/docs/about-yoga.md +13 -0
- package/yoga/website/docs/advanced/_category_.json +4 -0
- package/yoga/website/docs/advanced/containing-block.md +89 -0
- package/yoga/website/docs/advanced/external-layout-systems.mdx +106 -0
- package/yoga/website/docs/advanced/incremental-layout.mdx +87 -0
- package/yoga/website/docs/getting-started/_category_.json +4 -0
- package/yoga/website/docs/getting-started/configuring-yoga.mdx +165 -0
- package/yoga/website/docs/getting-started/laying-out-a-tree.mdx +178 -0
- package/yoga/website/docs/img/config-contextual.svg +17 -0
- package/yoga/website/docs/img/config-per-node.svg +17 -0
- package/yoga/website/docs/img/config-uniform.svg +17 -0
- package/yoga/website/docs/img/invalidation-clean-tree.svg +17 -0
- package/yoga/website/docs/img/invalidation-dirtied-tree.svg +17 -0
- package/yoga/website/docs/img/invalidation-new-layout-tree.svg +17 -0
- package/yoga/website/docs/img/pixel-grid-after.png +0 -0
- package/yoga/website/docs/img/pixel-grid-before.png +0 -0
- package/yoga/website/docs/img/wireframe-example.svg +105 -0
- package/yoga/website/docs/styling/_category_.json +4 -0
- package/yoga/website/docs/styling/align-content.mdx +47 -0
- package/yoga/website/docs/styling/align-items-self.mdx +48 -0
- package/yoga/website/docs/styling/aspect-ratio.mdx +27 -0
- package/yoga/website/docs/styling/display.mdx +25 -0
- package/yoga/website/docs/styling/flex-basis-grow-shrink.mdx +65 -0
- package/yoga/website/docs/styling/flex-direction.mdx +37 -0
- package/yoga/website/docs/styling/flex-wrap.mdx +33 -0
- package/yoga/website/docs/styling/gap.mdx +49 -0
- package/yoga/website/docs/styling/index.md +48 -0
- package/yoga/website/docs/styling/insets.mdx +62 -0
- package/yoga/website/docs/styling/justify-content.mdx +43 -0
- package/yoga/website/docs/styling/layout-direction.mdx +34 -0
- package/yoga/website/docs/styling/margin-padding-border.mdx +41 -0
- package/yoga/website/docs/styling/min-max-width-height.mdx +52 -0
- package/yoga/website/docs/styling/position.mdx +37 -0
- package/yoga/website/docs/styling/width-height.mdx +37 -0
- package/yoga/website/docusaurus.config.js +113 -0
- package/yoga/website/package.json +43 -0
- package/yoga/website/sidebars.cjs +27 -0
- package/yoga/website/src/components/EditorToolbar.module.css +77 -0
- package/yoga/website/src/components/EditorToolbar.tsx +72 -0
- package/yoga/website/src/components/FlexStyle.ts +439 -0
- package/yoga/website/src/components/LayoutBox.module.css +68 -0
- package/yoga/website/src/components/LayoutBox.tsx +61 -0
- package/yoga/website/src/components/Playground.module.css +130 -0
- package/yoga/website/src/components/Playground.tsx +187 -0
- package/yoga/website/src/components/YogaViewer.tsx +128 -0
- package/yoga/website/src/css/custom.css +37 -0
- package/yoga/website/src/pages/index.module.css +34 -0
- package/yoga/website/src/pages/index.tsx +84 -0
- package/yoga/website/src/pages/markdown-page.md +7 -0
- package/yoga/website/src/pages/playground.module.css +11 -0
- package/yoga/website/src/pages/playground.tsx +56 -0
- package/yoga/website/static/.nojekyll +0 -0
- package/yoga/website/static/img/docusaurus.png +0 -0
- package/yoga/website/static/img/favicon.svg +17 -0
- package/yoga/website/static/img/link.svg +4 -0
- package/yoga/website/static/img/logo.svg +17 -0
- package/yoga/website/static/img/meta_oss.svg +1 -0
- package/yoga/website/static/img/opengraph.png +0 -0
- package/yoga/website/static/img/undraw_docusaurus_mountain.svg +171 -0
- package/yoga/website/static/img/undraw_docusaurus_react.svg +170 -0
- package/yoga/website/static/img/undraw_docusaurus_tree.svg +40 -0
- package/yoga/website/tsconfig.json +10 -0
- package/yoga/yarn.lock +11499 -0
- package/yoga/yoga/CMakeLists.txt +41 -0
- package/yoga/yoga/YGConfig.cpp +92 -0
- package/yoga/yoga/YGConfig.h +158 -0
- package/yoga/yoga/YGEnums.cpp +304 -0
- package/yoga/yoga/YGEnums.h +163 -0
- package/yoga/yoga/YGMacros.h +101 -0
- package/yoga/yoga/YGNode.cpp +407 -0
- package/yoga/yoga/YGNode.h +373 -0
- package/yoga/yoga/YGNodeLayout.cpp +100 -0
- package/yoga/yoga/YGNodeLayout.h +43 -0
- package/yoga/yoga/YGNodeStyle.cpp +774 -0
- package/yoga/yoga/YGNodeStyle.h +243 -0
- package/yoga/yoga/YGPixelGrid.cpp +22 -0
- package/yoga/yoga/YGPixelGrid.h +29 -0
- package/yoga/yoga/YGValue.cpp +20 -0
- package/yoga/yoga/YGValue.h +83 -0
- package/yoga/yoga/Yoga.h +21 -0
- package/yoga/yoga/algorithm/AbsoluteLayout.cpp +595 -0
- package/yoga/yoga/algorithm/AbsoluteLayout.h +41 -0
- package/yoga/yoga/algorithm/Align.h +83 -0
- package/yoga/yoga/algorithm/Baseline.cpp +78 -0
- package/yoga/yoga/algorithm/Baseline.h +21 -0
- package/yoga/yoga/algorithm/BoundAxis.h +79 -0
- package/yoga/yoga/algorithm/Cache.cpp +121 -0
- package/yoga/yoga/algorithm/Cache.h +30 -0
- package/yoga/yoga/algorithm/CalculateLayout.cpp +2968 -0
- package/yoga/yoga/algorithm/CalculateLayout.h +60 -0
- package/yoga/yoga/algorithm/FlexDirection.h +120 -0
- package/yoga/yoga/algorithm/FlexLine.cpp +124 -0
- package/yoga/yoga/algorithm/FlexLine.h +75 -0
- package/yoga/yoga/algorithm/PixelGrid.cpp +138 -0
- package/yoga/yoga/algorithm/PixelGrid.h +29 -0
- package/yoga/yoga/algorithm/SizingMode.h +73 -0
- package/yoga/yoga/algorithm/TrailingPosition.h +44 -0
- package/yoga/yoga/config/Config.cpp +135 -0
- package/yoga/yoga/config/Config.h +93 -0
- package/yoga/yoga/debug/AssertFatal.cpp +54 -0
- package/yoga/yoga/debug/AssertFatal.h +29 -0
- package/yoga/yoga/debug/Log.cpp +107 -0
- package/yoga/yoga/debug/Log.h +34 -0
- package/yoga/yoga/enums/Align.h +49 -0
- package/yoga/yoga/enums/BoxSizing.h +40 -0
- package/yoga/yoga/enums/Dimension.h +40 -0
- package/yoga/yoga/enums/Direction.h +41 -0
- package/yoga/yoga/enums/Display.h +42 -0
- package/yoga/yoga/enums/Edge.h +47 -0
- package/yoga/yoga/enums/Errata.h +43 -0
- package/yoga/yoga/enums/ExperimentalFeature.h +40 -0
- package/yoga/yoga/enums/FlexDirection.h +42 -0
- package/yoga/yoga/enums/GridTrackType.h +43 -0
- package/yoga/yoga/enums/Gutter.h +41 -0
- package/yoga/yoga/enums/Justify.h +48 -0
- package/yoga/yoga/enums/LogLevel.h +44 -0
- package/yoga/yoga/enums/MeasureMode.h +41 -0
- package/yoga/yoga/enums/NodeType.h +40 -0
- package/yoga/yoga/enums/Overflow.h +41 -0
- package/yoga/yoga/enums/PhysicalEdge.h +21 -0
- package/yoga/yoga/enums/PositionType.h +41 -0
- package/yoga/yoga/enums/Unit.h +45 -0
- package/yoga/yoga/enums/Wrap.h +41 -0
- package/yoga/yoga/enums/YogaEnums.h +84 -0
- package/yoga/yoga/event/event.cpp +89 -0
- package/yoga/yoga/event/event.h +131 -0
- package/yoga/yoga/module.modulemap +21 -0
- package/yoga/yoga/node/CachedMeasurement.h +53 -0
- package/yoga/yoga/node/LayoutResults.cpp +48 -0
- package/yoga/yoga/node/LayoutResults.h +136 -0
- package/yoga/yoga/node/LayoutableChildren.h +148 -0
- package/yoga/yoga/node/Node.cpp +509 -0
- package/yoga/yoga/node/Node.h +372 -0
- package/yoga/yoga/numeric/Comparison.h +81 -0
- package/yoga/yoga/numeric/FloatOptional.h +84 -0
- package/yoga/yoga/style/GridLine.h +53 -0
- package/yoga/yoga/style/GridStyle.h +80 -0
- package/yoga/yoga/style/GridTrack.h +63 -0
- package/yoga/yoga/style/SmallValueBuffer.h +133 -0
- package/yoga/yoga/style/Style.h +932 -0
- package/yoga/yoga/style/StyleLength.h +121 -0
- package/yoga/yoga/style/StyleSizeLength.h +152 -0
- package/yoga/yoga/style/StyleValueHandle.h +114 -0
- package/yoga/yoga/style/StyleValuePool.h +194 -0
|
@@ -0,0 +1,248 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* Copyright (c) Meta Platforms, Inc. and affiliates.
|
|
3
|
+
*
|
|
4
|
+
* This source code is licensed under the MIT license found in the
|
|
5
|
+
* LICENSE file in the root directory of this source tree.
|
|
6
|
+
*/
|
|
7
|
+
|
|
8
|
+
#include <memory>
|
|
9
|
+
#include <vector>
|
|
10
|
+
|
|
11
|
+
#include <benchmark/TreeDeserialization.h>
|
|
12
|
+
#include <capture/CaptureTree.h>
|
|
13
|
+
#include <nlohmann/json.hpp>
|
|
14
|
+
#include <yoga/Yoga.h>
|
|
15
|
+
|
|
16
|
+
namespace facebook::yoga {
|
|
17
|
+
|
|
18
|
+
using namespace nlohmann;
|
|
19
|
+
|
|
20
|
+
static inline bool isAuto(json& j) {
|
|
21
|
+
return j.is_string() && j == "auto";
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
static inline bool isUndefined(json& j) {
|
|
25
|
+
return j.is_string() && j == "undefined";
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
static inline std::string invalidArgumentMessage(
|
|
29
|
+
const std::string& arg,
|
|
30
|
+
const std::string& enumName) {
|
|
31
|
+
return arg + " does not represent any " + enumName + " values";
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
static inline float floatFromJson(json& j) {
|
|
35
|
+
float result = YGUndefined;
|
|
36
|
+
if (!j.is_null()) {
|
|
37
|
+
result = j;
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
return result;
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
YGFlexDirection flexDirectionFromString(const std::string& str) {
|
|
44
|
+
if (str == "row") {
|
|
45
|
+
return YGFlexDirectionRow;
|
|
46
|
+
} else if (str == "row-reverse") {
|
|
47
|
+
return YGFlexDirectionRowReverse;
|
|
48
|
+
} else if (str == "column") {
|
|
49
|
+
return YGFlexDirectionColumn;
|
|
50
|
+
} else if (str == "column-reverse") {
|
|
51
|
+
return YGFlexDirectionColumnReverse;
|
|
52
|
+
} else {
|
|
53
|
+
throw std::invalid_argument(invalidArgumentMessage(str, "YGFlexDirection"));
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
YGJustify justifyContentFromString(const std::string& str) {
|
|
58
|
+
if (str == "flex-start") {
|
|
59
|
+
return YGJustifyFlexStart;
|
|
60
|
+
} else if (str == "center") {
|
|
61
|
+
return YGJustifyCenter;
|
|
62
|
+
} else if (str == "flex-end") {
|
|
63
|
+
return YGJustifyFlexEnd;
|
|
64
|
+
} else if (str == "space-between") {
|
|
65
|
+
return YGJustifySpaceBetween;
|
|
66
|
+
} else if (str == "space-around") {
|
|
67
|
+
return YGJustifySpaceAround;
|
|
68
|
+
} else if (str == "space-evenly") {
|
|
69
|
+
return YGJustifySpaceEvenly;
|
|
70
|
+
} else {
|
|
71
|
+
throw std::invalid_argument(invalidArgumentMessage(str, "YGJustify"));
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
|
|
75
|
+
YGAlign alignFromString(const std::string& str) {
|
|
76
|
+
if (str == "auto") {
|
|
77
|
+
return YGAlignAuto;
|
|
78
|
+
} else if (str == "flex-start") {
|
|
79
|
+
return YGAlignFlexStart;
|
|
80
|
+
} else if (str == "center") {
|
|
81
|
+
return YGAlignCenter;
|
|
82
|
+
} else if (str == "flex-end") {
|
|
83
|
+
return YGAlignFlexEnd;
|
|
84
|
+
} else if (str == "stretch") {
|
|
85
|
+
return YGAlignStretch;
|
|
86
|
+
} else if (str == "baseline") {
|
|
87
|
+
return YGAlignBaseline;
|
|
88
|
+
} else if (str == "space-between") {
|
|
89
|
+
return YGAlignSpaceBetween;
|
|
90
|
+
} else if (str == "space-around") {
|
|
91
|
+
return YGAlignSpaceAround;
|
|
92
|
+
} else if (str == "space-evenly") {
|
|
93
|
+
return YGAlignSpaceEvenly;
|
|
94
|
+
} else {
|
|
95
|
+
throw std::invalid_argument(invalidArgumentMessage(str, "YGAlign"));
|
|
96
|
+
}
|
|
97
|
+
}
|
|
98
|
+
|
|
99
|
+
YGWrap wrapFromString(const std::string& str) {
|
|
100
|
+
if (str == "no-wrap") {
|
|
101
|
+
return YGWrapNoWrap;
|
|
102
|
+
} else if (str == "wrap") {
|
|
103
|
+
return YGWrapWrap;
|
|
104
|
+
} else if (str == "wrap-reverse") {
|
|
105
|
+
return YGWrapWrapReverse;
|
|
106
|
+
} else {
|
|
107
|
+
throw std::invalid_argument(invalidArgumentMessage(str, "YGAlign"));
|
|
108
|
+
}
|
|
109
|
+
}
|
|
110
|
+
|
|
111
|
+
YGOverflow overflowFromString(const std::string& str) {
|
|
112
|
+
if (str == "visible") {
|
|
113
|
+
return YGOverflowVisible;
|
|
114
|
+
} else if (str == "hidden") {
|
|
115
|
+
return YGOverflowHidden;
|
|
116
|
+
} else if (str == "scroll") {
|
|
117
|
+
return YGOverflowScroll;
|
|
118
|
+
} else {
|
|
119
|
+
throw std::invalid_argument(invalidArgumentMessage(str, "YGAlign"));
|
|
120
|
+
}
|
|
121
|
+
}
|
|
122
|
+
|
|
123
|
+
YGDisplay displayFromString(const std::string& str) {
|
|
124
|
+
if (str == "flex") {
|
|
125
|
+
return YGDisplayFlex;
|
|
126
|
+
} else if (str == "none") {
|
|
127
|
+
return YGDisplayNone;
|
|
128
|
+
} else {
|
|
129
|
+
throw std::invalid_argument(invalidArgumentMessage(str, "YGAlign"));
|
|
130
|
+
}
|
|
131
|
+
}
|
|
132
|
+
|
|
133
|
+
YGPositionType positionTypeFromString(const std::string& str) {
|
|
134
|
+
if (str == "static") {
|
|
135
|
+
return YGPositionTypeStatic;
|
|
136
|
+
} else if (str == "relative") {
|
|
137
|
+
return YGPositionTypeRelative;
|
|
138
|
+
} else if (str == "absolute") {
|
|
139
|
+
return YGPositionTypeAbsolute;
|
|
140
|
+
} else {
|
|
141
|
+
throw std::invalid_argument(invalidArgumentMessage(str, "YGAlign"));
|
|
142
|
+
}
|
|
143
|
+
}
|
|
144
|
+
|
|
145
|
+
YGUnit unitFromJson(json& j) {
|
|
146
|
+
if (isAuto(j)) {
|
|
147
|
+
return YGUnitAuto;
|
|
148
|
+
}
|
|
149
|
+
if (isUndefined(j)) {
|
|
150
|
+
return YGUnitUndefined;
|
|
151
|
+
}
|
|
152
|
+
|
|
153
|
+
std::string unit = j["unit"];
|
|
154
|
+
if (unit == "px") {
|
|
155
|
+
return YGUnitPoint;
|
|
156
|
+
} else if (unit == "pct") {
|
|
157
|
+
return YGUnitPercent;
|
|
158
|
+
} else {
|
|
159
|
+
throw std::invalid_argument(invalidArgumentMessage(unit, "YGUnit"));
|
|
160
|
+
}
|
|
161
|
+
}
|
|
162
|
+
|
|
163
|
+
YGEdge edgeFromString(const std::string& str) {
|
|
164
|
+
if (str == "left") {
|
|
165
|
+
return YGEdgeLeft;
|
|
166
|
+
} else if (str == "top") {
|
|
167
|
+
return YGEdgeTop;
|
|
168
|
+
} else if (str == "right") {
|
|
169
|
+
return YGEdgeRight;
|
|
170
|
+
} else if (str == "bottom") {
|
|
171
|
+
return YGEdgeBottom;
|
|
172
|
+
} else if (str == "start") {
|
|
173
|
+
return YGEdgeStart;
|
|
174
|
+
} else if (str == "end") {
|
|
175
|
+
return YGEdgeEnd;
|
|
176
|
+
} else if (str == "horizontal") {
|
|
177
|
+
return YGEdgeHorizontal;
|
|
178
|
+
} else if (str == "vertical") {
|
|
179
|
+
return YGEdgeVertical;
|
|
180
|
+
} else if (str == "all") {
|
|
181
|
+
return YGEdgeAll;
|
|
182
|
+
} else {
|
|
183
|
+
throw std::invalid_argument(invalidArgumentMessage(str, "YGEdge"));
|
|
184
|
+
}
|
|
185
|
+
}
|
|
186
|
+
|
|
187
|
+
YGErrata errataFromString(const std::string& str) {
|
|
188
|
+
if (str == "none") {
|
|
189
|
+
return YGErrataNone;
|
|
190
|
+
} else if (str == "all") {
|
|
191
|
+
return YGErrataAll;
|
|
192
|
+
} else if (str == "classic") {
|
|
193
|
+
return YGErrataClassic;
|
|
194
|
+
} else {
|
|
195
|
+
throw std::invalid_argument(invalidArgumentMessage(str, "YGErrata"));
|
|
196
|
+
}
|
|
197
|
+
}
|
|
198
|
+
|
|
199
|
+
YGExperimentalFeature experimentalFeatureFromString(const std::string& str) {
|
|
200
|
+
if (str == "web-flex-basis") {
|
|
201
|
+
return YGExperimentalFeatureWebFlexBasis;
|
|
202
|
+
} else {
|
|
203
|
+
throw std::invalid_argument(
|
|
204
|
+
invalidArgumentMessage(str, "YGExperimentalFeature"));
|
|
205
|
+
}
|
|
206
|
+
}
|
|
207
|
+
|
|
208
|
+
std::string edgeStringFromPropertyName(
|
|
209
|
+
const json::iterator& it,
|
|
210
|
+
const std::string& propertyName) {
|
|
211
|
+
return it.key().substr(propertyName.length() + 1);
|
|
212
|
+
}
|
|
213
|
+
|
|
214
|
+
YGDirection directionFromString(const std::string& str) {
|
|
215
|
+
if (str == "ltr") {
|
|
216
|
+
return YGDirectionLTR;
|
|
217
|
+
} else if (str == "rtl") {
|
|
218
|
+
return YGDirectionRTL;
|
|
219
|
+
} else if (str == "inherit") {
|
|
220
|
+
return YGDirectionInherit;
|
|
221
|
+
} else {
|
|
222
|
+
throw std::invalid_argument(invalidArgumentMessage(str, "YGDirection"));
|
|
223
|
+
}
|
|
224
|
+
}
|
|
225
|
+
|
|
226
|
+
YGMeasureMode measureModeFromString(const std::string& str) {
|
|
227
|
+
if (str == "at-most") {
|
|
228
|
+
return YGMeasureModeAtMost;
|
|
229
|
+
} else if (str == "exactly") {
|
|
230
|
+
return YGMeasureModeExactly;
|
|
231
|
+
} else if (str == "undefined") {
|
|
232
|
+
return YGMeasureModeUndefined;
|
|
233
|
+
} else {
|
|
234
|
+
throw std::invalid_argument(invalidArgumentMessage(str, "YGMeasureMode"));
|
|
235
|
+
}
|
|
236
|
+
}
|
|
237
|
+
|
|
238
|
+
SerializedMeasureFunc serializedMeasureFuncFromJson(json& j) {
|
|
239
|
+
return SerializedMeasureFunc{
|
|
240
|
+
.inputWidth = floatFromJson(j["width"]),
|
|
241
|
+
.widthMode = measureModeFromString(j["width-mode"]),
|
|
242
|
+
.inputHeight = floatFromJson(j["height"]),
|
|
243
|
+
.heightMode = measureModeFromString(j["height-mode"]),
|
|
244
|
+
.outputWidth = floatFromJson(j["output-width"]),
|
|
245
|
+
.outputHeight = floatFromJson(j["output-height"]),
|
|
246
|
+
.durationNs = j["duration-ns"]};
|
|
247
|
+
}
|
|
248
|
+
} // namespace facebook::yoga
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* Copyright (c) Meta Platforms, Inc. and affiliates.
|
|
3
|
+
*
|
|
4
|
+
* This source code is licensed under the MIT license found in the
|
|
5
|
+
* LICENSE file in the root directory of this source tree.
|
|
6
|
+
*/
|
|
7
|
+
|
|
8
|
+
#pragma once
|
|
9
|
+
|
|
10
|
+
#include <memory>
|
|
11
|
+
#include <vector>
|
|
12
|
+
|
|
13
|
+
#include <capture/CaptureTree.h>
|
|
14
|
+
#include <nlohmann/json.hpp>
|
|
15
|
+
#include <yoga/Yoga.h>
|
|
16
|
+
|
|
17
|
+
namespace facebook::yoga {
|
|
18
|
+
|
|
19
|
+
using namespace nlohmann;
|
|
20
|
+
|
|
21
|
+
YGFlexDirection flexDirectionFromString(const std::string& str);
|
|
22
|
+
|
|
23
|
+
YGJustify justifyContentFromString(const std::string& str);
|
|
24
|
+
|
|
25
|
+
YGAlign alignFromString(const std::string& str);
|
|
26
|
+
|
|
27
|
+
YGWrap wrapFromString(const std::string& str);
|
|
28
|
+
|
|
29
|
+
YGOverflow overflowFromString(const std::string& str);
|
|
30
|
+
|
|
31
|
+
YGDisplay displayFromString(const std::string& str);
|
|
32
|
+
|
|
33
|
+
YGPositionType positionTypeFromString(const std::string& str);
|
|
34
|
+
|
|
35
|
+
YGUnit unitFromJson(json& j);
|
|
36
|
+
|
|
37
|
+
YGEdge edgeFromString(const std::string& str);
|
|
38
|
+
|
|
39
|
+
YGErrata errataFromString(const std::string& str);
|
|
40
|
+
|
|
41
|
+
YGExperimentalFeature experimentalFeatureFromString(const std::string& str);
|
|
42
|
+
|
|
43
|
+
std::string edgeStringFromPropertyName(
|
|
44
|
+
const json::iterator& it,
|
|
45
|
+
const std::string& propertyName);
|
|
46
|
+
|
|
47
|
+
YGDirection directionFromString(const std::string& str);
|
|
48
|
+
|
|
49
|
+
YGMeasureMode measureModeFromString(const std::string& str);
|
|
50
|
+
|
|
51
|
+
SerializedMeasureFunc serializedMeasureFuncFromJson(json& j);
|
|
52
|
+
} // namespace facebook::yoga
|
|
@@ -0,0 +1,183 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* Copyright (c) Meta Platforms, Inc. and affiliates.
|
|
3
|
+
*
|
|
4
|
+
* This source code is licensed under the MIT license found in the
|
|
5
|
+
* LICENSE file in the root directory of this source tree.
|
|
6
|
+
*/
|
|
7
|
+
|
|
8
|
+
#include <math.h>
|
|
9
|
+
#include <stdint.h>
|
|
10
|
+
#include <stdio.h>
|
|
11
|
+
#include <stdlib.h>
|
|
12
|
+
#include <time.h>
|
|
13
|
+
|
|
14
|
+
#include <yoga/Yoga.h>
|
|
15
|
+
|
|
16
|
+
#define NUM_REPETITIONS 1000
|
|
17
|
+
|
|
18
|
+
#define YGBENCHMARKS(BLOCK) \
|
|
19
|
+
int main(int argc, char const* argv[]) { \
|
|
20
|
+
(void)argc; \
|
|
21
|
+
(void)argv; \
|
|
22
|
+
clock_t __start; \
|
|
23
|
+
clock_t __endTimes[NUM_REPETITIONS]; \
|
|
24
|
+
{ \
|
|
25
|
+
BLOCK \
|
|
26
|
+
} \
|
|
27
|
+
return 0; \
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
#define YGBENCHMARK(NAME, BLOCK) \
|
|
31
|
+
__start = clock(); \
|
|
32
|
+
for (uint32_t __i = 0; __i < NUM_REPETITIONS; __i++) { \
|
|
33
|
+
{BLOCK} __endTimes[__i] = clock(); \
|
|
34
|
+
} \
|
|
35
|
+
__printBenchmarkResult(NAME, __start, __endTimes);
|
|
36
|
+
|
|
37
|
+
static int __compareDoubles(const void* a, const void* b) {
|
|
38
|
+
double arg1 = *(const double*)a;
|
|
39
|
+
double arg2 = *(const double*)b;
|
|
40
|
+
|
|
41
|
+
if (arg1 < arg2) {
|
|
42
|
+
return -1;
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
if (arg1 > arg2) {
|
|
46
|
+
return 1;
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
return 0;
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
static void
|
|
53
|
+
__printBenchmarkResult(char* name, clock_t start, const clock_t* endTimes) {
|
|
54
|
+
double timesInMs[NUM_REPETITIONS];
|
|
55
|
+
double mean = 0;
|
|
56
|
+
clock_t lastEnd = start;
|
|
57
|
+
for (uint32_t i = 0; i < NUM_REPETITIONS; i++) {
|
|
58
|
+
timesInMs[i] =
|
|
59
|
+
((double)(endTimes[i] - lastEnd)) / (double)CLOCKS_PER_SEC * 1000;
|
|
60
|
+
lastEnd = endTimes[i];
|
|
61
|
+
mean += timesInMs[i];
|
|
62
|
+
}
|
|
63
|
+
mean /= NUM_REPETITIONS;
|
|
64
|
+
|
|
65
|
+
qsort(timesInMs, NUM_REPETITIONS, sizeof(double), __compareDoubles);
|
|
66
|
+
double median = timesInMs[NUM_REPETITIONS / 2];
|
|
67
|
+
|
|
68
|
+
double variance = 0;
|
|
69
|
+
for (uint32_t i = 0; i < NUM_REPETITIONS; i++) {
|
|
70
|
+
variance += pow(timesInMs[i] - mean, 2);
|
|
71
|
+
}
|
|
72
|
+
variance /= NUM_REPETITIONS;
|
|
73
|
+
double stddev = sqrt(variance);
|
|
74
|
+
|
|
75
|
+
printf("%s: median: %lf ms, stddev: %lf ms\n", name, median, stddev);
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
static YGSize _measure(
|
|
79
|
+
YGNodeConstRef node,
|
|
80
|
+
float width,
|
|
81
|
+
YGMeasureMode widthMode,
|
|
82
|
+
float height,
|
|
83
|
+
YGMeasureMode heightMode) {
|
|
84
|
+
(void)node;
|
|
85
|
+
return (YGSize){
|
|
86
|
+
.width = widthMode == YGMeasureModeUndefined ? 10 : width,
|
|
87
|
+
.height = heightMode == YGMeasureModeUndefined ? 10 : height,
|
|
88
|
+
};
|
|
89
|
+
}
|
|
90
|
+
|
|
91
|
+
YGBENCHMARKS({
|
|
92
|
+
YGBENCHMARK("Stack with flex", {
|
|
93
|
+
const YGNodeRef root = YGNodeNew();
|
|
94
|
+
YGNodeStyleSetWidth(root, 100);
|
|
95
|
+
YGNodeStyleSetHeight(root, 100);
|
|
96
|
+
|
|
97
|
+
for (uint32_t i = 0; i < 10; i++) {
|
|
98
|
+
const YGNodeRef child = YGNodeNew();
|
|
99
|
+
YGNodeSetMeasureFunc(child, _measure);
|
|
100
|
+
YGNodeStyleSetFlex(child, 1);
|
|
101
|
+
YGNodeInsertChild(root, child, 0);
|
|
102
|
+
}
|
|
103
|
+
|
|
104
|
+
YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);
|
|
105
|
+
YGNodeFreeRecursive(root);
|
|
106
|
+
});
|
|
107
|
+
|
|
108
|
+
YGBENCHMARK("Align stretch in undefined axis", {
|
|
109
|
+
const YGNodeRef root = YGNodeNew();
|
|
110
|
+
|
|
111
|
+
for (uint32_t i = 0; i < 10; i++) {
|
|
112
|
+
const YGNodeRef child = YGNodeNew();
|
|
113
|
+
YGNodeStyleSetHeight(child, 20);
|
|
114
|
+
YGNodeSetMeasureFunc(child, _measure);
|
|
115
|
+
YGNodeInsertChild(root, child, 0);
|
|
116
|
+
}
|
|
117
|
+
|
|
118
|
+
YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);
|
|
119
|
+
YGNodeFreeRecursive(root);
|
|
120
|
+
});
|
|
121
|
+
|
|
122
|
+
YGBENCHMARK("Nested flex", {
|
|
123
|
+
const YGNodeRef root = YGNodeNew();
|
|
124
|
+
|
|
125
|
+
for (uint32_t i = 0; i < 10; i++) {
|
|
126
|
+
const YGNodeRef child = YGNodeNew();
|
|
127
|
+
YGNodeStyleSetFlex(child, 1);
|
|
128
|
+
YGNodeInsertChild(root, child, 0);
|
|
129
|
+
|
|
130
|
+
for (uint32_t ii = 0; ii < 10; ii++) {
|
|
131
|
+
const YGNodeRef grandChild = YGNodeNew();
|
|
132
|
+
YGNodeSetMeasureFunc(grandChild, _measure);
|
|
133
|
+
YGNodeStyleSetFlex(grandChild, 1);
|
|
134
|
+
YGNodeInsertChild(child, grandChild, 0);
|
|
135
|
+
}
|
|
136
|
+
}
|
|
137
|
+
|
|
138
|
+
YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);
|
|
139
|
+
YGNodeFreeRecursive(root);
|
|
140
|
+
});
|
|
141
|
+
|
|
142
|
+
YGBENCHMARK("Huge nested layout", {
|
|
143
|
+
const YGNodeRef root = YGNodeNew();
|
|
144
|
+
|
|
145
|
+
for (uint32_t i = 0; i < 10; i++) {
|
|
146
|
+
const YGNodeRef child = YGNodeNew();
|
|
147
|
+
YGNodeStyleSetFlexGrow(child, 1);
|
|
148
|
+
YGNodeStyleSetWidth(child, 10);
|
|
149
|
+
YGNodeStyleSetHeight(child, 10);
|
|
150
|
+
YGNodeInsertChild(root, child, 0);
|
|
151
|
+
|
|
152
|
+
for (uint32_t ii = 0; ii < 10; ii++) {
|
|
153
|
+
const YGNodeRef grandChild = YGNodeNew();
|
|
154
|
+
YGNodeStyleSetFlexDirection(grandChild, YGFlexDirectionRow);
|
|
155
|
+
YGNodeStyleSetFlexGrow(grandChild, 1);
|
|
156
|
+
YGNodeStyleSetWidth(grandChild, 10);
|
|
157
|
+
YGNodeStyleSetHeight(grandChild, 10);
|
|
158
|
+
YGNodeInsertChild(child, grandChild, 0);
|
|
159
|
+
|
|
160
|
+
for (uint32_t iii = 0; iii < 10; iii++) {
|
|
161
|
+
const YGNodeRef grandGrandChild = YGNodeNew();
|
|
162
|
+
YGNodeStyleSetFlexGrow(grandGrandChild, 1);
|
|
163
|
+
YGNodeStyleSetWidth(grandGrandChild, 10);
|
|
164
|
+
YGNodeStyleSetHeight(grandGrandChild, 10);
|
|
165
|
+
YGNodeInsertChild(grandChild, grandGrandChild, 0);
|
|
166
|
+
|
|
167
|
+
for (uint32_t iiii = 0; iiii < 10; iiii++) {
|
|
168
|
+
const YGNodeRef grandGrandGrandChild = YGNodeNew();
|
|
169
|
+
YGNodeStyleSetFlexDirection(
|
|
170
|
+
grandGrandGrandChild, YGFlexDirectionRow);
|
|
171
|
+
YGNodeStyleSetFlexGrow(grandGrandGrandChild, 1);
|
|
172
|
+
YGNodeStyleSetWidth(grandGrandGrandChild, 10);
|
|
173
|
+
YGNodeStyleSetHeight(grandGrandGrandChild, 10);
|
|
174
|
+
YGNodeInsertChild(grandGrandChild, grandGrandGrandChild, 0);
|
|
175
|
+
}
|
|
176
|
+
}
|
|
177
|
+
}
|
|
178
|
+
}
|
|
179
|
+
|
|
180
|
+
YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);
|
|
181
|
+
YGNodeFreeRecursive(root);
|
|
182
|
+
});
|
|
183
|
+
});
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
#!/bin/sh
|
|
2
|
+
# Copyright (c) Meta Platforms, Inc. and affiliates.
|
|
3
|
+
#
|
|
4
|
+
# This source code is licensed under the MIT license found in the
|
|
5
|
+
# LICENSE file in the root directory of this source tree.
|
|
6
|
+
cd "$(dirname "$0")" || exit
|
|
7
|
+
CAPTURES_PATH="$(dirname "$(realpath "$0")")""/captures"
|
|
8
|
+
|
|
9
|
+
if [ "$1" = "buck" ]; then
|
|
10
|
+
buck run @//fbcode/mode/opt :benchmarkCXX "${CAPTURES_PATH}"
|
|
11
|
+
else
|
|
12
|
+
cmake -B build -S . -D CMAKE_BUILD_TYPE=Release
|
|
13
|
+
cmake --build build
|
|
14
|
+
build/benchmark "${CAPTURES_PATH}"
|
|
15
|
+
fi
|