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

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


The following commit(s) were added to refs/heads/develop by this push:
     new 83087b4  Adding all dataProviders at once
83087b4 is described below

commit 83087b44e0a673613df9ad6bc04c8e491520d78d
Author: Harbs <[email protected]>
AuthorDate: Wed Apr 11 01:26:26 2018 +0300

    Adding all dataProviders at once
    
    Also prevented multiple triggers to layout
    Seems to offer a 10% to 20% performance boost (or more) with no reflow 
involved.
---
 .../org/apache/royale/core/DataContainerBase.as    | 30 ++++++++++++++++++++++
 .../beads/DataItemRendererFactoryForArrayData.as   | 14 ++++++----
 .../beads/DataItemRendererFactoryForArrayList.as   | 21 ++++++++++-----
 .../beads/DataItemRendererFactoryForColumnData.as  | 15 ++++++++---
 .../beads/TextItemRendererFactoryForArrayData.as   | 16 +++++++-----
 .../TextItemRendererFactoryForStringVectorData.as  | 20 +++++++++++----
 .../apache/royale/html/supportClasses/DataGroup.as | 29 +++++++++++++++++++++
 .../supportClasses/TreeGridControlItemRenderer.as  | 23 +++++++++++++++++
 .../org/apache/royale/core/IItemRendererParent.as  |  1 +
 9 files changed, 143 insertions(+), 26 deletions(-)

diff --git 
a/frameworks/projects/Basic/src/main/royale/org/apache/royale/core/DataContainerBase.as
 
b/frameworks/projects/Basic/src/main/royale/org/apache/royale/core/DataContainerBase.as
index af014c1..5d6584c 100644
--- 
a/frameworks/projects/Basic/src/main/royale/org/apache/royale/core/DataContainerBase.as
+++ 
b/frameworks/projects/Basic/src/main/royale/org/apache/royale/core/DataContainerBase.as
@@ -162,6 +162,36 @@ package org.apache.royale.core
                /*
                * IItemRendererParent
                */
+
+               /**
+                * @copy 
org.apache.royale.core.IItemRendererParent#addItemRenderers()
+                * @private
+                *
+                *  @langversion 3.0
+                *  @playerversion Flash 10.2
+                *  @playerversion AIR 2.6
+                *  @productversion Royale 0.8
+                */
+               public function 
addItemRenderers(renderers:Array,dispatch:Boolean):void
+               {
+                       var len:int = renderers.length;
+                       for(var i:int = 0; i < len; i++)
+                       {
+                               addElement(renderers[i], false);
+                               
+                       }
+                       //TODO every other childrenAdded event is a ValueEvent 
with the child as payload
+                       if(dispatch)
+                               this.dispatchEvent(new Event("childrenAdded"));
+                       // Loop a second time to dispatch events once they are 
all added
+                       for(i = 0; i < len; i++)
+                       {
+                               var newEvent:ItemAddedEvent = new 
ItemAddedEvent("itemAdded");
+                               newEvent.item = renderers[i];
+                               
+                               dispatchEvent(newEvent);
+                       }
+               }
                
                /**
                 * @copy 
org.apache.royale.core.IItemRendererParent#addItemRenderer()
diff --git 
a/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/beads/DataItemRendererFactoryForArrayData.as
 
b/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/beads/DataItemRendererFactoryForArrayData.as
index 6ae7281..1d8693f 100644
--- 
a/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/beads/DataItemRendererFactoryForArrayData.as
+++ 
b/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/beads/DataItemRendererFactoryForArrayData.as
@@ -175,7 +175,7 @@ package org.apache.royale.html.beads
                        var dataGroup:IItemRendererParent = list.dataGroup;
                        
                        dataGroup.removeAllItemRenderers();
-                       
+                       var renderers:Array = [];
                        var presentationModel:IListPresentationModel = 
_strand.getBeadByType(IListPresentationModel) as IListPresentationModel;
                        
                        var n:int = dp.length; 
@@ -184,7 +184,7 @@ package org.apache.royale.html.beads
                                var ir:ISelectableItemRenderer = 
itemRendererFactory.createItemRenderer(dataGroup) as ISelectableItemRenderer;
                 var dataItemRenderer:DataItemRenderer = ir as DataItemRenderer;
 
-                               dataGroup.addItemRenderer(ir);
+                               // dataGroup.addItemRenderer(ir);
                                ir.index = i;
                                ir.labelField = labelField;
                 if (dataItemRenderer)
@@ -199,10 +199,14 @@ package org.apache.royale.html.beads
                                        UIBase(ir).height = 
presentationModel.rowHeight;
                                        UIBase(ir).percentWidth = 100;
                                }
-                               ir.data = dp[i];
-                               
+                               renderers[i] = ir;
+                       }
+                       dataGroup.addItemRenderers(renderers, false);
+                       for(i=0;i<n;i++)
+                       {
+                               renderers[i].data = dp[i];
                                var newEvent:ItemRendererEvent = new 
ItemRendererEvent(ItemRendererEvent.CREATED);
-                               newEvent.itemRenderer = ir;
+                               newEvent.itemRenderer = renderers[i];
                                dispatchEvent(newEvent);
                        }
                        
diff --git 
a/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/beads/DataItemRendererFactoryForArrayList.as
 
b/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/beads/DataItemRendererFactoryForArrayList.as
index 3060417..40aa545 100644
--- 
a/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/beads/DataItemRendererFactoryForArrayList.as
+++ 
b/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/beads/DataItemRendererFactoryForArrayList.as
@@ -147,6 +147,8 @@ package org.apache.royale.html.beads
                
                /**
                 * @private
+                * @royaleignorecoercion org.apache.royale.core.UIBase
+                * @royaleignorecoercion 
org.apache.royale.events.IEventDispatcher
                 */
                protected function dataProviderChangeHandler(event:Event):void
                {
@@ -161,13 +163,14 @@ package org.apache.royale.html.beads
                        
                        var presentationModel:IListPresentationModel = 
_strand.getBeadByType(IListPresentationModel) as IListPresentationModel;
                        
+                       var renderers:Array = [];
                        var n:int = dp.length; 
                        for (var i:int = 0; i < n; i++)
                        {                               
                                var ir:ISelectableItemRenderer = 
itemRendererFactory.createItemRenderer(dataGroup) as ISelectableItemRenderer;
                                var dataItemRenderer:DataItemRenderer = ir as 
DataItemRenderer;
 
-                               dataGroup.addItemRenderer(ir);
+                               // dataGroup.addItemRenderer(ir);
                                if (presentationModel) {
                                        var style:SimpleCSSStyles = new 
SimpleCSSStyles();
                                        style.marginBottom = 
presentationModel.separatorThickness;
@@ -176,21 +179,25 @@ package org.apache.royale.html.beads
                                        UIBase(ir).percentWidth = 100;
                                }
 
-                               var data:Object = dp.getItemAt(i);
-                ir.index = i;
+                               // var data:Object = dp.getItemAt(i);
+                // ir.index = i;
                 ir.labelField = labelField;
                                if (dataItemRenderer)
                                {
                                        dataItemRenderer.dataField = dataField;
                                }
 
-                               setData(ir, data, i);
-
+                               renderers[i] = ir;
+                       }
+                       dataGroup.addItemRenderers(renderers, false);
+                       for(i=0;i<n;i++)
+                       {
+                               setData(renderers[i], dp.getItemAt(i), i);
                                var newEvent:ItemRendererEvent = new 
ItemRendererEvent(ItemRendererEvent.CREATED);
-                               newEvent.itemRenderer = ir;
+                               newEvent.itemRenderer = renderers[i];
                                dispatchEvent(newEvent);
-                       }
 
+                       }
                        IEventDispatcher(_strand).dispatchEvent(new 
Event("itemsCreated"));
                }
        }
diff --git 
a/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/beads/DataItemRendererFactoryForColumnData.as
 
b/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/beads/DataItemRendererFactoryForColumnData.as
index 8a0e169..0f982aa 100644
--- 
a/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/beads/DataItemRendererFactoryForColumnData.as
+++ 
b/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/beads/DataItemRendererFactoryForColumnData.as
@@ -124,6 +124,10 @@ package org.apache.royale.html.beads
                
                /**
                 * @private
+                * @royaleignorecoercion Array
+                * @royaleignorecoercion org.apache.royale.core.IList
+                * @royaleignorecoercion 
org.apache.royale.html.supportClasses.DataItemRenderer
+                * @royaleignorecoercion 
org.apache.royale.events.IEventDispatcher
                 */
                private function dataProviderChangeHandler(event:Event):void
                {
@@ -135,7 +139,7 @@ package org.apache.royale.html.beads
                        var dataGroup:IItemRendererParent = list.dataGroup;
                        
                        dataGroup.removeAllItemRenderers();
-                                               
+                       var renderers:Array = [];
                        var view:DataGridColumnView = 
_strand.getBeadByType(IBeadView) as DataGridColumnView;
                        if (view == null) return;
                                                
@@ -143,10 +147,15 @@ package org.apache.royale.html.beads
                        for (var i:int = 0; i < n; i++)
                        {
                                var tf:DataItemRenderer = 
itemRendererFactory.createItemRenderer(dataGroup) as DataItemRenderer;
-                               dataGroup.addItemRenderer(tf);
+                               // dataGroup.addItemRenderer(tf);
                                tf.index = i;
                                tf.labelField = view.column.dataField;
-                               tf.data = dp[i];
+                               renderers[i] = tf;
+                       }
+                       dataGroup.addItemRenderers(renderers, false);
+                       for(i=0;i<n;i++)
+                       {
+                renderers[i].data = dp[i];
                        }
                        
                        IEventDispatcher(_strand).dispatchEvent(new 
Event("itemsCreated"));
diff --git 
a/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/beads/TextItemRendererFactoryForArrayData.as
 
b/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/beads/TextItemRendererFactoryForArrayData.as
index 9ab6424..ecac388 100644
--- 
a/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/beads/TextItemRendererFactoryForArrayData.as
+++ 
b/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/beads/TextItemRendererFactoryForArrayData.as
@@ -137,7 +137,7 @@ package org.apache.royale.html.beads
          *  @royaleignorecoercion Array
          *  @royaleignorecoercion 
org.apache.royale.html.beads.ITextItemRenderer
          *  @royaleignorecoercion org.apache.royale.events.IEventDispatcher
-         * @royaleignorecoercion org.apache.royale.core.IList
+         *  @royaleignorecoercion org.apache.royale.core.IList
          */
                private function dataProviderChangeHandler(event:Event):void
                {
@@ -149,20 +149,24 @@ package org.apache.royale.html.beads
                        var dataGroup:IItemRendererParent = list.dataGroup;
 
                        dataGroup.removeAllItemRenderers();
-
+            var renderers:Array = [];
                        var n:int = dp.length;
                        for (var i:int = 0; i < n; i++)
                        {
                                var tf:ITextItemRenderer = 
itemRendererFactory.createItemRenderer(dataGroup) as ITextItemRenderer;
                 tf.index = i;
-                dataGroup.addItemRenderer(tf);
+                // dataGroup.addItemRenderer(tf);
                 if (selectionModel.labelField) {
                        tf.labelField = selectionModel.labelField;
                 }
-                tf.data = dp[i];
-
+                renderers[i] = tf;
+                       }
+                       dataGroup.addItemRenderers(renderers, false);
+                       for(i=0;i<n;i++)
+                       {
+                renderers[i].data = dp[i];
                                var newEvent:ItemRendererEvent = new 
ItemRendererEvent(ItemRendererEvent.CREATED);
-                               newEvent.itemRenderer = tf;
+                               newEvent.itemRenderer = renderers[i];
                                dispatchEvent(newEvent);
                        }
 
diff --git 
a/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/beads/TextItemRendererFactoryForStringVectorData.as
 
b/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/beads/TextItemRendererFactoryForStringVectorData.as
index 48e1b48..d329955 100644
--- 
a/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/beads/TextItemRendererFactoryForStringVectorData.as
+++ 
b/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/beads/TextItemRendererFactoryForStringVectorData.as
@@ -131,6 +131,10 @@ package org.apache.royale.html.beads
          */
         protected var dataGroup:IItemRendererParent;
                
+        /**
+         * @royaleignorecoercion Vector.<String>
+         * @royaleignorecoercion org.apache.royale.html.beads.ITextItemRenderer
+         */
                private function dataProviderChangeHandler(event:Event):void
                {
                        var dp:Vector.<String> = selectionModel.dataProvider as 
Vector.<String>;
@@ -139,19 +143,25 @@ package org.apache.royale.html.beads
                        var dataGroup:IItemRendererParent = list.dataGroup;
                        
                        dataGroup.removeAllItemRenderers();
-                       
+                       var renderers:Array = [];
                        var n:int = dp.length; 
                        for (var i:int = 0; i < n; i++)
                        {
                                var tf:ITextItemRenderer = 
itemRendererFactory.createItemRenderer(dataGroup) as ITextItemRenderer;
                 tf.index = i;
-                dataGroup.addItemRenderer(tf);
-                               tf.text = dp[i];
+                // dataGroup.addItemRenderer(tf);
                                
+                renderers[i] = tf;
+                       }
+                       dataGroup.addItemRenderers(renderers, true);
+                       for(i=0;i<n;i++)
+                       {
+                               renderers[i].text = dp[i];
                                var newEvent:ItemRendererEvent = new 
ItemRendererEvent(ItemRendererEvent.CREATED);
-                               newEvent.itemRenderer = tf;
+                               newEvent.itemRenderer = renderers[i];
                                dispatchEvent(newEvent);
-                       }                       
+
+                       }
                }
                
        }
diff --git 
a/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/supportClasses/DataGroup.as
 
b/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/supportClasses/DataGroup.as
index 5c60482..4e2f117 100644
--- 
a/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/supportClasses/DataGroup.as
+++ 
b/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/supportClasses/DataGroup.as
@@ -59,6 +59,35 @@ package org.apache.royale.html.supportClasses
                /*
                * IItemRendererParent
                */
+
+               /**
+                * @copy 
org.apache.royale.core.IItemRendererParent#addItemRenderers()
+                * @private
+                *
+                *  @langversion 3.0
+                *  @playerversion Flash 10.2
+                *  @playerversion AIR 2.6
+                *  @productversion Royale 0.8
+                */
+               public function addItemRenderers(renderers:Array, 
dispatch:Boolean):void
+               {
+                       var len:int = renderers.length;
+                       for(var i:int = 0; i < len; i++)
+                       {
+                               addElement(renderers[i], false);
+                               
+                       }
+                       //TODO every other childrenAdded event is a ValueEvent 
with the child as payload
+                       if(dispatch)
+                               this.dispatchEvent(new Event("childrenAdded"));
+                       // Loop a second time to dispatch events once they are 
all added
+                       for(i = 0; i < len; i++)
+                       {
+                               var newEvent:ItemAddedEvent = new 
ItemAddedEvent("itemAdded");
+                               newEvent.item = renderers[i];   
+                               dispatchEvent(newEvent);
+                       }
+               }
                
                /**
                 * @copy 
org.apache.royale.core.IItemRendererParent#addItemRenderer()
diff --git 
a/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/supportClasses/TreeGridControlItemRenderer.as
 
b/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/supportClasses/TreeGridControlItemRenderer.as
index b18ee9a..3725f1a 100644
--- 
a/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/supportClasses/TreeGridControlItemRenderer.as
+++ 
b/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/supportClasses/TreeGridControlItemRenderer.as
@@ -22,6 +22,7 @@ package org.apache.royale.html.supportClasses
        import org.apache.royale.core.IItemRendererClassFactory;
        import org.apache.royale.core.IItemRendererParent;
        import org.apache.royale.core.UIBase;
+       import org.apache.royale.events.Event;
        import org.apache.royale.events.IEventDispatcher;
        import org.apache.royale.events.ItemAddedEvent;
        import org.apache.royale.html.TextButton;
@@ -74,6 +75,28 @@ package org.apache.royale.html.supportClasses
                }
                
                // IItemRendererParent implementation
+
+               /**
+                * @copy 
org.apache.royale.core.IItemRendererParent#addItemRenderers()
+                * @private
+                *
+                *  @langversion 3.0
+                *  @playerversion Flash 10.2
+                *  @playerversion AIR 2.6
+                *  @productversion Royale 0.8
+                */
+               public function addItemRenderers(renderers:Array, 
dispatch:Boolean):void
+               {
+                       var len:int = renderers.length;
+                       for(var i:int = 0; i < len; i++)
+                       {
+                               addElement(renderers[i], false);
+                               
+                       }
+                       //TODO every other childrenAdded event is a ValueEvent 
with the child as payload
+                       if(dispatch)
+                               this.dispatchEvent(new Event("childrenAdded"));
+               }
                
                public function addItemRenderer(renderer:IItemRenderer):void
                {
diff --git 
a/frameworks/projects/Core/src/main/royale/org/apache/royale/core/IItemRendererParent.as
 
b/frameworks/projects/Core/src/main/royale/org/apache/royale/core/IItemRendererParent.as
index d7cd5cc..5177c81 100644
--- 
a/frameworks/projects/Core/src/main/royale/org/apache/royale/core/IItemRendererParent.as
+++ 
b/frameworks/projects/Core/src/main/royale/org/apache/royale/core/IItemRendererParent.as
@@ -46,6 +46,7 @@ package org.apache.royale.core
          *  @productversion Royale 0.0
          */
                function addItemRenderer(renderer:IItemRenderer):void;
+               function 
addItemRenderers(renderers:Array,dispatch:Boolean):void;
                function addItemRendererAt(renderer:IItemRenderer, 
index:int):void;
                function removeItemRenderer(renderer:IItemRenderer):void;
                function getItemRendererForIndex(index:int):IItemRenderer;

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

Reply via email to