From dd97fcc96825d0eb7e3fdd1ffb20b150c049bdf0 Mon Sep 17 00:00:00 2001 From: David Aurelio Date: Thu, 13 Dec 2018 07:09:31 -0800 Subject: [PATCH] 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 --- yoga/YGStyle.h | 32 +++++++++++++++++++++----------- 1 file changed, 21 insertions(+), 11 deletions(-) diff --git a/yoga/YGStyle.h b/yoga/YGStyle.h index c3a01d44..c4f7e3c7 100644 --- a/yoga/YGStyle.h +++ b/yoga/YGStyle.h @@ -30,16 +30,16 @@ constexpr std::array kYGDefaultDimensionValuesUnit = { struct YGStyle { using Dimensions = std::array; - YGDirection direction = YGDirectionInherit; - YGFlexDirection flexDirection = YGFlexDirectionColumn; - YGJustify justifyContent = YGJustifyFlexStart; - YGAlign alignContent = YGAlignFlexStart; - YGAlign alignItems = YGAlignStretch; - YGAlign alignSelf = YGAlignAuto; - YGPositionType positionType = YGPositionTypeRelative; - YGWrap flexWrap = YGWrapNoWrap; - YGOverflow overflow = YGOverflowVisible; - YGDisplay display = YGDisplayFlex; + YGDirection direction : 2; + YGFlexDirection flexDirection : 2; + YGJustify justifyContent : 3; + YGAlign alignContent : 3; + YGAlign alignItems : 3; + YGAlign alignSelf : 3; + YGPositionType positionType : 1; + YGWrap flexWrap : 2; + YGOverflow overflow : 2; + YGDisplay display : 1; YGFloatOptional flex = {}; YGFloatOptional flexGrow = {}; YGFloatOptional flexShrink = {}; @@ -54,7 +54,17 @@ struct YGStyle { // Yoga specific properties, not compatible with flexbox specification 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!=(YGStyle style) {