Skip to content

Commit

Permalink
Use bitfields for YGLayout and YGNode
Browse files Browse the repository at this point in the history
Summary:
@public

Further heap size reductions by using bitfields in `YGLayout` and `YGNode`.

Reviewed By: SidharthGuglani

Differential Revision: D13466325

fbshipit-source-id: ddcef0a1b3822e7449fe485d99c920d54139c893
  • Loading branch information
davidaurelio authored and facebook-github-bot committed Dec 18, 2018
1 parent ac94e54 commit d8fcb7f
Show file tree
Hide file tree
Showing 2 changed files with 18 additions and 10 deletions.
14 changes: 9 additions & 5 deletions ReactCommon/yoga/yoga/YGLayout.h
Original file line number Diff line number Diff line change
Expand Up @@ -17,11 +17,13 @@ struct YGLayout {
std::array<float, 6> margin = {};
std::array<float, 6> border = {};
std::array<float, 6> padding = {};
YGDirection direction = YGDirectionInherit;
YGDirection direction : 2;
bool didUseLegacyFlag : 1;
bool doesLegacyStretchFlagAffectsLayout : 1;
bool hadOverflow : 1;

uint32_t computedFlexBasisGeneration = 0;
YGFloatOptional computedFlexBasis = {};
bool hadOverflow = false;

// Instead of recomputing the entire layout every single time, we
// cache some information to break early when nothing changed
Expand All @@ -34,10 +36,12 @@ struct YGLayout {
std::array<float, 2> measuredDimensions = kYGDefaultDimensionValues;

YGCachedMeasurement cachedLayout = YGCachedMeasurement();
bool didUseLegacyFlag = false;
bool doesLegacyStretchFlagAffectsLayout = false;

YGLayout() = default;
YGLayout()
: direction(YGDirectionInherit),
didUseLegacyFlag(false),
doesLegacyStretchFlagAffectsLayout(false),
hadOverflow(false) {}

bool operator==(YGLayout layout) const;
bool operator!=(YGLayout layout) const {
Expand Down
14 changes: 9 additions & 5 deletions ReactCommon/yoga/yoga/YGNode.h
Original file line number Diff line number Diff line change
Expand Up @@ -15,9 +15,10 @@ struct YGNode {
private:
void* context_ = nullptr;
YGPrintFunc print_ = nullptr;
bool hasNewLayout_ = true;
bool isReferenceBaseline_ = false;
YGNodeType nodeType_ = YGNodeTypeDefault;
bool hasNewLayout_ : 1;
bool isReferenceBaseline_ : 1;
bool isDirty_ : 1;
YGNodeType nodeType_ : 1;
YGMeasureFunc measure_ = nullptr;
YGBaselineFunc baseline_ = nullptr;
YGDirtiedFunc dirtied_ = nullptr;
Expand All @@ -27,7 +28,6 @@ struct YGNode {
YGNodeRef owner_ = nullptr;
YGVector children_ = {};
YGConfigRef config_ = nullptr;
bool isDirty_ = false;
std::array<YGValue, 2> resolvedDimensions_ = {
{YGValueUndefined, YGValueUndefined}};

Expand All @@ -36,7 +36,11 @@ struct YGNode {
const float axisSize) const;

public:
YGNode() = default;
YGNode()
: hasNewLayout_(true),
isReferenceBaseline_(false),
isDirty_(false),
nodeType_(YGNodeTypeDefault) {}
~YGNode() = default; // cleanup of owner/children relationships in YGNodeFree
explicit YGNode(const YGConfigRef newConfig) : config_(newConfig){};
YGNode(const YGNode& node) = default;
Expand Down

0 comments on commit d8fcb7f

Please sign in to comment.