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