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].