Fix YGNodeSetConfig causing excessive dirtying

Summary:
X-link: https://github.com/facebook/react-native/pull/37316

In Fabric, a ShadowNode may re-initialize YGConfig several times throughout the lifetime of a perpetually cloned Yoga Node.

RN sets `pointScaleFactor` lazily, when laying out the rootview. So right now it initializes a config to `pointScaleFactor` of 1.0, sets it, sets a new `pointScaleFactor` on the config, then repeats. This cycles the config between two `pointScaleFactor` values and will excessively dirty the node now that `YGNodeSetConfig` dirties on config change (D45505089)

This change makes it so that we retain previously used `pointScaleFactor` when cloning the Yoga nodes.

Changelog: [Internal]

Reviewed By: rozele

Differential Revision: D45669878

fbshipit-source-id: bfd2e185d9264a1cda64e59132960060385e16f1
This commit is contained in:
Nick Gerleman
2023-05-08 16:30:06 -07:00
committed by Facebook GitHub Bot
parent b8126cdc6c
commit a1fbbc6070
2 changed files with 5 additions and 0 deletions

View File

@@ -4075,6 +4075,10 @@ YOGA_EXPORT void YGConfigSetPointScaleFactor(
}
}
YOGA_EXPORT float YGConfigGetPointScaleFactor(const YGConfigRef config) {
return config->getPointScaleFactor();
}
static void YGRoundToPixelGrid(
const YGNodeRef node,
const double pointScaleFactor,

View File

@@ -317,6 +317,7 @@ WIN_EXPORT void YGAssertWithConfig(
WIN_EXPORT void YGConfigSetPointScaleFactor(
YGConfigRef config,
float pixelsInPoint);
WIN_EXPORT float YGConfigGetPointScaleFactor(YGConfigRef config);
// Yoga previously had an error where containers would take the maximum space
// possible instead of the minimum like they are supposed to. In practice this