This is an automated email from the ASF dual-hosted git repository.

harbs pushed a commit to branch feature/layout-optimization
in repository https://gitbox.apache.org/repos/asf/royale-asjs.git


The following commit(s) were added to refs/heads/feature/layout-optimization by 
this push:
     new e93d7f5  Observed about a 17% performance imporvement
e93d7f5 is described below

commit e93d7f5f4614823a420fff573b4cd8694e2c3b6b
Author: Harbs <[email protected]>
AuthorDate: Mon Mar 26 14:42:26 2018 +0300

    Observed about a 17% performance imporvement
---
 .../main/royale/org/apache/royale/core/UIBase.as   | 17 +++++++--------
 .../html/beads/layouts/VerticalColumnLayout.as     | 25 ++++++++++++++--------
 2 files changed, 24 insertions(+), 18 deletions(-)

diff --git 
a/frameworks/projects/Basic/src/main/royale/org/apache/royale/core/UIBase.as 
b/frameworks/projects/Basic/src/main/royale/org/apache/royale/core/UIBase.as
index 2e2c777..60cae37 100644
--- a/frameworks/projects/Basic/src/main/royale/org/apache/royale/core/UIBase.as
+++ b/frameworks/projects/Basic/src/main/royale/org/apache/royale/core/UIBase.as
@@ -711,17 +711,14 @@ package org.apache.royale.core
             else
                 style.left = value;
         }
-        
         /**
          * @royaleignorecoercion HTMLElement
          */
         COMPILE::JS
         public function set x(value:Number):void
         {
-            //positioner.style.position = 'absolute';
-            if (positioner.parentNode != positioner.offsetParent)
-                value += (positioner.parentNode as HTMLElement).offsetLeft;
-            positioner.style.left = value.toString() + 'px';
+            _x = value;
+            setX(value);
         }
 
         /**
@@ -731,6 +728,8 @@ package org.apache.royale.core
         COMPILE::JS
         public function get x():Number
         {
+            if(!isNaN(_x))
+                return _x
             var strpixels:String = positioner.style.left as String;
             var pixels:Number = parseFloat(strpixels);
             if (isNaN(pixels))
@@ -787,10 +786,8 @@ package org.apache.royale.core
         COMPILE::JS
         public function set y(value:Number):void
         {
-            //positioner.style.position = 'absolute';
-            if (positioner.parentNode != positioner.offsetParent)
-                value += (positioner.parentNode as HTMLElement).offsetTop;
-            positioner.style.top = value.toString() + 'px';
+            _y = value;
+            setY(value);
         }
         
         /**
@@ -800,6 +797,8 @@ package org.apache.royale.core
         COMPILE::JS
         public function get y():Number
         {
+            if(!isNaN(_y))
+                return _y
             var strpixels:String = positioner.style.top as String;
             var pixels:Number = parseFloat(strpixels);
             if (isNaN(pixels))
diff --git 
a/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/beads/layouts/VerticalColumnLayout.as
 
b/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/beads/layouts/VerticalColumnLayout.as
index 5ee83d4..38aef24 100644
--- 
a/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/beads/layouts/VerticalColumnLayout.as
+++ 
b/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/beads/layouts/VerticalColumnLayout.as
@@ -102,8 +102,8 @@ package org.apache.royale.html.beads.layouts
                        }
                        
             var padding:EdgeData = (ValuesManager.valuesImpl as 
IBorderPaddingMarginValuesImpl).getPaddingMetrics(host);
-                       var sw:Number = host.width;
-                       var sh:Number = host.height;
+                       var sw:Number = host.measuredWidth;
+                       var sh:Number = host.measuredHeight;
 
             var hasWidth:Boolean = !host.isWidthSizedToContent();
             var hasHeight:Boolean = !host.isHeightSizedToContent();
@@ -119,9 +119,16 @@ package org.apache.royale.html.beads.layouts
                        var n:int = contentView.numElements;
             var rowData:Object = { rowHeight: 0 };
 
+                       //cache values to prevent layout thrashing
+                       var views:Array = [];
+                       var heights:Array = [];
+                       var widths:Array = [];
                        // determine max widths of columns
                        for (i = 0; i < n; i++) {
-                               e = contentView.getElementAt(i) as IUIBase;
+                               views[i] = contentView.getElementAt(i);
+                               heights[i] = views[i].height;
+                               widths[i] = views[i].width;
+                               e = views[i];
                                if (e == null || !e.visible) continue;
                                var margins:Object = childMargins(e, sw, sh);
                                
@@ -133,12 +140,12 @@ package org.apache.royale.html.beads.layouts
                                        if (measure)
                                                thisPrefWidth = 
measure.measuredWidth + margins.left + margins.right;
                                        else
-                                               thisPrefWidth = e.width + 
margins.left + margins.right;
+                                               thisPrefWidth = widths[i] + 
margins.left + margins.right;
                                }
                                else
-                                       thisPrefWidth = e.width + margins.left 
+ margins.right;
+                                       thisPrefWidth = widths[i] + 
margins.left + margins.right;
 
-                rowData.rowHeight = Math.max(rowData.rowHeight, e.height + 
margins.top + margins.bottom);
+                rowData.rowHeight = Math.max(rowData.rowHeight, heights[i] + 
margins.top + margins.bottom);
                                columns[col] = Math.max(columns[col], 
thisPrefWidth);
                 col = col + 1;
                 if (col == numColumns)
@@ -157,13 +164,13 @@ package org.apache.royale.html.beads.layouts
                        col = 0;
                        for (i = 0; i < n; i++)
             {
-                               e = contentView.getElementAt(i) as IUIBase;
+                               e = views[i];
                                if (e == null || !e.visible) continue;
                                e.x = curx + data[i].ml;
                                e.y = cury + data[i].mt;
                                curx += columns[col++];
-                maxHeight = Math.max(maxHeight, e.y + e.height + data[i].mb);
-                maxWidth = Math.max(maxWidth, e.x + e.width + data[i].mr);
+                maxHeight = Math.max(maxHeight, e.y + heights[i] + data[i].mb);
+                maxWidth = Math.max(maxWidth, e.x + widths[i] + data[i].mr);
                                if (col == numColumns)
                                {
                                        cury += rows[0].rowHeight;

-- 
To stop receiving notification emails like this one, please contact
[email protected].

Reply via email to