From 877a2838a63136e53c3f0e327507c1b0f41ac479 Mon Sep 17 00:00:00 2001 From: Lucas Rocha Date: Tue, 8 Sep 2015 15:33:26 +0100 Subject: [PATCH] Skip trailing position loop, if possible There's no need to set the trailing position on left-to-right layouts as the nodes will already have what we need (x, y, width, and height). This means we still have an extra cost for reversed layout directions but they are not as common as LTR ones. --- src/Layout.c | 10 ++++++++-- src/Layout.js | 10 ++++++++-- src/java/src/com/facebook/csslayout/LayoutEngine.java | 10 ++++++++-- 3 files changed, 24 insertions(+), 6 deletions(-) diff --git a/src/Layout.c b/src/Layout.c index 4e8d9862..51311d8e 100644 --- a/src/Layout.c +++ b/src/Layout.c @@ -1041,7 +1041,10 @@ static void layoutNodeImpl(css_node_t *node, float parentMaxWidth, css_direction paddingAndBorderAxisMain ); - needsMainTrailingPos = true; + if (mainAxis == CSS_FLEX_DIRECTION_ROW_REVERSE || + mainAxis == CSS_FLEX_DIRECTION_COLUMN_REVERSE) { + needsMainTrailingPos = true; + } } if (!isCrossDimDefined) { @@ -1053,7 +1056,10 @@ static void layoutNodeImpl(css_node_t *node, float parentMaxWidth, css_direction paddingAndBorderAxisCross ); - needsCrossTrailingPos = true; + if (crossAxis == CSS_FLEX_DIRECTION_ROW_REVERSE || + crossAxis == CSS_FLEX_DIRECTION_COLUMN_REVERSE) { + needsCrossTrailingPos = true; + } } // Set trailing position if necessary diff --git a/src/Layout.js b/src/Layout.js index 9d8a4abc..9691767d 100755 --- a/src/Layout.js +++ b/src/Layout.js @@ -909,7 +909,10 @@ var computeLayout = (function() { paddingAndBorderAxisMain ); - needsMainTrailingPos = true; + if (mainAxis == CSS_FLEX_DIRECTION_ROW_REVERSE || + mainAxis == CSS_FLEX_DIRECTION_COLUMN_REVERSE) { + needsMainTrailingPos = true; + } } if (!isCrossDimDefined) { @@ -921,7 +924,10 @@ var computeLayout = (function() { paddingAndBorderAxisCross ); - needsCrossTrailingPos = true; + if (crossAxis == CSS_FLEX_DIRECTION_ROW_REVERSE || + crossAxis == CSS_FLEX_DIRECTION_COLUMN_REVERSE) { + needsCrossTrailingPos = true; + } } // Set trailing position if necessary diff --git a/src/java/src/com/facebook/csslayout/LayoutEngine.java b/src/java/src/com/facebook/csslayout/LayoutEngine.java index a4b7baea..f75e5795 100644 --- a/src/java/src/com/facebook/csslayout/LayoutEngine.java +++ b/src/java/src/com/facebook/csslayout/LayoutEngine.java @@ -858,7 +858,10 @@ public class LayoutEngine { paddingAndBorderAxisMain ); - needsMainTrailingPos = true; + if (mainAxis == CSS_FLEX_DIRECTION_ROW_REVERSE || + mainAxis == CSS_FLEX_DIRECTION_COLUMN_REVERSE) { + needsMainTrailingPos = true; + } } if (!isCrossDimDefined) { @@ -870,7 +873,10 @@ public class LayoutEngine { paddingAndBorderAxisCross ); - needsCrossTrailingPos = true; + if (crossAxis == CSS_FLEX_DIRECTION_ROW_REVERSE || + crossAxis == CSS_FLEX_DIRECTION_COLUMN_REVERSE) { + needsCrossTrailingPos = true; + } } // Set trailing position if necessary