@@ -1412,13 +1412,22 @@ fn generate_anonymous_flex_items<T: LayoutTreeNode>(
14121412 dir : AxisDirection ,
14131413) -> Vec < FlexItem < T > > {
14141414 let mut flex_items: Vec < FlexItem < T > > = Vec :: with_capacity ( node. tree_visitor ( ) . children_len ( ) ) ;
1415+ let mut needs_sort = false ;
1416+ let mut prev_order = i32:: MIN ;
14151417 node. tree_visitor ( )
14161418 . for_each_child ( |child_node, child_index| {
14171419 if is_independent_positioning ( child_node) {
14181420 return ;
14191421 }
14201422 let child_layout_unit = child_node. layout_node ( ) . unit ( ) ;
14211423 let child_style = child_node. style ( ) ;
1424+
1425+ let order = child_style. order ( ) ;
1426+ if order < prev_order {
1427+ needs_sort = true ;
1428+ }
1429+ prev_order = order;
1430+
14221431 let ( margin, border, padding_border) =
14231432 child_layout_unit. margin_border_padding ( child_node, * * inner_size) ;
14241433 let size = child_layout_unit. css_border_box_size (
@@ -1431,7 +1440,7 @@ fn generate_anonymous_flex_items<T: LayoutTreeNode>(
14311440
14321441 let flex_item = FlexItem {
14331442 child_index,
1434- order : child_style . order ( ) ,
1443+ order,
14351444 size,
14361445 margin,
14371446 border,
@@ -1492,7 +1501,9 @@ fn generate_anonymous_flex_items<T: LayoutTreeNode>(
14921501 } ;
14931502 flex_items. push ( flex_item) ;
14941503 } ) ;
1495- flex_items. sort_by ( |a, b| a. order . cmp ( & b. order ) ) ;
1504+ if needs_sort {
1505+ flex_items. sort_by ( |a, b| a. order . cmp ( & b. order ) ) ;
1506+ }
14961507 flex_items
14971508}
14981509
0 commit comments