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

Reply via email to