Use bitfields for enum members of `YGStyle`

Summary:
@public

Puts all enum fields of `YGStyle` into bitfields. This saves 36 bytes (> 3%) per node.

Reviewed By: SidharthGuglani

Differential Revision: D13439606

fbshipit-source-id: b60a5444762041bc6f8cc5e04757034cb6893b30
This commit is contained in:
David Aurelio 2018-12-13 07:09:31 -08:00 committed by Facebook Github Bot
parent bb1b80b763
commit 206705892f
1 changed files with 21 additions and 11 deletions

View File

@ -30,16 +30,16 @@ constexpr std::array<YGValue, 2> kYGDefaultDimensionValuesUnit = {
struct YGStyle { struct YGStyle {
using Dimensions = std::array<YGValue, 2>; using Dimensions = std::array<YGValue, 2>;
YGDirection direction = YGDirectionInherit; YGDirection direction : 2;
YGFlexDirection flexDirection = YGFlexDirectionColumn; YGFlexDirection flexDirection : 2;
YGJustify justifyContent = YGJustifyFlexStart; YGJustify justifyContent : 3;
YGAlign alignContent = YGAlignFlexStart; YGAlign alignContent : 3;
YGAlign alignItems = YGAlignStretch; YGAlign alignItems : 3;
YGAlign alignSelf = YGAlignAuto; YGAlign alignSelf : 3;
YGPositionType positionType = YGPositionTypeRelative; YGPositionType positionType : 1;
YGWrap flexWrap = YGWrapNoWrap; YGWrap flexWrap : 2;
YGOverflow overflow = YGOverflowVisible; YGOverflow overflow : 2;
YGDisplay display = YGDisplayFlex; YGDisplay display : 1;
YGFloatOptional flex = {}; YGFloatOptional flex = {};
YGFloatOptional flexGrow = {}; YGFloatOptional flexGrow = {};
YGFloatOptional flexShrink = {}; YGFloatOptional flexShrink = {};
@ -54,7 +54,17 @@ struct YGStyle {
// Yoga specific properties, not compatible with flexbox specification // Yoga specific properties, not compatible with flexbox specification
YGFloatOptional aspectRatio = {}; YGFloatOptional aspectRatio = {};
YGStyle() = default; YGStyle()
: direction(YGDirectionInherit),
flexDirection(YGFlexDirectionColumn),
justifyContent(YGJustifyFlexStart),
alignContent(YGAlignFlexStart),
alignItems(YGAlignStretch),
alignSelf(YGAlignAuto),
positionType(YGPositionTypeRelative),
flexWrap(YGWrapNoWrap),
overflow(YGOverflowVisible),
display(YGDisplayFlex) {}
bool operator==(const YGStyle& style); bool operator==(const YGStyle& style);
bool operator!=(YGStyle style) { bool operator!=(YGStyle style) {