0)
{
renderTime += (getTimer() - layoutManagerEndTime);
layoutManagerEndTime = 0;
}
}
private function startCollectionTest():void
{
validationTime = 0;
layoutManagerEndTime = 0;
layoutManagerStartTime = 0;
initializationTime = 0;
renderTime = 0;
var myList:IList = createCollectionObject();
initializationTime = getTimer();
if (numItemsToInitializeWith > 0)
{
switch (objectToUseDropDownList.selectedIndex)
{
case NON_BINDABLE_OBJECT:
collectionTests.fillCollectionNonBindable(myList, numItemsToInitializeWith, fillSeedItems);
break;
case PROPERTY_CHANGE_BINDABLE_OBJECT:
collectionTests.fillCollectionPropertyChangeBindable(myList, numItemsToInitializeWith, fillSeedItems);
break;
case UNIQUE_EVENT_BINDABLE_OBJECT:
collectionTests.fillCollectionUniqueEventBindable(myList, numItemsToInitializeWith, fillSeedItems);
break;
case SINGLE_VERSION_EVENT_BINDABLE_OBJECT:
collectionTests.fillCollectionSingleVersionEventBindable(myList, numItemsToInitializeWith, fillSeedItems);
break;
}
}
initializationTime = getTimer() - initializationTime;
var collectionWrapper:Object = wrapInOtherCollectionIfNeeded(myList);
applySortAndFilterIfNeeded(collectionWrapper, myList);
adg.dataProvider = collectionWrapper;
LayoutManager.getInstance().validateNow();
LayoutManager.getInstance().addEventListener("layoutManagerStart", layoutManager_layoutManagerStartHandler);
LayoutManager.getInstance().addEventListener("updateComplete", layoutManager_layoutManagerEndHandler);
addEventListener(Event.ENTER_FRAME, enterFrameHandler);
if (numItemsToAddPerSecond > 0)
{
switch (objectToUseDropDownList.selectedIndex)
{
case NON_BINDABLE_OBJECT:
testResultsAdd = collectionTests.startRandomAdditionsNonBindableCollection(myList, numIterations, numItemsToAddPerSecond, fillObjectsInitially);
break;
case PROPERTY_CHANGE_BINDABLE_OBJECT:
testResultsAdd = collectionTests.startRandomAdditionsPropertyChangeBindableCollection(myList, numIterations, numItemsToAddPerSecond, fillObjectsInitially);
break;
case UNIQUE_EVENT_BINDABLE_OBJECT:
testResultsAdd = collectionTests.startRandomAdditionsUniqueEventBindableCollection(myList, numIterations, numItemsToAddPerSecond, fillObjectsInitially);
break;
case SINGLE_VERSION_EVENT_BINDABLE_OBJECT:
testResultsAdd = collectionTests.startRandomAdditionsSingleVersionEventBindableCollection(myList, numIterations, numItemsToAddPerSecond, fillObjectsInitially);
break;
}
}
if (numItemsToUpdatePerSecond > 0)
{
testResultsUpdate = collectionTests.startRandomPropertyUpdatesCollection(myList, numIterations, numItemsToUpdatePerSecond, numPropertiesPerUpdate);
}
}
private function createCollectionObject():IList
{
return new ArrayCollection();
}
private function applySortAndFilterIfNeeded(
collectionWrapper:Object,
underlyingCollection:IList):void
{
var collectionForFilterAndSort:ICollectionView = collectionWrapper as ICollectionView;
if (!collectionForFilterAndSort)
collectionForFilterAndSort = underlyingCollection as ICollectionView;
if (collectionToUseDropDownList.selectedIndex == ARRAY_COLLECTION_FILTER_TYPE ||
collectionToUseDropDownList.selectedIndex == ARRAY_COLLECTION_FILTER_SORT_TYPE)
{
collectionForFilterAndSort.filterFunction = testFilterFunction;
}
if (collectionToUseDropDownList.selectedIndex == ARRAY_COLLECTION_SORT_TYPE ||
collectionToUseDropDownList.selectedIndex == ARRAY_COLLECTION_FILTER_SORT_TYPE)
{
collectionForFilterAndSort.sort = getTestSort();
}
if (collectionToUseDropDownList.selectedIndex != ARRAY_COLLECTION_TYPE)
{
collectionForFilterAndSort.refresh();
}
}
private function wrapInOtherCollectionIfNeeded(myList:IList):Object
{
var gc2:GroupingCollection2;
var fgc:FastGroupingCollection;
var hcv:HierarchicalCollectionView;
switch (wrappingCollectionToUseDropDownList.selectedIndex)
{
case WRAPPING_COLLECTION_NONE:
return myList;
case WRAPPING_COLLECTION_HCV_NO_GROUPING:
gc2 = new GroupingCollection2();
gc2.source = myList;
gc2.refresh();
hcv = new HierarchicalCollectionView(gc2);
return hcv;
case WRAPPING_COLLECTION_HCV_WITH_GROUPING:
gc2 = new GroupingCollection2();
gc2.grouping = getTestGrouping();
gc2.source = myList;
gc2.refresh();
hcv = new HierarchicalCollectionView(gc2);
return hcv;
case WRAPPING_COLLECTION_HCV_FAST_NO_GROUPING:
fgc = new FastGroupingCollection();
fgc.source = myList;
hcv = new HierarchicalCollectionView(fgc);
return hcv;
case WRAPPING_COLLECTION_HCV_FAST_WITH_GROUPING:
fgc = new FastGroupingCollection();
fgc.grouping = getTestGrouping();
fgc.source = myList;
hcv = new HierarchicalCollectionView(fgc);
return hcv;
}
return null;
}
private function getTestGrouping():Grouping
{
var grouping:Grouping = new Grouping();
var gf:GroupingField = new GroupingField("property3");
gf.groupingFunction = testGroupingFunction;
grouping.fields = [gf];
if (addSummaryRows)
{
var sr:SummaryRow = new SummaryRow();
var sf:SummaryField2 = new SummaryField2();
sf.dataField = "property9";
sf.summaryOperation = "SUM";
var sf2:SummaryField2 = new SummaryField2();
sf2.summaryOperation = "AVG";
sf2.dataField = "property6";
sr.fields = [sf, sf2];
gf.summaries = [sr];
}
return grouping;
}
[Bindable]
private var numGroupsForGroupingCollection:int = 10;
private function testGroupingFunction(item:Object, field:GroupingField):String
{
var myNumber:Number = item[field.name] as Number;
var groupId:Number = Math.floor(myNumber * numGroupsForGroupingCollection);
return groupId.toString();
}
private function testCompleteHandler(event:Event):void
{
// if haven't finished both tests, wait for next event
if (numItemsToAddPerSecond > 0
&& numItemsToUpdatePerSecond > 0
&& testResultsAdd.length != testResultsUpdate.length)
{
return;
}
var collectionTime:int = 0;
var len:int = testResultsAdd ? testResultsAdd.length : 0;
for (var i:int = 0; i < len; i++)
{
collectionTime += testResultsAdd[i];
}
len = testResultsUpdate ? testResultsUpdate.length : 0;
for (i = 0; i < len; i++)
{
collectionTime += testResultsUpdate[i];
}
testResultsAdd = testResultsUpdate = null;
var totalTime:Number = initializationTime + collectionTime + validationTime; // ignore renderTime since not 100% accurate unless frameRate is skipping
resultLabel.text += ": (" + initializationTime + ", " + collectionTime + ", " + validationTime + ", " + totalTime + ") ";
collectionTests.removeEventListener(CollectionTest.TEST_COMPLETE, testCompleteHandler);
LayoutManager.getInstance().removeEventListener("layoutManagerStart", layoutManager_layoutManagerStartHandler);
LayoutManager.getInstance().removeEventListener("updateComplete", layoutManager_layoutManagerEndHandler);
removeEventListener(Event.ENTER_FRAME, enterFrameHandler);
}
[Bindable]
public var valToTestForGreaterThanInFilterFunction:Number = 0.8;
public function testFilterFunction(item:Object):Boolean
{
if ("property0" in item)
return item.property0 > valToTestForGreaterThanInFilterFunction;
else
return true; // for groups
}
public function getTestSort():Sort
{
var sort:Sort = new Sort();
sort.fields = [new SortField("property1")];
return sort;
}
private function formatIntTo3Digits(value:int):String
{
if (value >= 100)
return "" + value;
else if (value >= 10)
return "0" + value;
else
return "00" + value;
}
private function formatIntTo5Digits(value:int):String
{
if (value >= 10000)
return "" + value;
if (value >= 1000)
return "0" + value;
if (value >= 100)
return "00" + value;
else if (value >= 10)
return "000" + value;
else
return "0000" + value;
}
]]>
NonBindableObject
PropertyChangeBindableObject
SingleVersionEventBindableObject
UniqueEventBindableObject
ArrayCollection
ArrayCollection + Filter
ArrayCollection + Sort
ArrayCollection + Filter + Sort
None
HCV wrapping GC2 no grouping
HCV wrapping GC2 group by 1 field
HCV wrapping FGC no grouping
HCV wrapping FGC group by 1 field