I´m continue working on that widget. Now works in design time, integrated in
UIBuilder tool.
Adding rows ->
http://www.youtube.com/watch?v=Dt0yz0JyBCg
Master detail ->
http://www.youtube.com/watch?v=FTW9Byqdgbk
My main problem now is the speed. Is very very slow; one minute is needed
for load 5000 rows (!!!)
With MessageTally I see the next response...
- 81732 tallies, 82014 msec.
**Tree**
--------------------------------
Process: (40s) 3296: nil
--------------------------------
50.3% {41253ms} CLGrid>>dataSource:
44.5% {36496ms} CLGrid>>addRow
|21.7% {17797ms} CLScrollPanelContainer(Morph)>>addMorphBack:
| |21.7% {17797ms}
CLScrollPanelContainer(CLPanel)>>privateAddMorph:atIndex:
| | 21.6% {17715ms}
CLScrollPanelContainer(Morph)>>privateAddMorph:atIndex:
| | 13.8% {11318ms}
CLScrollPanelContainer(Morph)>>privateInvalidateMorph:
| | |13.5% {11072ms} CLGridRow(Morph)>>fullBounds
| | | 13.5% {11072ms} CLGridRow(Morph)>>doLayoutIn:
| | | 8.6% {7053ms} TableLayout>>layout:in:
| | | |8.6% {7053ms} TableLayout>>layoutLeftToRight:in:
| | | | 5.8% {4757ms} CLGridCell(Morph)>>layoutInBounds:
| | | | |5.3% {4347ms} CLGridCell(Morph)>>bounds:
| | | | | 2.6% {2132ms} CLGridCell(Morph)>>position:
| | | | | |1.5% {1230ms}
CLGridCell(Morph)>>invalidRect:
| | | | | | 1.5% {1230ms}
CLGridCell(Morph)>>invalidRect:from:
| | | | | | 1.5% {1230ms}
CLGridRow(Morph)>>invalidRect:from:
| | | | | | 1.1% {902ms}
CLScrollPanelContainer(Morph)>>invalidRect:from:
| | | | | 2.6% {2132ms} CLGridCell>>extent:
| | | | | 2.4% {1968ms} CLGridCell(Morph)>>extent:
| | | | | 1.6% {1312ms} CLGridCell(Morph)>>changed
| | | | 2.7% {2214ms} CLGridCell(Morph)>>minExtent
| | | 4.2% {3445ms} CLGridRow(Morph)>>adjustLayoutBounds
| | | 3.9% {3199ms} CLGridRow(Morph)>>submorphBounds
| | | 3.9% {3199ms} CLGridCell(Morph)>>fullBounds
| | | 3.6% {2953ms} CLGridCell(Morph)>>doLayoutIn:
| | | 2.0% {1640ms} TableLayout>>layout:in:
| | | 1.8% {1476ms}
TableLayout>>layoutTopToBottom:in:
| | 7.7% {6315ms} CLGridRow(Morph)>>intoWorld:
| | 7.7% {6315ms} CLGridCell(Morph)>>intoWorld:
| | 7.6% {6233ms} CLCheckButton(Morph)>>intoWorld:
| | 7.4% {6069ms} PasteUpMorph>>startStepping:
| | 7.4% {6069ms}
PasteUpMorph>>startStepping:at:selector:arguments:stepTime:
| | 7.4% {6069ms}
WorldState>>startStepping:at:selector:arguments:stepTime:
| | 7.4% {6069ms} WorldState>>stopStepping:selector:
| | 5.8% {4757ms}
Heap(SequenceableCollection)>>select:
| | |3.9% {3199ms} Heap>>at:
| | |1.8% {1476ms} primitives
| | 1.6% {1312ms} primitives
|14.8% {12138ms} CLGridRow>>buildCellsStructureFrom:
| |14.8% {12138ms} CLGridRow>>addCell:
| | 14.8% {12138ms} CLGridRow>>pvtAddCell:ofType:
| | 5.7% {4675ms} CLGridCell>>setColumn:
| | |5.7% {4675ms} CLGridCell>>pvtBuildValueControl
| | | 3.0% {2460ms} CLLabel class(Behavior)>>new
| | | 2.0% {1640ms}
CLCheckButton(CheckboxButtonMorph)>>initialize
| | | |1.1% {902ms} CLCheckButton>>enabled:
| | | | 1.1% {902ms}
CLCheckButton(CheckboxButtonMorph)>>enabled:
| | | 1.0% {820ms} CLLabel>>initialize
| | 4.0% {3281ms} CLGridCell class(Behavior)>>new
| | |4.0% {3281ms} CLGridCell>>initialize
| | 2.4% {1968ms} CLGridCell(Morph)>>width:
| | |2.4% {1968ms} CLGridCell>>extent:
| | | 2.1% {1722ms} CLGridCell(Morph)>>extent:
| | | 1.9% {1558ms} CLGridCell(Morph)>>changed
| | | 1.4% {1148ms} CLGridCell(Morph)>>privateFullBounds
| | 1.4% {1148ms} CLGridCell(Morph)>>borderColor:
| | 1.3% {1066ms} CLGridCell(Morph)>>changed
| | 1.3% {1066ms} CLGridCell(Morph)>>privateFullBounds
|5.4% {4429ms} CLGridRow(CLPanel)>>color:
| |5.4% {4429ms} CLGridRow(Morph)>>color:
| | 5.4% {4429ms} CLGridRow(Morph)>>changed
| | 5.4% {4429ms} CLGridRow(Morph)>>privateFullBounds
| | 5.2% {4265ms} CLGridRow(Morph)>>submorphBounds
| | 5.2% {4265ms} CLGridCell(Morph)>>fullBounds
| | 4.8% {3937ms} CLGridCell(Morph)>>doLayoutIn:
| | 3.3% {2706ms} TableLayout>>layout:in:
| | 3.1% {2542ms} TableLayout>>layoutTopToBottom:in:
| | 1.8% {1476ms} CLLabel(Morph)>>layoutInBounds:
|1.3% {1066ms} CLGridRow class(Behavior)>>new
| 1.3% {1066ms} CLGridRow>>initialize
5.6% {4593ms} CLGridRow>>listObject:
5.4% {4429ms} CLGridCell>>value:
4.3% {3527ms} CLLabel>>value:
|4.3% {3527ms} CLLabel>>text:
| 4.3% {3527ms} CLLabel(StringMorph)>>contents:
| 4.3% {3527ms} CLLabel(StringMorph)>>fitContents
| 4.1% {3363ms} CLLabel>>extent:
| 4.0% {3281ms} CLLabel(Morph)>>extent:
| 3.4% {2788ms} CLLabel(Morph)>>changed
| 3.2% {2624ms} CLLabel(Morph)>>invalidRect:
| 3.2% {2624ms} CLLabel(Morph)>>invalidRect:from:
| 3.1% {2542ms} CLGridCell(Morph)>>invalidRect:from:
| 2.7% {2214ms} CLGridRow(Morph)>>invalidRect:from:
| 2.4% {1968ms}
CLScrollPanelContainer(Morph)>>invalidRect:from:
| 2.2% {1804ms}
TransformMorph>>invalidRect:from:
| 1.4% {1148ms}
TransformMorph(Morph)>>invalidRect:from:
| 1.4% {1148ms}
CLScrollpanel(Morph)>>invalidRect:from:
| 1.2% {984ms}
CLGrid(Morph)>>invalidRect:from:
1.1% {902ms} CLCheckButton>>value:
1.1% {902ms} CLCheckButton(CheckboxButtonMorph)>>state:
30.5% {25014ms} CLGrid(Morph)>>openInWindowLabeled:
30.5% {25014ms} CLGrid(Morph)>>openInWindowLabeled:inWorld:
15.5% {12712ms} PasteUpMorph(Morph)>>addMorph:
|15.5% {12712ms} PasteUpMorph>>addMorphFront:
| 15.5% {12712ms} PasteUpMorph(Morph)>>addMorphInFrontOfLayer:
| 15.5% {12712ms} PasteUpMorph(Morph)>>addMorph:inFrontOf:
| 15.5% {12712ms} PasteUpMorph(Morph)>>privateAddMorph:atIndex:
| 15.5% {12712ms} SystemWindow(Morph)>>intoWorld:
| 15.5% {12712ms} CLGrid(Morph)>>intoWorld:
| 15.5% {12712ms} CLGridRowHeader(Morph)>>intoWorld:
| 15.5% {12712ms} CLGridCellHeader(Morph)>>intoWorld:
| 15.5% {12712ms}
CLScrollPanelContainer(Morph)>>intoWorld:
| 15.5% {12712ms} CLGridRow(Morph)>>intoWorld:
| 15.4% {12630ms} CLGridCell(Morph)>>intoWorld:
| 15.4% {12630ms}
CLCheckButton(Morph)>>intoWorld:
| 15.3% {12548ms} PasteUpMorph>>startStepping:
| 15.3% {12548ms}
PasteUpMorph>>startStepping:at:selector:arguments:stepTime:
| 15.3% {12548ms}
WorldState>>startStepping:at:selector:arguments:stepTime:
| 15.3% {12548ms}
WorldState>>stopStepping:selector:
| 9.1% {7463ms}
Heap(SequenceableCollection)>>select:
| |6.4% {5249ms} Heap>>at:
| |2.7% {2214ms} primitives
| 3.4% {2788ms}
Heap(Collection)>>removeAll:
| |3.4% {2788ms}
Heap(Collection)>>remove:
| | 3.4% {2788ms}
Heap>>remove:ifAbsent:
| | 1.7% {1394ms}
StepMessage(MessageSend)>>=
| | |1.7% {1394ms} primitives
| | 1.7% {1394ms} primitives
| 2.8% {2296ms} primitives
14.8% {12138ms} PasteUpMorph>>startSteppingSubmorphsOf:
14.6% {11974ms} CLCheckButton(Morph)>>arrangeToStartSteppingIn:
14.4% {11810ms} PasteUpMorph>>startStepping:
14.4% {11810ms}
PasteUpMorph>>startStepping:at:selector:arguments:stepTime:
14.4% {11810ms}
WorldState>>startStepping:at:selector:arguments:stepTime:
14.4% {11810ms} WorldState>>stopStepping:selector:
9.1% {7463ms} Heap(SequenceableCollection)>>select:
|6.5% {5331ms} Heap>>at:
|2.5% {2050ms} primitives
2.9% {2378ms} Heap(Collection)>>removeAll:
|2.9% {2378ms} Heap(Collection)>>remove:
| 2.9% {2378ms} Heap>>remove:ifAbsent:
| 1.5% {1230ms} primitives
| 1.4% {1148ms} StepMessage(MessageSend)>>=
2.4% {1968ms} primitives
7.9% {6479ms} CLGrid>>relocatePanels
7.9% {6479ms} CLScrollPanelContainer(Morph)>>position:
7.4% {6069ms} CLScrollPanelContainer(Morph)>>fullBounds
7.4% {6069ms} CLScrollPanelContainer(Morph)>>doLayoutIn:
7.4% {6069ms} TableLayout>>layout:in:
7.4% {6069ms} TableLayout>>layoutTopToBottom:in:
4.3% {3527ms} CLGridRow(Morph)>>minExtent
|4.1% {3363ms} TableLayout>>minExtentOf:in:
| 4.1% {3363ms} TableLayout>>minExtentHorizontal:
| 4.0% {3281ms} CLGridCell(Morph)>>minExtent
| 1.9% {1558ms} CLGridCell(Morph)>>fullBounds
| |1.8% {1476ms} CLGridCell(Morph)>>doLayoutIn:
| 1.3% {1066ms} TableLayout>>minExtentOf:in:
| 1.2% {984ms} TableLayout>>minExtentVertical:
| 1.1% {902ms} CLLabel(Morph)>>minExtent
3.1% {2542ms} CLGridRow(Morph)>>layoutInBounds:
2.4% {1968ms} CLGridRow(Morph)>>doLayoutIn:
1.9% {1558ms} TableLayout>>layout:in:
1.9% {1558ms} TableLayout>>layoutLeftToRight:in:
1.7% {1394ms} CLGridCell(Morph)>>minExtent
**Leaves**
16.8% {13778ms} Heap>>at:
7.0% {5741ms} WeakActionSequence(SequenceableCollection)>>select:
6.9% {5659ms} Array(SequenceableCollection)>>identityIndexOf:ifAbsent:
6.8% {5577ms} WorldState>>stopStepping:selector:
3.7% {3035ms} Array(SequenceableCollection)>>identityIndexOf:
3.3% {2706ms} SmallIdentityDictionary(SmallDictionary)>>at:ifAbsent:
3.3% {2706ms} MorphExtension>>valueOfProperty:ifAbsent:
3.2% {2624ms} Heap>>remove:ifAbsent:
3.1% {2542ms} StepMessage(MessageSend)>>=
2.4% {1968ms} SmallIdentityDictionary>>findIndexForKey:
1.7% {1394ms} Rectangle>>setOrigin:corner:
1.6% {1312ms} Point>>+
1.6% {1312ms} Rectangle class>>origin:corner:
1.4% {1148ms} RectangleMorph(Morph)>>valueOfProperty:ifAbsent:
1.3% {1066ms} Point>>-
**Memory**
old +20,789,788 bytes
young +112,272 bytes
used +20,902,060 bytes
free -1,073,416 bytes
**GCs**
full 2 totalling 495ms (1.0% uptime), avg 248.0ms
incr 45275 totalling 15,800ms (19.0% uptime), avg 0.0ms
tenures 715 (avg 63 GCs/tenure)
root table 0 overflows
Perhaps I don´t interpret correctly that result. I understand than the more
slow is the UI actions, when I add the cells in each row (
#buildCellsStructure ). Exists some way for accelerate the UI moves? Is
possible stop the morphs events and only restart when is all builded?
I did try reduce the slow sensation loading the rows in another thread
(#fork), but the UI crushes, and appears a red rectangle with a yellow
cross. Exists some way for use work with UI in another threads?
Regards
--
View this message in context:
http://n4.nabble.com/Conseils-for-develop-a-grid-tp1299737p1471158.html
Sent from the Pharo Smalltalk mailing list archive at Nabble.com.
_______________________________________________
Pharo-project mailing list
[email protected]
http://lists.gforge.inria.fr/cgi-bin/mailman/listinfo/pharo-project