Fwd: [Lsehub-staff] Fwd: Performance of text presentation in Glamour

Previous Topic Next Topic
 
classic Classic list List threaded Threaded
3 messages Options
Reply | Threaded
Open this post in threaded view
|

Fwd: [Lsehub-staff] Fwd: Performance of text presentation in Glamour

Usman Bhatti
Hello people,
The issue is getting a bit on our nerves so if someone can look into it during the next week, it'll be great. Me and Guillaume tried to have a look but it goes deep into the morphic layer of pharo and we do not have much time to allocate to this issue.
Someone with a better knowledge of morphs can provide a quick fix?

Here is a link to the image that contains the scripts in its workspace to analyse the problem.

Let me know if you have problem with the image.

tx in advance,
Usman

> ---------- Forwarded message ----------
> From: Usman Bhatti <[hidden email]>
> Date: Mon, Jul 23, 2012 at 5:36 AM
> Subject: Performance of text presentation in Glamour
> To: Moose-related development <[hidden email]>
>
>
> Hello all,
>
> I am working with text presentation in Glamour: the browser is used to show the contents of code files. I noted that the time to display the contents of a file (almost) exponentially grows with the size of the file. So, performing tests on files of three different sizes, I obtain the following response times (using Pharo profiler):
> 1000 lines     2s
> 2500 lines     11s
> 3500 lines     23s.
>
> So thats quite lot for me where I occasionally have files with 2K lines and I may need to browse their contents rapidly.
>
> Running my test script with the profiler in Pharo, I get this tree. I see that the message fromString: method is sent to Text class several times and that takes about 96% of the time (in all test cases). Any hints on how to reduce the number of times the method is invoked by glamour?
>
> tx in advance,
> Usman
>
> Trace with 3.5K lines:
>
>  - 23669 tallies, 23671 msec.
>
> **Tree**
> --------------------------------
> Process: (40s)  516161536: nil
> --------------------------------
> 100.0% {23669ms} GLMTabulator(GLMBrowser)>>openOn:with:
>   100.0% {23667ms} GLMTabulator(GLMBrowser)>>openWith:
>     100.0% {23667ms} GLMMorphicRenderer>>open:
>       91.2% {21577ms} GLMMorphicWindowRenderer class(GLMMorphicWidgetRenderer class)>>render:from:
>         |91.2% {21577ms} GLMMorphicWindowRenderer>>render:
>         |  72.3% {17122ms} GLMSystemWindow(SystemWindow)>>addMorph:fullFrame:
>         |    |72.3% {17122ms} PanelMorph>>adoptPaneColor:
>         |    |  72.3% {17120ms} PanelMorph(Morph)>>adoptPaneColor:
>         |    |    72.3% {17120ms} PanelMorph>>adoptPaneColor:
>         |    |      72.3% {17120ms} PanelMorph(Morph)>>color:
>         |    |        72.3% {17120ms} PanelMorph(Morph)>>changed
>         |    |          72.3% {17120ms} PanelMorph(Morph)>>privateFullBounds
>         |    |            72.3% {17120ms} PanelMorph(Morph)>>submorphBounds
>         |    |              72.3% {17120ms} LazyTabGroupMorph(Morph)>>fullBounds
>         |    |                72.3% {17120ms} LazyTabGroupMorph(Morph)>>doLayoutIn:
>         |    |                  65.1% {15418ms} TableLayout>>layout:in:
>         |    |                    |65.1% {15418ms} TableLayout>>layoutTopToBottom:in:
>         |    |                    |  65.1% {15418ms} PanelMorph(Morph)>>layoutInBounds:
>         |    |                    |    65.1% {15418ms} PanelMorph(Morph)>>bounds:
>         |    |                    |      65.1% {15418ms} PanelMorph(Morph)>>position:
>         |    |                    |        65.1% {15418ms} PanelMorph(Morph)>>fullBounds
>         |    |                    |          65.1% {15418ms} PanelMorph(Morph)>>doLayoutIn:
>         |    |                    |            65.1% {15418ms} TableLayout>>layout:in:
>         |    |                    |              65.1% {15418ms} TableLayout>>layoutTopToBottom:in:
>         |    |                    |                65.1% {15418ms} GLMPluggableTextMorph(Morph)>>layoutInBounds:
>         |    |                    |                  65.1% {15418ms} GLMPluggableTextMorph(Morph)>>bounds:
>         |    |                    |                    65.1% {15418ms} GLMPluggableTextMorph(PluggableTextMorph)>>extent:
>         |    |                    |                      65.1% {15414ms} GLMTextMorphForEditView(TextMorph)>>extent:
>         |    |                    |                        65.1% {15414ms} GLMTextMorphForEditView(TextMorph)>>installEditorToReplace:
>         |    |                    |                          65.1% {15414ms} GLMSmalltalkEditor class(TextEditor class)>>forMorph:
>         |    |                    |                            65.1% {15414ms} GLMSmalltalkEditor(TextEditor)>>initWithMorph:
>         |    |                    |                              65.1% {15414ms} GLMSmalltalkEditor(TextEditor)>>resetState
>         |    |                    |                                65.1% {15414ms} GLMSmalltalkEditor(TextEditor)>>paragraph
>         |    |                    |                                  65.1% {15414ms} GLMTextMorphForEditView(TextMorphForEditView)>>paragraph
>         |    |                    |                                    65.1% {15414ms} GLMTextMorphForEditView(TextMorph)>>paragraph
>         |    |                    |                                      65.1% {15414ms} Paragraph>>compose:style:from:in:
>         |    |                    |                                        65.1% {15414ms} Paragraph>>composeAll
>         |    |                    |                                          65.1% {15414ms} Paragraph>>multiComposeLinesFrom:to:delta:into:priorLines:atY:
>         |    |                    |                                            65.1% {15414ms} TextComposer>>multiComposeLinesFrom:to:delta:into:priorLi...extStyle:text:container:wantsColumnBreaks:
>         |    |                    |                                              65.1% {15414ms} TextComposer>>composeAllLines
>         |    |                    |                                                65.1% {15414ms} TextComposer>>composeOneLine
>         |    |                    |                                                  65.1% {15398ms} TextComposer>>composeAllRectangles:
>         |    |                    |                                                    65.0% {15386ms} TextComposer>>composeEachRectangleIn:
>         |    |                    |                                                      64.9% {15369ms} MultiCompositionScanner>>composeFrom:inRectangle:firstLine:leftSide:rightSide:
>         |    |                    |                                                        63.9% {15116ms} Text class>>fromString:
>         |    |                    |                                                          63.3% {14992ms} primitives
>         |    |                  7.2% {1702ms} LazyTabGroupMorph(Morph)>>privateFullBounds
>         |    |                    7.2% {1702ms} LazyTabGroupMorph(Morph)>>submorphBounds
>         |    |                      7.2% {1702ms} PanelMorph(Morph)>>fullBounds
>         |    |                        7.2% {1702ms} PanelMorph(Morph)>>doLayoutIn:
>         |    |                          7.2% {1702ms} TableLayout>>layout:in:
>         |    |                            7.2% {1700ms} TableLayout>>layoutTopToBottom:in:
>         |    |                              7.2% {1700ms} GLMPluggableTextMorph(Morph)>>layoutInBounds:
>         |    |                                7.2% {1700ms} GLMPluggableTextMorph(Morph)>>bounds:
>         |    |                                  7.2% {1700ms} GLMPluggableTextMorph(PluggableTextMorph)>>extent:
>         |    |                                    7.2% {1696ms} GLMTextMorphForEditView(TextMorph)>>extent:
>         |    |                                      7.2% {1696ms} GLMTextMorphForEditView(TextMorph)>>installEditorToReplace:
>         |    |                                        7.2% {1696ms} GLMSmalltalkEditor class(TextEditor class)>>forMorph:
>         |    |                                          7.2% {1696ms} GLMSmalltalkEditor(TextEditor)>>initWithMorph:
>         |    |                                            7.2% {1696ms} GLMSmalltalkEditor(TextEditor)>>resetState
>         |    |                                              7.2% {1696ms} GLMSmalltalkEditor(TextEditor)>>paragraph
>         |    |                                                7.2% {1696ms} GLMTextMorphForEditView(TextMorphForEditView)>>paragraph
>         |    |                                                  7.2% {1696ms} GLMTextMorphForEditView(TextMorph)>>paragraph
>         |    |                                                    7.2% {1696ms} Paragraph>>compose:style:from:in:
>         |    |                                                      7.2% {1696ms} Paragraph>>composeAll
>         |    |                                                        7.2% {1696ms} Paragraph>>multiComposeLinesFrom:to:delta:into:priorLines:atY:
>         |    |                                                          7.2% {1696ms} TextComposer>>multiComposeLinesFrom:to:delta:into:priorLi...extStyle:text:container:wantsColumnBreaks:
>         |    |                                                            7.2% {1696ms} TextComposer>>composeAllLines
>         |    |                                                              7.2% {1696ms} TextComposer>>composeOneLine
>         |    |                                                                7.2% {1696ms} TextComposer>>composeAllRectangles:
>         |    |                                                                  7.2% {1694ms} TextComposer>>composeEachRectangleIn:
>         |    |                                                                    7.1% {1692ms} MultiCompositionScanner>>composeFrom:inRectangle:firstLine:leftSide:rightSide:
>         |    |                                                                      6.9% {1629ms} Text class>>fromString:
>         |    |                                                                        6.8% {1621ms} primitives
>         |  18.8% {4445ms} GLMMorphicWindowRenderer(GLMMorphicWidgetRenderer)>>renderObject:
>         |    18.8% {4445ms} GLMMorphicRenderer(GLMRenderer)>>render:
>         |      18.8% {4445ms} GLMTabulator>>renderGlamorouslyOn:
>         |        18.8% {4445ms} GLMMorphicRenderer>>renderTabulator:
>         |          18.8% {4445ms} GLMMorphicTabulatorRenderer class(GLMMorphicWidgetRenderer class)>>render:from:
>         |            18.8% {4445ms} GLMMorphicTabulatorRenderer>>render:
>         |              18.8% {4445ms} GLMMorphicTabulatorRenderer>>renderCustomRow:ofPane:inUI:inBrowser:
>         |                18.8% {4445ms} GLMMorphicTabulatorRenderer(GLMMorphicWidgetRenderer)>>renderObject:
>         |                  18.8% {4445ms} GLMMorphicRenderer(GLMRenderer)>>render:
>         |                    18.8% {4445ms} GLMPane>>renderGlamorouslyOn:
>         |                      18.8% {4445ms} GLMMorphicRenderer>>renderPane:
>         |                        18.8% {4445ms} GLMMorphicPaneRenderer class(GLMMorphicWidgetRenderer class)>>render:from:
>         |                          18.8% {4445ms} GLMMorphicPaneRenderer>>render:
>         |                            18.8% {4445ms} GLMMorphicPaneRenderer>>renderContainerFor:
>         |                              18.8% {4443ms} GLMMorphicPaneRenderer(GLMMorphicWidgetRenderer)>>renderWithTitleOrNil:
>         |                                18.8% {4443ms} GLMMorphicPaneRenderer(GLMMorphicWidgetRenderer)>>renderObject:
>         |                                  18.8% {4443ms} GLMMorphicRenderer(GLMRenderer)>>render:
>         |                                    18.8% {4443ms} GLMCompositePresentation>>renderGlamorouslyOn:
>         |                                      18.8% {4443ms} GLMTabbedArrangement>>renderGlamorouslyOn:
>         |                                        18.8% {4443ms} GLMMorphicRenderer>>renderTabbedCompositePresentation:
>         |                                          18.8% {4443ms} GLMMorphicTabbedRenderer class(GLMMorphicWidgetRenderer class)>>render:from:
>         |                                            18.8% {4443ms} GLMMorphicTabbedRenderer>>render:
>         |                                              18.8% {4443ms} GLMMorphicTabbedRenderer(GLMMorphicWidgetRenderer)>>renderWithTitleOrNil:
>         |                                                18.8% {4441ms} GLMMorphicTabbedRenderer(GLMMorphicWidgetRenderer)>>renderObject:
>         |                                                  18.8% {4441ms} GLMMorphicRenderer(GLMRenderer)>>render:
>         |                                                    18.8% {4441ms} GLMTextPresentation>>renderGlamorouslyOn:
>         |                                                      18.8% {4441ms} GLMMorphicRenderer>>renderTextPresentation:
>         |                                                        18.8% {4441ms} GLMMorphicTextRenderer class(GLMMorphicWidgetRenderer class)>>render:from:
>         |                                                          18.8% {4441ms} GLMMorphicTextRenderer>>render:
>         |                                                            18.8% {4441ms} GLMMorphicTextRenderer>>textMorphForModel:
>         |                                                              18.8% {4441ms} GLMPluggableTextMorph class(PluggableTextMorph class)>>on:text:accept:readSelection:menu:
>         |                                                                18.7% {4437ms} GLMPluggableTextMorph(PluggableTextMorph)>>on:text:accept:readSelection:menu:
>         |                                                                  18.7% {4437ms} GLMPluggableTextMorph(PluggableTextMorph)>>setText:
>         |                                                                    18.7% {4437ms} GLMPluggableTextMorph(PluggableTextMorph)>>setTextBasic:
>         |                                                                      10.2% {2407ms} GLMTextMorphForEditView(TextMorph)>>contents:wrappedTo:
>         |                                                                        |10.2% {2407ms} GLMTextMorphForEditView(TextMorph)>>newContents:
>         |                                                                        |  10.2% {2407ms} GLMTextMorphForEditView(TextMorphForEditView)>>paragraph
>         |                                                                        |    10.2% {2407ms} GLMTextMorphForEditView(TextMorph)>>paragraph
>         |                                                                        |      10.2% {2407ms} Paragraph>>compose:style:from:in:
>         |                                                                        |        10.2% {2407ms} Paragraph>>composeAll
>         |                                                                        |          10.2% {2407ms} Paragraph>>multiComposeLinesFrom:to:delta:into:priorLines:atY:
>         |                                                                        |            10.2% {2407ms} TextComposer>>multiComposeLinesFrom:to:delta:into:priorLi...extStyle:text:container:wantsColumnBreaks:
>         |                                                                        |              10.2% {2407ms} TextComposer>>composeAllLines
>         |                                                                        |                10.2% {2407ms} TextComposer>>composeOneLine
>         |                                                                        |                  10.2% {2403ms} TextComposer>>composeAllRectangles:
>         |                                                                        |                    10.1% {2401ms} TextComposer>>composeEachRectangleIn:
>         |                                                                        |                      10.1% {2397ms} MultiCompositionScanner>>composeFrom:inRectangle:firstLine:leftSide:rightSide:
>         |                                                                        |                        9.8% {2321ms} Text class>>fromString:
>         |                                                                        |                          9.7% {2299ms} primitives
>         |                                                                      8.6% {2030ms} GLMPluggableTextMorph(ScrollPane)>>setScrollDeltas
>         |                                                                        8.6% {2028ms} GLMPluggableTextMorph(ScrollPane)>>hideOrShowScrollBars
>         |                                                                          8.6% {2028ms} GLMPluggableTextMorph(ScrollPane)>>vHideOrShowScrollBar
>         |                                                                            8.6% {2028ms} GLMPluggableTextMorph(ScrollPane)>>vShowScrollBar
>         |                                                                              8.6% {2028ms} GLMPluggableTextMorph(PluggableTextMorph)>>resetExtent
>         |                                                                                8.6% {2026ms} GLMPluggableTextMorph(PluggableTextMorph)>>extent:
>         |                                                                                  8.6% {2026ms} GLMTextMorphForEditView(TextMorph)>>extent:
>         |                                                                                    8.6% {2026ms} GLMTextMorphForEditView(TextMorph)>>installEditorToReplace:
>         |                                                                                      8.6% {2026ms} GLMSmalltalkEditor class(TextEditor class)>>forMorph:
>         |                                                                                        8.6% {2026ms} GLMSmalltalkEditor(TextEditor)>>initWithMorph:
>         |                                                                                          8.6% {2026ms} GLMSmalltalkEditor(TextEditor)>>resetState
>         |                                                                                            8.6% {2026ms} GLMSmalltalkEditor(TextEditor)>>paragraph
>         |                                                                                              8.6% {2026ms} GLMTextMorphForEditView(TextMorphForEditView)>>paragraph
>         |                                                                                                8.6% {2026ms} GLMTextMorphForEditView(TextMorph)>>paragraph
>         |                                                                                                  8.6% {2026ms} Paragraph>>compose:style:from:in:
>         |                                                                                                    8.6% {2026ms} Paragraph>>composeAll
>         |                                                                                                      8.6% {2026ms} Paragraph>>multiComposeLinesFrom:to:delta:into:priorLines:atY:
>         |                                                                                                        8.6% {2026ms} TextComposer>>multiComposeLinesFrom:to:delta:into:priorLi...extStyle:text:container:wantsColumnBreaks:
>         |                                                                                                          8.6% {2026ms} TextComposer>>composeAllLines
>         |                                                                                                            8.6% {2026ms} TextComposer>>composeOneLine
>         |                                                                                                              8.6% {2024ms} TextComposer>>composeAllRectangles:
>         |                                                                                                                8.5% {2020ms} TextComposer>>composeEachRectangleIn:
>         |                                                                                                                  8.5% {2016ms} MultiCompositionScanner>>composeFrom:inRectangle:firstLine:leftSide:rightSide:
>         |                                                                                                                    8.3% {1956ms} Text class>>fromString:
>         |                                                                                                                      8.2% {1950ms} primitives
>       8.8% {2090ms} GLMSystemWindow(Morph)>>openInWorld
>         8.8% {2090ms} GLMSystemWindow(SystemWindow)>>openInWorld:
>           8.8% {2079ms} GLMSystemWindow(Morph)>>bounds:
>             5.2% {1229ms} GLMSystemWindow(SystemWindow)>>position:
>               |5.2% {1229ms} GLMSystemWindow(Morph)>>position:
>               |  5.2% {1229ms} GLMSystemWindow(Morph)>>fullBounds
>               |    5.2% {1229ms} GLMSystemWindow(Morph)>>doLayoutIn:
>               |      5.2% {1229ms} GLMSystemWindow(Morph)>>privateFullBounds
>               |        5.2% {1229ms} GLMSystemWindow(Morph)>>submorphBounds
>               |          5.2% {1229ms} PanelMorph(Morph)>>fullBounds
>               |            5.2% {1229ms} PanelMorph(Morph)>>doLayoutIn:
>               |              5.2% {1229ms} PanelMorph(Morph)>>privateFullBounds
>               |                5.2% {1229ms} PanelMorph(Morph)>>submorphBounds
>               |                  5.2% {1229ms} PanelMorph(Morph)>>fullBounds
>               |                    5.2% {1229ms} PanelMorph(Morph)>>doLayoutIn:
>               |                      5.2% {1229ms} PanelMorph(Morph)>>privateFullBounds
>               |                        5.2% {1229ms} PanelMorph(Morph)>>submorphBounds
>               |                          5.2% {1229ms} LazyTabGroupMorph(Morph)>>fullBounds
>               |                            5.2% {1229ms} LazyTabGroupMorph(Morph)>>doLayoutIn:
>               |                              5.2% {1229ms} LazyTabGroupMorph(Morph)>>privateFullBounds
>               |                                5.2% {1229ms} LazyTabGroupMorph(Morph)>>submorphBounds
>               |                                  5.2% {1229ms} PanelMorph(Morph)>>fullBounds
>               |                                    5.2% {1229ms} PanelMorph(Morph)>>doLayoutIn:
>               |                                      5.2% {1229ms} TableLayout>>layout:in:
>               |                                        5.2% {1227ms} TableLayout>>layoutTopToBottom:in:
>               |                                          5.2% {1227ms} GLMPluggableTextMorph(Morph)>>layoutInBounds:
>               |                                            5.2% {1227ms} GLMPluggableTextMorph(Morph)>>bounds:
>               |                                              5.2% {1227ms} GLMPluggableTextMorph(PluggableTextMorph)>>extent:
>               |                                                5.2% {1225ms} GLMTextMorphForEditView(TextMorph)>>extent:
>               |                                                  5.2% {1225ms} GLMTextMorphForEditView(TextMorph)>>installEditorToReplace:
>               |                                                    5.2% {1225ms} GLMSmalltalkEditor class(TextEditor class)>>forMorph:
>               |                                                      5.2% {1225ms} GLMSmalltalkEditor(TextEditor)>>initWithMorph:
>               |                                                        5.2% {1225ms} GLMSmalltalkEditor(TextEditor)>>resetState
>               |                                                          5.2% {1225ms} GLMSmalltalkEditor(TextEditor)>>paragraph
>               |                                                            5.2% {1225ms} GLMTextMorphForEditView(TextMorphForEditView)>>paragraph
>               |                                                              5.2% {1225ms} GLMTextMorphForEditView(TextMorph)>>paragraph
>               |                                                                5.2% {1225ms} Paragraph>>compose:style:from:in:
>               |                                                                  5.2% {1225ms} Paragraph>>composeAll
>               |                                                                    5.2% {1225ms} Paragraph>>multiComposeLinesFrom:to:delta:into:priorLines:atY:
>               |                                                                      5.2% {1225ms} TextComposer>>multiComposeLinesFrom:to:delta:into:priorLi...extStyle:text:container:wantsColumnBreaks:
>               |                                                                        5.2% {1225ms} TextComposer>>composeAllLines
>               |                                                                          5.2% {1225ms} TextComposer>>composeOneLine
>               |                                                                            5.2% {1225ms} TextComposer>>composeAllRectangles:
>               |                                                                              5.2% {1225ms} TextComposer>>composeEachRectangleIn:
>               |                                                                                5.2% {1225ms} MultiCompositionScanner>>composeFrom:inRectangle:firstLine:leftSide:rightSide:
>               |                                                                                  5.0% {1187ms} Text class>>fromString:
>               |                                                                                    5.0% {1177ms} primitives
>             3.6% {850ms} GLMSystemWindow>>extent:
>               3.6% {850ms} GLMSystemWindow(Morph)>>fullBounds
>                 3.6% {850ms} GLMSystemWindow(Morph)>>doLayoutIn:
>                   3.6% {850ms} GLMSystemWindow(Morph)>>privateFullBounds
>                     3.6% {850ms} GLMSystemWindow(Morph)>>submorphBounds
>                       3.6% {850ms} PanelMorph(Morph)>>fullBounds
>                         3.6% {850ms} PanelMorph(Morph)>>doLayoutIn:
>                           3.6% {850ms} PanelMorph(Morph)>>privateFullBounds
>                             3.6% {850ms} PanelMorph(Morph)>>submorphBounds
>                               3.6% {850ms} PanelMorph(Morph)>>fullBounds
>                                 3.6% {850ms} PanelMorph(Morph)>>doLayoutIn:
>                                   3.6% {850ms} PanelMorph(Morph)>>privateFullBounds
>                                     3.6% {850ms} PanelMorph(Morph)>>submorphBounds
>                                       3.6% {850ms} LazyTabGroupMorph(Morph)>>fullBounds
>                                         3.6% {850ms} LazyTabGroupMorph(Morph)>>doLayoutIn:
>                                           3.6% {850ms} LazyTabGroupMorph(Morph)>>privateFullBounds
>                                             3.6% {850ms} LazyTabGroupMorph(Morph)>>submorphBounds
>                                               3.6% {850ms} PanelMorph(Morph)>>fullBounds
>                                                 3.6% {850ms} PanelMorph(Morph)>>doLayoutIn:
>                                                   3.6% {850ms} TableLayout>>layout:in:
>                                                     3.6% {850ms} TableLayout>>layoutTopToBottom:in:
>                                                       3.6% {848ms} GLMPluggableTextMorph(Morph)>>layoutInBounds:
>                                                         3.6% {848ms} GLMPluggableTextMorph(Morph)>>bounds:
>                                                           3.6% {848ms} GLMPluggableTextMorph(PluggableTextMorph)>>extent:
>                                                             3.6% {848ms} GLMTextMorphForEditView(TextMorph)>>extent:
>                                                               3.6% {848ms} GLMTextMorphForEditView(TextMorph)>>installEditorToReplace:
>                                                                 3.6% {848ms} GLMSmalltalkEditor class(TextEditor class)>>forMorph:
>                                                                   3.6% {848ms} GLMSmalltalkEditor(TextEditor)>>initWithMorph:
>                                                                     3.6% {848ms} GLMSmalltalkEditor(TextEditor)>>resetState
>                                                                       3.6% {848ms} GLMSmalltalkEditor(TextEditor)>>paragraph
>                                                                         3.6% {848ms} GLMTextMorphForEditView(TextMorphForEditView)>>paragraph
>                                                                           3.6% {848ms} GLMTextMorphForEditView(TextMorph)>>paragraph
>                                                                             3.6% {848ms} Paragraph>>compose:style:from:in:
>                                                                               3.6% {848ms} Paragraph>>composeAll
>                                                                                 3.6% {848ms} Paragraph>>multiComposeLinesFrom:to:delta:into:priorLines:atY:
>                                                                                   3.6% {848ms} TextComposer>>multiComposeLinesFrom:to:delta:into:priorLi...extStyle:text:container:wantsColumnBreaks:
>                                                                                     3.6% {848ms} TextComposer>>composeAllLines
>                                                                                       3.6% {846ms} TextComposer>>composeOneLine
>                                                                                         3.6% {846ms} TextComposer>>composeAllRectangles:
>                                                                                           3.6% {844ms} TextComposer>>composeEachRectangleIn:
>                                                                                             3.6% {844ms} MultiCompositionScanner>>composeFrom:inRectangle:firstLine:leftSide:rightSide:
>                                                                                               3.4% {807ms} Text class>>fromString:
>                                                                                                 3.4% {802ms} primitives
> **Leaves**
> 96.5% {22842ms} Text class>>fromString:
>
> **Memory**
>       old                     -4,940,088 bytes
>       young           +69,144 bytes
>       used            -4,870,944 bytes
>       free            -1,051,976 bytes
>
> **GCs**
>       full                    3 totalling 1,428ms (6.0% uptime), avg 476.0ms
>       incr            16030 totalling 15,162ms (64.0% uptime), avg 1.0ms
>       tenures         42 (avg 381 GCs/tenure)
>       root table      0 overflows
>
>




Reply | Threaded
Open this post in threaded view
|

Re: [Lsehub-staff] Fwd: Performance of text presentation in Glamour

abergel
No idea if this is of any help.
Roassal seems to behave well with large files. Just do it the following script:

-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
"Preambule. It includes the initialization. "
| rawView view str |
rawView := ROView new.
view := ROMondrianViewBuilder view: rawView.
"enter your script below"
"-------------"
"-------------"

str := ''.
1 to: 4000 do: [ :nbLine |
        str := str , nbLine printString.
        3 timesRepeat: [ str := str, ' hello world' ].
        str := str, String cr].

view shape label.
view node: str.

"-------------"
"-------------"
"Below is the initiation of the menu and opening the visualization"
ROEaselMorphic new populateMenuOn: view.
view open
-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=

And there is absolutely no optimization. Something that I would like to include soon, is a way to color the text.

Cheers,
Alexandre


On Aug 12, 2012, at 11:22 AM, Usman Bhatti <[hidden email]> wrote:

> Hello people,
> The issue is getting a bit on our nerves so if someone can look into it during the next week, it'll be great. Me and Guillaume tried to have a look but it goes deep into the morphic layer of pharo and we do not have much time to allocate to this issue.
> Someone with a better knowledge of morphs can provide a quick fix?
>
> Here is a link to the image that contains the scripts in its workspace to analyse the problem.
> http://dl.dropbox.com/u/11804892/Moose-glam-perf.zip
>
> Let me know if you have problem with the image.
>
> tx in advance,
> Usman
>
> > ---------- Forwarded message ----------
> > From: Usman Bhatti <[hidden email]>
> > Date: Mon, Jul 23, 2012 at 5:36 AM
> > Subject: Performance of text presentation in Glamour
> > To: Moose-related development <[hidden email]>
> >
> >
> > Hello all,
> >
> > I am working with text presentation in Glamour: the browser is used to show the contents of code files. I noted that the time to display the contents of a file (almost) exponentially grows with the size of the file. So, performing tests on files of three different sizes, I obtain the following response times (using Pharo profiler):
> > 1000 lines     2s
> > 2500 lines     11s
> > 3500 lines     23s.
> >
> > So thats quite lot for me where I occasionally have files with 2K lines and I may need to browse their contents rapidly.
> >
> > Running my test script with the profiler in Pharo, I get this tree. I see that the message fromString: method is sent to Text class several times and that takes about 96% of the time (in all test cases). Any hints on how to reduce the number of times the method is invoked by glamour?
> >
> > tx in advance,
> > Usman
> >
> > Trace with 3.5K lines:
> >
> >  - 23669 tallies, 23671 msec.
> >
> > **Tree**
> > --------------------------------
> > Process: (40s)  516161536: nil
> > --------------------------------
> > 100.0% {23669ms} GLMTabulator(GLMBrowser)>>openOn:with:
> >   100.0% {23667ms} GLMTabulator(GLMBrowser)>>openWith:
> >     100.0% {23667ms} GLMMorphicRenderer>>open:
> >       91.2% {21577ms} GLMMorphicWindowRenderer class(GLMMorphicWidgetRenderer class)>>render:from:
> >         |91.2% {21577ms} GLMMorphicWindowRenderer>>render:
> >         |  72.3% {17122ms} GLMSystemWindow(SystemWindow)>>addMorph:fullFrame:
> >         |    |72.3% {17122ms} PanelMorph>>adoptPaneColor:
> >         |    |  72.3% {17120ms} PanelMorph(Morph)>>adoptPaneColor:
> >         |    |    72.3% {17120ms} PanelMorph>>adoptPaneColor:
> >         |    |      72.3% {17120ms} PanelMorph(Morph)>>color:
> >         |    |        72.3% {17120ms} PanelMorph(Morph)>>changed
> >         |    |          72.3% {17120ms} PanelMorph(Morph)>>privateFullBounds
> >         |    |            72.3% {17120ms} PanelMorph(Morph)>>submorphBounds
> >         |    |              72.3% {17120ms} LazyTabGroupMorph(Morph)>>fullBounds
> >         |    |                72.3% {17120ms} LazyTabGroupMorph(Morph)>>doLayoutIn:
> >         |    |                  65.1% {15418ms} TableLayout>>layout:in:
> >         |    |                    |65.1% {15418ms} TableLayout>>layoutTopToBottom:in:
> >         |    |                    |  65.1% {15418ms} PanelMorph(Morph)>>layoutInBounds:
> >         |    |                    |    65.1% {15418ms} PanelMorph(Morph)>>bounds:
> >         |    |                    |      65.1% {15418ms} PanelMorph(Morph)>>position:
> >         |    |                    |        65.1% {15418ms} PanelMorph(Morph)>>fullBounds
> >         |    |                    |          65.1% {15418ms} PanelMorph(Morph)>>doLayoutIn:
> >         |    |                    |            65.1% {15418ms} TableLayout>>layout:in:
> >         |    |                    |              65.1% {15418ms} TableLayout>>layoutTopToBottom:in:
> >         |    |                    |                65.1% {15418ms} GLMPluggableTextMorph(Morph)>>layoutInBounds:
> >         |    |                    |                  65.1% {15418ms} GLMPluggableTextMorph(Morph)>>bounds:
> >         |    |                    |                    65.1% {15418ms} GLMPluggableTextMorph(PluggableTextMorph)>>extent:
> >         |    |                    |                      65.1% {15414ms} GLMTextMorphForEditView(TextMorph)>>extent:
> >         |    |                    |                        65.1% {15414ms} GLMTextMorphForEditView(TextMorph)>>installEditorToReplace:
> >         |    |                    |                          65.1% {15414ms} GLMSmalltalkEditor class(TextEditor class)>>forMorph:
> >         |    |                    |                            65.1% {15414ms} GLMSmalltalkEditor(TextEditor)>>initWithMorph:
> >         |    |                    |                              65.1% {15414ms} GLMSmalltalkEditor(TextEditor)>>resetState
> >         |    |                    |                                65.1% {15414ms} GLMSmalltalkEditor(TextEditor)>>paragraph
> >         |    |                    |                                  65.1% {15414ms} GLMTextMorphForEditView(TextMorphForEditView)>>paragraph
> >         |    |                    |                                    65.1% {15414ms} GLMTextMorphForEditView(TextMorph)>>paragraph
> >         |    |                    |                                      65.1% {15414ms} Paragraph>>compose:style:from:in:
> >         |    |                    |                                        65.1% {15414ms} Paragraph>>composeAll
> >         |    |                    |                                          65.1% {15414ms} Paragraph>>multiComposeLinesFrom:to:delta:into:priorLines:atY:
> >         |    |                    |                                            65.1% {15414ms} TextComposer>>multiComposeLinesFrom:to:delta:into:priorLi...extStyle:text:container:wantsColumnBreaks:
> >         |    |                    |                                              65.1% {15414ms} TextComposer>>composeAllLines
> >         |    |                    |                                                65.1% {15414ms} TextComposer>>composeOneLine
> >         |    |                    |                                                  65.1% {15398ms} TextComposer>>composeAllRectangles:
> >         |    |                    |                                                    65.0% {15386ms} TextComposer>>composeEachRectangleIn:
> >         |    |                    |                                                      64.9% {15369ms} MultiCompositionScanner>>composeFrom:inRectangle:firstLine:leftSide:rightSide:
> >         |    |                    |                                                        63.9% {15116ms} Text class>>fromString:
> >         |    |                    |                                                          63.3% {14992ms} primitives
> >         |    |                  7.2% {1702ms} LazyTabGroupMorph(Morph)>>privateFullBounds
> >         |    |                    7.2% {1702ms} LazyTabGroupMorph(Morph)>>submorphBounds
> >         |    |                      7.2% {1702ms} PanelMorph(Morph)>>fullBounds
> >         |    |                        7.2% {1702ms} PanelMorph(Morph)>>doLayoutIn:
> >         |    |                          7.2% {1702ms} TableLayout>>layout:in:
> >         |    |                            7.2% {1700ms} TableLayout>>layoutTopToBottom:in:
> >         |    |                              7.2% {1700ms} GLMPluggableTextMorph(Morph)>>layoutInBounds:
> >         |    |                                7.2% {1700ms} GLMPluggableTextMorph(Morph)>>bounds:
> >         |    |                                  7.2% {1700ms} GLMPluggableTextMorph(PluggableTextMorph)>>extent:
> >         |    |                                    7.2% {1696ms} GLMTextMorphForEditView(TextMorph)>>extent:
> >         |    |                                      7.2% {1696ms} GLMTextMorphForEditView(TextMorph)>>installEditorToReplace:
> >         |    |                                        7.2% {1696ms} GLMSmalltalkEditor class(TextEditor class)>>forMorph:
> >         |    |                                          7.2% {1696ms} GLMSmalltalkEditor(TextEditor)>>initWithMorph:
> >         |    |                                            7.2% {1696ms} GLMSmalltalkEditor(TextEditor)>>resetState
> >         |    |                                              7.2% {1696ms} GLMSmalltalkEditor(TextEditor)>>paragraph
> >         |    |                                                7.2% {1696ms} GLMTextMorphForEditView(TextMorphForEditView)>>paragraph
> >         |    |                                                  7.2% {1696ms} GLMTextMorphForEditView(TextMorph)>>paragraph
> >         |    |                                                    7.2% {1696ms} Paragraph>>compose:style:from:in:
> >         |    |                                                      7.2% {1696ms} Paragraph>>composeAll
> >         |    |                                                        7.2% {1696ms} Paragraph>>multiComposeLinesFrom:to:delta:into:priorLines:atY:
> >         |    |                                                          7.2% {1696ms} TextComposer>>multiComposeLinesFrom:to:delta:into:priorLi...extStyle:text:container:wantsColumnBreaks:
> >         |    |                                                            7.2% {1696ms} TextComposer>>composeAllLines
> >         |    |                                                              7.2% {1696ms} TextComposer>>composeOneLine
> >         |    |                                                                7.2% {1696ms} TextComposer>>composeAllRectangles:
> >         |    |                                                                  7.2% {1694ms} TextComposer>>composeEachRectangleIn:
> >         |    |                                                                    7.1% {1692ms} MultiCompositionScanner>>composeFrom:inRectangle:firstLine:leftSide:rightSide:
> >         |    |                                                                      6.9% {1629ms} Text class>>fromString:
> >         |    |                                                                        6.8% {1621ms} primitives
> >         |  18.8% {4445ms} GLMMorphicWindowRenderer(GLMMorphicWidgetRenderer)>>renderObject:
> >         |    18.8% {4445ms} GLMMorphicRenderer(GLMRenderer)>>render:
> >         |      18.8% {4445ms} GLMTabulator>>renderGlamorouslyOn:
> >         |        18.8% {4445ms} GLMMorphicRenderer>>renderTabulator:
> >         |          18.8% {4445ms} GLMMorphicTabulatorRenderer class(GLMMorphicWidgetRenderer class)>>render:from:
> >         |            18.8% {4445ms} GLMMorphicTabulatorRenderer>>render:
> >         |              18.8% {4445ms} GLMMorphicTabulatorRenderer>>renderCustomRow:ofPane:inUI:inBrowser:
> >         |                18.8% {4445ms} GLMMorphicTabulatorRenderer(GLMMorphicWidgetRenderer)>>renderObject:
> >         |                  18.8% {4445ms} GLMMorphicRenderer(GLMRenderer)>>render:
> >         |                    18.8% {4445ms} GLMPane>>renderGlamorouslyOn:
> >         |                      18.8% {4445ms} GLMMorphicRenderer>>renderPane:
> >         |                        18.8% {4445ms} GLMMorphicPaneRenderer class(GLMMorphicWidgetRenderer class)>>render:from:
> >         |                          18.8% {4445ms} GLMMorphicPaneRenderer>>render:
> >         |                            18.8% {4445ms} GLMMorphicPaneRenderer>>renderContainerFor:
> >         |                              18.8% {4443ms} GLMMorphicPaneRenderer(GLMMorphicWidgetRenderer)>>renderWithTitleOrNil:
> >         |                                18.8% {4443ms} GLMMorphicPaneRenderer(GLMMorphicWidgetRenderer)>>renderObject:
> >         |                                  18.8% {4443ms} GLMMorphicRenderer(GLMRenderer)>>render:
> >         |                                    18.8% {4443ms} GLMCompositePresentation>>renderGlamorouslyOn:
> >         |                                      18.8% {4443ms} GLMTabbedArrangement>>renderGlamorouslyOn:
> >         |                                        18.8% {4443ms} GLMMorphicRenderer>>renderTabbedCompositePresentation:
> >         |                                          18.8% {4443ms} GLMMorphicTabbedRenderer class(GLMMorphicWidgetRenderer class)>>render:from:
> >         |                                            18.8% {4443ms} GLMMorphicTabbedRenderer>>render:
> >         |                                              18.8% {4443ms} GLMMorphicTabbedRenderer(GLMMorphicWidgetRenderer)>>renderWithTitleOrNil:
> >         |                                                18.8% {4441ms} GLMMorphicTabbedRenderer(GLMMorphicWidgetRenderer)>>renderObject:
> >         |                                                  18.8% {4441ms} GLMMorphicRenderer(GLMRenderer)>>render:
> >         |                                                    18.8% {4441ms} GLMTextPresentation>>renderGlamorouslyOn:
> >         |                                                      18.8% {4441ms} GLMMorphicRenderer>>renderTextPresentation:
> >         |                                                        18.8% {4441ms} GLMMorphicTextRenderer class(GLMMorphicWidgetRenderer class)>>render:from:
> >         |                                                          18.8% {4441ms} GLMMorphicTextRenderer>>render:
> >         |                                                            18.8% {4441ms} GLMMorphicTextRenderer>>textMorphForModel:
> >         |                                                              18.8% {4441ms} GLMPluggableTextMorph class(PluggableTextMorph class)>>on:text:accept:readSelection:menu:
> >         |                                                                18.7% {4437ms} GLMPluggableTextMorph(PluggableTextMorph)>>on:text:accept:readSelection:menu:
> >         |                                                                  18.7% {4437ms} GLMPluggableTextMorph(PluggableTextMorph)>>setText:
> >         |                                                                    18.7% {4437ms} GLMPluggableTextMorph(PluggableTextMorph)>>setTextBasic:
> >         |                                                                      10.2% {2407ms} GLMTextMorphForEditView(TextMorph)>>contents:wrappedTo:
> >         |                                                                        |10.2% {2407ms} GLMTextMorphForEditView(TextMorph)>>newContents:
> >         |                                                                        |  10.2% {2407ms} GLMTextMorphForEditView(TextMorphForEditView)>>paragraph
> >         |                                                                        |    10.2% {2407ms} GLMTextMorphForEditView(TextMorph)>>paragraph
> >         |                                                                        |      10.2% {2407ms} Paragraph>>compose:style:from:in:
> >         |                                                                        |        10.2% {2407ms} Paragraph>>composeAll
> >         |                                                                        |          10.2% {2407ms} Paragraph>>multiComposeLinesFrom:to:delta:into:priorLines:atY:
> >         |                                                                        |            10.2% {2407ms} TextComposer>>multiComposeLinesFrom:to:delta:into:priorLi...extStyle:text:container:wantsColumnBreaks:
> >         |                                                                        |              10.2% {2407ms} TextComposer>>composeAllLines
> >         |                                                                        |                10.2% {2407ms} TextComposer>>composeOneLine
> >         |                                                                        |                  10.2% {2403ms} TextComposer>>composeAllRectangles:
> >         |                                                                        |                    10.1% {2401ms} TextComposer>>composeEachRectangleIn:
> >         |                                                                        |                      10.1% {2397ms} MultiCompositionScanner>>composeFrom:inRectangle:firstLine:leftSide:rightSide:
> >         |                                                                        |                        9.8% {2321ms} Text class>>fromString:
> >         |                                                                        |                          9.7% {2299ms} primitives
> >         |                                                                      8.6% {2030ms} GLMPluggableTextMorph(ScrollPane)>>setScrollDeltas
> >         |                                                                        8.6% {2028ms} GLMPluggableTextMorph(ScrollPane)>>hideOrShowScrollBars
> >         |                                                                          8.6% {2028ms} GLMPluggableTextMorph(ScrollPane)>>vHideOrShowScrollBar
> >         |                                                                            8.6% {2028ms} GLMPluggableTextMorph(ScrollPane)>>vShowScrollBar
> >         |                                                                              8.6% {2028ms} GLMPluggableTextMorph(PluggableTextMorph)>>resetExtent
> >         |                                                                                8.6% {2026ms} GLMPluggableTextMorph(PluggableTextMorph)>>extent:
> >         |                                                                                  8.6% {2026ms} GLMTextMorphForEditView(TextMorph)>>extent:
> >         |                                                                                    8.6% {2026ms} GLMTextMorphForEditView(TextMorph)>>installEditorToReplace:
> >         |                                                                                      8.6% {2026ms} GLMSmalltalkEditor class(TextEditor class)>>forMorph:
> >         |                                                                                        8.6% {2026ms} GLMSmalltalkEditor(TextEditor)>>initWithMorph:
> >         |                                                                                          8.6% {2026ms} GLMSmalltalkEditor(TextEditor)>>resetState
> >         |                                                                                            8.6% {2026ms} GLMSmalltalkEditor(TextEditor)>>paragraph
> >         |                                                                                              8.6% {2026ms} GLMTextMorphForEditView(TextMorphForEditView)>>paragraph
> >         |                                                                                                8.6% {2026ms} GLMTextMorphForEditView(TextMorph)>>paragraph
> >         |                                                                                                  8.6% {2026ms} Paragraph>>compose:style:from:in:
> >         |                                                                                                    8.6% {2026ms} Paragraph>>composeAll
> >         |                                                                                                      8.6% {2026ms} Paragraph>>multiComposeLinesFrom:to:delta:into:priorLines:atY:
> >         |                                                                                                        8.6% {2026ms} TextComposer>>multiComposeLinesFrom:to:delta:into:priorLi...extStyle:text:container:wantsColumnBreaks:
> >         |                                                                                                          8.6% {2026ms} TextComposer>>composeAllLines
> >         |                                                                                                            8.6% {2026ms} TextComposer>>composeOneLine
> >         |                                                                                                              8.6% {2024ms} TextComposer>>composeAllRectangles:
> >         |                                                                                                                8.5% {2020ms} TextComposer>>composeEachRectangleIn:
> >         |                                                                                                                  8.5% {2016ms} MultiCompositionScanner>>composeFrom:inRectangle:firstLine:leftSide:rightSide:
> >         |                                                                                                                    8.3% {1956ms} Text class>>fromString:
> >         |                                                                                                                      8.2% {1950ms} primitives
> >       8.8% {2090ms} GLMSystemWindow(Morph)>>openInWorld
> >         8.8% {2090ms} GLMSystemWindow(SystemWindow)>>openInWorld:
> >           8.8% {2079ms} GLMSystemWindow(Morph)>>bounds:
> >             5.2% {1229ms} GLMSystemWindow(SystemWindow)>>position:
> >               |5.2% {1229ms} GLMSystemWindow(Morph)>>position:
> >               |  5.2% {1229ms} GLMSystemWindow(Morph)>>fullBounds
> >               |    5.2% {1229ms} GLMSystemWindow(Morph)>>doLayoutIn:
> >               |      5.2% {1229ms} GLMSystemWindow(Morph)>>privateFullBounds
> >               |        5.2% {1229ms} GLMSystemWindow(Morph)>>submorphBounds
> >               |          5.2% {1229ms} PanelMorph(Morph)>>fullBounds
> >               |            5.2% {1229ms} PanelMorph(Morph)>>doLayoutIn:
> >               |              5.2% {1229ms} PanelMorph(Morph)>>privateFullBounds
> >               |                5.2% {1229ms} PanelMorph(Morph)>>submorphBounds
> >               |                  5.2% {1229ms} PanelMorph(Morph)>>fullBounds
> >               |                    5.2% {1229ms} PanelMorph(Morph)>>doLayoutIn:
> >               |                      5.2% {1229ms} PanelMorph(Morph)>>privateFullBounds
> >               |                        5.2% {1229ms} PanelMorph(Morph)>>submorphBounds
> >               |                          5.2% {1229ms} LazyTabGroupMorph(Morph)>>fullBounds
> >               |                            5.2% {1229ms} LazyTabGroupMorph(Morph)>>doLayoutIn:
> >               |                              5.2% {1229ms} LazyTabGroupMorph(Morph)>>privateFullBounds
> >               |                                5.2% {1229ms} LazyTabGroupMorph(Morph)>>submorphBounds
> >               |                                  5.2% {1229ms} PanelMorph(Morph)>>fullBounds
> >               |                                    5.2% {1229ms} PanelMorph(Morph)>>doLayoutIn:
> >               |                                      5.2% {1229ms} TableLayout>>layout:in:
> >               |                                        5.2% {1227ms} TableLayout>>layoutTopToBottom:in:
> >               |                                          5.2% {1227ms} GLMPluggableTextMorph(Morph)>>layoutInBounds:
> >               |                                            5.2% {1227ms} GLMPluggableTextMorph(Morph)>>bounds:
> >               |                                              5.2% {1227ms} GLMPluggableTextMorph(PluggableTextMorph)>>extent:
> >               |                                                5.2% {1225ms} GLMTextMorphForEditView(TextMorph)>>extent:
> >               |                                                  5.2% {1225ms} GLMTextMorphForEditView(TextMorph)>>installEditorToReplace:
> >               |                                                    5.2% {1225ms} GLMSmalltalkEditor class(TextEditor class)>>forMorph:
> >               |                                                      5.2% {1225ms} GLMSmalltalkEditor(TextEditor)>>initWithMorph:
> >               |                                                        5.2% {1225ms} GLMSmalltalkEditor(TextEditor)>>resetState
> >               |                                                          5.2% {1225ms} GLMSmalltalkEditor(TextEditor)>>paragraph
> >               |                                                            5.2% {1225ms} GLMTextMorphForEditView(TextMorphForEditView)>>paragraph
> >               |                                                              5.2% {1225ms} GLMTextMorphForEditView(TextMorph)>>paragraph
> >               |                                                                5.2% {1225ms} Paragraph>>compose:style:from:in:
> >               |                                                                  5.2% {1225ms} Paragraph>>composeAll
> >               |                                                                    5.2% {1225ms} Paragraph>>multiComposeLinesFrom:to:delta:into:priorLines:atY:
> >               |                                                                      5.2% {1225ms} TextComposer>>multiComposeLinesFrom:to:delta:into:priorLi...extStyle:text:container:wantsColumnBreaks:
> >               |                                                                        5.2% {1225ms} TextComposer>>composeAllLines
> >               |                                                                          5.2% {1225ms} TextComposer>>composeOneLine
> >               |                                                                            5.2% {1225ms} TextComposer>>composeAllRectangles:
> >               |                                                                              5.2% {1225ms} TextComposer>>composeEachRectangleIn:
> >               |                                                                                5.2% {1225ms} MultiCompositionScanner>>composeFrom:inRectangle:firstLine:leftSide:rightSide:
> >               |                                                                                  5.0% {1187ms} Text class>>fromString:
> >               |                                                                                    5.0% {1177ms} primitives
> >             3.6% {850ms} GLMSystemWindow>>extent:
> >               3.6% {850ms} GLMSystemWindow(Morph)>>fullBounds
> >                 3.6% {850ms} GLMSystemWindow(Morph)>>doLayoutIn:
> >                   3.6% {850ms} GLMSystemWindow(Morph)>>privateFullBounds
> >                     3.6% {850ms} GLMSystemWindow(Morph)>>submorphBounds
> >                       3.6% {850ms} PanelMorph(Morph)>>fullBounds
> >                         3.6% {850ms} PanelMorph(Morph)>>doLayoutIn:
> >                           3.6% {850ms} PanelMorph(Morph)>>privateFullBounds
> >                             3.6% {850ms} PanelMorph(Morph)>>submorphBounds
> >                               3.6% {850ms} PanelMorph(Morph)>>fullBounds
> >                                 3.6% {850ms} PanelMorph(Morph)>>doLayoutIn:
> >                                   3.6% {850ms} PanelMorph(Morph)>>privateFullBounds
> >                                     3.6% {850ms} PanelMorph(Morph)>>submorphBounds
> >                                       3.6% {850ms} LazyTabGroupMorph(Morph)>>fullBounds
> >                                         3.6% {850ms} LazyTabGroupMorph(Morph)>>doLayoutIn:
> >                                           3.6% {850ms} LazyTabGroupMorph(Morph)>>privateFullBounds
> >                                             3.6% {850ms} LazyTabGroupMorph(Morph)>>submorphBounds
> >                                               3.6% {850ms} PanelMorph(Morph)>>fullBounds
> >                                                 3.6% {850ms} PanelMorph(Morph)>>doLayoutIn:
> >                                                   3.6% {850ms} TableLayout>>layout:in:
> >                                                     3.6% {850ms} TableLayout>>layoutTopToBottom:in:
> >                                                       3.6% {848ms} GLMPluggableTextMorph(Morph)>>layoutInBounds:
> >                                                         3.6% {848ms} GLMPluggableTextMorph(Morph)>>bounds:
> >                                                           3.6% {848ms} GLMPluggableTextMorph(PluggableTextMorph)>>extent:
> >                                                             3.6% {848ms} GLMTextMorphForEditView(TextMorph)>>extent:
> >                                                               3.6% {848ms} GLMTextMorphForEditView(TextMorph)>>installEditorToReplace:
> >                                                                 3.6% {848ms} GLMSmalltalkEditor class(TextEditor class)>>forMorph:
> >                                                                   3.6% {848ms} GLMSmalltalkEditor(TextEditor)>>initWithMorph:
> >                                                                     3.6% {848ms} GLMSmalltalkEditor(TextEditor)>>resetState
> >                                                                       3.6% {848ms} GLMSmalltalkEditor(TextEditor)>>paragraph
> >                                                                         3.6% {848ms} GLMTextMorphForEditView(TextMorphForEditView)>>paragraph
> >                                                                           3.6% {848ms} GLMTextMorphForEditView(TextMorph)>>paragraph
> >                                                                             3.6% {848ms} Paragraph>>compose:style:from:in:
> >                                                                               3.6% {848ms} Paragraph>>composeAll
> >                                                                                 3.6% {848ms} Paragraph>>multiComposeLinesFrom:to:delta:into:priorLines:atY:
> >                                                                                   3.6% {848ms} TextComposer>>multiComposeLinesFrom:to:delta:into:priorLi...extStyle:text:container:wantsColumnBreaks:
> >                                                                                     3.6% {848ms} TextComposer>>composeAllLines
> >                                                                                       3.6% {846ms} TextComposer>>composeOneLine
> >                                                                                         3.6% {846ms} TextComposer>>composeAllRectangles:
> >                                                                                           3.6% {844ms} TextComposer>>composeEachRectangleIn:
> >                                                                                             3.6% {844ms} MultiCompositionScanner>>composeFrom:inRectangle:firstLine:leftSide:rightSide:
> >                                                                                               3.4% {807ms} Text class>>fromString:
> >                                                                                                 3.4% {802ms} primitives
> > **Leaves**
> > 96.5% {22842ms} Text class>>fromString:
> >
> > **Memory**
> >       old                     -4,940,088 bytes
> >       young           +69,144 bytes
> >       used            -4,870,944 bytes
> >       free            -1,051,976 bytes
> >
> > **GCs**
> >       full                    3 totalling 1,428ms (6.0% uptime), avg 476.0ms
> >       incr            16030 totalling 15,162ms (64.0% uptime), avg 1.0ms
> >       tenures         42 (avg 381 GCs/tenure)
> >       root table      0 overflows
> >
> >
>
>
>
>

--
_,.;:~^~:;._,.;:~^~:;._,.;:~^~:;._,.;:~^~:;._,.;:
Alexandre Bergel  http://www.bergel.eu
^~:;._,.;:~^~:;._,.;:~^~:;._,.;:~^~:;._,.;:~^~:;.




Reply | Threaded
Open this post in threaded view
|

Re: [Lsehub-staff] Fwd: Performance of text presentation in Glamour

abergel
For people curious of the visual output:
http://dl.dropbox.com/u/31543901/SmoothScrollingOfALargeText.png

The scrolling is amazing fast...

Cheers,
Alexandre


On Aug 12, 2012, at 12:03 PM, Alexandre Bergel <[hidden email]> wrote:

> No idea if this is of any help.
> Roassal seems to behave well with large files. Just do it the following script:
>
> -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
> "Preambule. It includes the initialization. "
> | rawView view str |
> rawView := ROView new.
> view := ROMondrianViewBuilder view: rawView.
> "enter your script below"
> "-------------"
> "-------------"
>
> str := ''.
> 1 to: 4000 do: [ :nbLine |
> str := str , nbLine printString.
> 3 timesRepeat: [ str := str, ' hello world' ].
> str := str, String cr].
>
> view shape label.
> view node: str.
>
> "-------------"
> "-------------"
> "Below is the initiation of the menu and opening the visualization"
> ROEaselMorphic new populateMenuOn: view.
> view open
> -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
>
> And there is absolutely no optimization. Something that I would like to include soon, is a way to color the text.
>
> Cheers,
> Alexandre
>
>
> On Aug 12, 2012, at 11:22 AM, Usman Bhatti <[hidden email]> wrote:
>
>> Hello people,
>> The issue is getting a bit on our nerves so if someone can look into it during the next week, it'll be great. Me and Guillaume tried to have a look but it goes deep into the morphic layer of pharo and we do not have much time to allocate to this issue.
>> Someone with a better knowledge of morphs can provide a quick fix?
>>
>> Here is a link to the image that contains the scripts in its workspace to analyse the problem.
>> http://dl.dropbox.com/u/11804892/Moose-glam-perf.zip
>>
>> Let me know if you have problem with the image.
>>
>> tx in advance,
>> Usman
>>
>>> ---------- Forwarded message ----------
>>> From: Usman Bhatti <[hidden email]>
>>> Date: Mon, Jul 23, 2012 at 5:36 AM
>>> Subject: Performance of text presentation in Glamour
>>> To: Moose-related development <[hidden email]>
>>>
>>>
>>> Hello all,
>>>
>>> I am working with text presentation in Glamour: the browser is used to show the contents of code files. I noted that the time to display the contents of a file (almost) exponentially grows with the size of the file. So, performing tests on files of three different sizes, I obtain the following response times (using Pharo profiler):
>>> 1000 lines     2s
>>> 2500 lines     11s
>>> 3500 lines     23s.
>>>
>>> So thats quite lot for me where I occasionally have files with 2K lines and I may need to browse their contents rapidly.
>>>
>>> Running my test script with the profiler in Pharo, I get this tree. I see that the message fromString: method is sent to Text class several times and that takes about 96% of the time (in all test cases). Any hints on how to reduce the number of times the method is invoked by glamour?
>>>
>>> tx in advance,
>>> Usman
>>>
>>> Trace with 3.5K lines:
>>>
>>> - 23669 tallies, 23671 msec.
>>>
>>> **Tree**
>>> --------------------------------
>>> Process: (40s)  516161536: nil
>>> --------------------------------
>>> 100.0% {23669ms} GLMTabulator(GLMBrowser)>>openOn:with:
>>>  100.0% {23667ms} GLMTabulator(GLMBrowser)>>openWith:
>>>    100.0% {23667ms} GLMMorphicRenderer>>open:
>>>      91.2% {21577ms} GLMMorphicWindowRenderer class(GLMMorphicWidgetRenderer class)>>render:from:
>>>        |91.2% {21577ms} GLMMorphicWindowRenderer>>render:
>>>        |  72.3% {17122ms} GLMSystemWindow(SystemWindow)>>addMorph:fullFrame:
>>>        |    |72.3% {17122ms} PanelMorph>>adoptPaneColor:
>>>        |    |  72.3% {17120ms} PanelMorph(Morph)>>adoptPaneColor:
>>>        |    |    72.3% {17120ms} PanelMorph>>adoptPaneColor:
>>>        |    |      72.3% {17120ms} PanelMorph(Morph)>>color:
>>>        |    |        72.3% {17120ms} PanelMorph(Morph)>>changed
>>>        |    |          72.3% {17120ms} PanelMorph(Morph)>>privateFullBounds
>>>        |    |            72.3% {17120ms} PanelMorph(Morph)>>submorphBounds
>>>        |    |              72.3% {17120ms} LazyTabGroupMorph(Morph)>>fullBounds
>>>        |    |                72.3% {17120ms} LazyTabGroupMorph(Morph)>>doLayoutIn:
>>>        |    |                  65.1% {15418ms} TableLayout>>layout:in:
>>>        |    |                    |65.1% {15418ms} TableLayout>>layoutTopToBottom:in:
>>>        |    |                    |  65.1% {15418ms} PanelMorph(Morph)>>layoutInBounds:
>>>        |    |                    |    65.1% {15418ms} PanelMorph(Morph)>>bounds:
>>>        |    |                    |      65.1% {15418ms} PanelMorph(Morph)>>position:
>>>        |    |                    |        65.1% {15418ms} PanelMorph(Morph)>>fullBounds
>>>        |    |                    |          65.1% {15418ms} PanelMorph(Morph)>>doLayoutIn:
>>>        |    |                    |            65.1% {15418ms} TableLayout>>layout:in:
>>>        |    |                    |              65.1% {15418ms} TableLayout>>layoutTopToBottom:in:
>>>        |    |                    |                65.1% {15418ms} GLMPluggableTextMorph(Morph)>>layoutInBounds:
>>>        |    |                    |                  65.1% {15418ms} GLMPluggableTextMorph(Morph)>>bounds:
>>>        |    |                    |                    65.1% {15418ms} GLMPluggableTextMorph(PluggableTextMorph)>>extent:
>>>        |    |                    |                      65.1% {15414ms} GLMTextMorphForEditView(TextMorph)>>extent:
>>>        |    |                    |                        65.1% {15414ms} GLMTextMorphForEditView(TextMorph)>>installEditorToReplace:
>>>        |    |                    |                          65.1% {15414ms} GLMSmalltalkEditor class(TextEditor class)>>forMorph:
>>>        |    |                    |                            65.1% {15414ms} GLMSmalltalkEditor(TextEditor)>>initWithMorph:
>>>        |    |                    |                              65.1% {15414ms} GLMSmalltalkEditor(TextEditor)>>resetState
>>>        |    |                    |                                65.1% {15414ms} GLMSmalltalkEditor(TextEditor)>>paragraph
>>>        |    |                    |                                  65.1% {15414ms} GLMTextMorphForEditView(TextMorphForEditView)>>paragraph
>>>        |    |                    |                                    65.1% {15414ms} GLMTextMorphForEditView(TextMorph)>>paragraph
>>>        |    |                    |                                      65.1% {15414ms} Paragraph>>compose:style:from:in:
>>>        |    |                    |                                        65.1% {15414ms} Paragraph>>composeAll
>>>        |    |                    |                                          65.1% {15414ms} Paragraph>>multiComposeLinesFrom:to:delta:into:priorLines:atY:
>>>        |    |                    |                                            65.1% {15414ms} TextComposer>>multiComposeLinesFrom:to:delta:into:priorLi...extStyle:text:container:wantsColumnBreaks:
>>>        |    |                    |                                              65.1% {15414ms} TextComposer>>composeAllLines
>>>        |    |                    |                                                65.1% {15414ms} TextComposer>>composeOneLine
>>>        |    |                    |                                                  65.1% {15398ms} TextComposer>>composeAllRectangles:
>>>        |    |                    |                                                    65.0% {15386ms} TextComposer>>composeEachRectangleIn:
>>>        |    |                    |                                                      64.9% {15369ms} MultiCompositionScanner>>composeFrom:inRectangle:firstLine:leftSide:rightSide:
>>>        |    |                    |                                                        63.9% {15116ms} Text class>>fromString:
>>>        |    |                    |                                                          63.3% {14992ms} primitives
>>>        |    |                  7.2% {1702ms} LazyTabGroupMorph(Morph)>>privateFullBounds
>>>        |    |                    7.2% {1702ms} LazyTabGroupMorph(Morph)>>submorphBounds
>>>        |    |                      7.2% {1702ms} PanelMorph(Morph)>>fullBounds
>>>        |    |                        7.2% {1702ms} PanelMorph(Morph)>>doLayoutIn:
>>>        |    |                          7.2% {1702ms} TableLayout>>layout:in:
>>>        |    |                            7.2% {1700ms} TableLayout>>layoutTopToBottom:in:
>>>        |    |                              7.2% {1700ms} GLMPluggableTextMorph(Morph)>>layoutInBounds:
>>>        |    |                                7.2% {1700ms} GLMPluggableTextMorph(Morph)>>bounds:
>>>        |    |                                  7.2% {1700ms} GLMPluggableTextMorph(PluggableTextMorph)>>extent:
>>>        |    |                                    7.2% {1696ms} GLMTextMorphForEditView(TextMorph)>>extent:
>>>        |    |                                      7.2% {1696ms} GLMTextMorphForEditView(TextMorph)>>installEditorToReplace:
>>>        |    |                                        7.2% {1696ms} GLMSmalltalkEditor class(TextEditor class)>>forMorph:
>>>        |    |                                          7.2% {1696ms} GLMSmalltalkEditor(TextEditor)>>initWithMorph:
>>>        |    |                                            7.2% {1696ms} GLMSmalltalkEditor(TextEditor)>>resetState
>>>        |    |                                              7.2% {1696ms} GLMSmalltalkEditor(TextEditor)>>paragraph
>>>        |    |                                                7.2% {1696ms} GLMTextMorphForEditView(TextMorphForEditView)>>paragraph
>>>        |    |                                                  7.2% {1696ms} GLMTextMorphForEditView(TextMorph)>>paragraph
>>>        |    |                                                    7.2% {1696ms} Paragraph>>compose:style:from:in:
>>>        |    |                                                      7.2% {1696ms} Paragraph>>composeAll
>>>        |    |                                                        7.2% {1696ms} Paragraph>>multiComposeLinesFrom:to:delta:into:priorLines:atY:
>>>        |    |                                                          7.2% {1696ms} TextComposer>>multiComposeLinesFrom:to:delta:into:priorLi...extStyle:text:container:wantsColumnBreaks:
>>>        |    |                                                            7.2% {1696ms} TextComposer>>composeAllLines
>>>        |    |                                                              7.2% {1696ms} TextComposer>>composeOneLine
>>>        |    |                                                                7.2% {1696ms} TextComposer>>composeAllRectangles:
>>>        |    |                                                                  7.2% {1694ms} TextComposer>>composeEachRectangleIn:
>>>        |    |                                                                    7.1% {1692ms} MultiCompositionScanner>>composeFrom:inRectangle:firstLine:leftSide:rightSide:
>>>        |    |                                                                      6.9% {1629ms} Text class>>fromString:
>>>        |    |                                                                        6.8% {1621ms} primitives
>>>        |  18.8% {4445ms} GLMMorphicWindowRenderer(GLMMorphicWidgetRenderer)>>renderObject:
>>>        |    18.8% {4445ms} GLMMorphicRenderer(GLMRenderer)>>render:
>>>        |      18.8% {4445ms} GLMTabulator>>renderGlamorouslyOn:
>>>        |        18.8% {4445ms} GLMMorphicRenderer>>renderTabulator:
>>>        |          18.8% {4445ms} GLMMorphicTabulatorRenderer class(GLMMorphicWidgetRenderer class)>>render:from:
>>>        |            18.8% {4445ms} GLMMorphicTabulatorRenderer>>render:
>>>        |              18.8% {4445ms} GLMMorphicTabulatorRenderer>>renderCustomRow:ofPane:inUI:inBrowser:
>>>        |                18.8% {4445ms} GLMMorphicTabulatorRenderer(GLMMorphicWidgetRenderer)>>renderObject:
>>>        |                  18.8% {4445ms} GLMMorphicRenderer(GLMRenderer)>>render:
>>>        |                    18.8% {4445ms} GLMPane>>renderGlamorouslyOn:
>>>        |                      18.8% {4445ms} GLMMorphicRenderer>>renderPane:
>>>        |                        18.8% {4445ms} GLMMorphicPaneRenderer class(GLMMorphicWidgetRenderer class)>>render:from:
>>>        |                          18.8% {4445ms} GLMMorphicPaneRenderer>>render:
>>>        |                            18.8% {4445ms} GLMMorphicPaneRenderer>>renderContainerFor:
>>>        |                              18.8% {4443ms} GLMMorphicPaneRenderer(GLMMorphicWidgetRenderer)>>renderWithTitleOrNil:
>>>        |                                18.8% {4443ms} GLMMorphicPaneRenderer(GLMMorphicWidgetRenderer)>>renderObject:
>>>        |                                  18.8% {4443ms} GLMMorphicRenderer(GLMRenderer)>>render:
>>>        |                                    18.8% {4443ms} GLMCompositePresentation>>renderGlamorouslyOn:
>>>        |                                      18.8% {4443ms} GLMTabbedArrangement>>renderGlamorouslyOn:
>>>        |                                        18.8% {4443ms} GLMMorphicRenderer>>renderTabbedCompositePresentation:
>>>        |                                          18.8% {4443ms} GLMMorphicTabbedRenderer class(GLMMorphicWidgetRenderer class)>>render:from:
>>>        |                                            18.8% {4443ms} GLMMorphicTabbedRenderer>>render:
>>>        |                                              18.8% {4443ms} GLMMorphicTabbedRenderer(GLMMorphicWidgetRenderer)>>renderWithTitleOrNil:
>>>        |                                                18.8% {4441ms} GLMMorphicTabbedRenderer(GLMMorphicWidgetRenderer)>>renderObject:
>>>        |                                                  18.8% {4441ms} GLMMorphicRenderer(GLMRenderer)>>render:
>>>        |                                                    18.8% {4441ms} GLMTextPresentation>>renderGlamorouslyOn:
>>>        |                                                      18.8% {4441ms} GLMMorphicRenderer>>renderTextPresentation:
>>>        |                                                        18.8% {4441ms} GLMMorphicTextRenderer class(GLMMorphicWidgetRenderer class)>>render:from:
>>>        |                                                          18.8% {4441ms} GLMMorphicTextRenderer>>render:
>>>        |                                                            18.8% {4441ms} GLMMorphicTextRenderer>>textMorphForModel:
>>>        |                                                              18.8% {4441ms} GLMPluggableTextMorph class(PluggableTextMorph class)>>on:text:accept:readSelection:menu:
>>>        |                                                                18.7% {4437ms} GLMPluggableTextMorph(PluggableTextMorph)>>on:text:accept:readSelection:menu:
>>>        |                                                                  18.7% {4437ms} GLMPluggableTextMorph(PluggableTextMorph)>>setText:
>>>        |                                                                    18.7% {4437ms} GLMPluggableTextMorph(PluggableTextMorph)>>setTextBasic:
>>>        |                                                                      10.2% {2407ms} GLMTextMorphForEditView(TextMorph)>>contents:wrappedTo:
>>>        |                                                                        |10.2% {2407ms} GLMTextMorphForEditView(TextMorph)>>newContents:
>>>        |                                                                        |  10.2% {2407ms} GLMTextMorphForEditView(TextMorphForEditView)>>paragraph
>>>        |                                                                        |    10.2% {2407ms} GLMTextMorphForEditView(TextMorph)>>paragraph
>>>        |                                                                        |      10.2% {2407ms} Paragraph>>compose:style:from:in:
>>>        |                                                                        |        10.2% {2407ms} Paragraph>>composeAll
>>>        |                                                                        |          10.2% {2407ms} Paragraph>>multiComposeLinesFrom:to:delta:into:priorLines:atY:
>>>        |                                                                        |            10.2% {2407ms} TextComposer>>multiComposeLinesFrom:to:delta:into:priorLi...extStyle:text:container:wantsColumnBreaks:
>>>        |                                                                        |              10.2% {2407ms} TextComposer>>composeAllLines
>>>        |                                                                        |                10.2% {2407ms} TextComposer>>composeOneLine
>>>        |                                                                        |                  10.2% {2403ms} TextComposer>>composeAllRectangles:
>>>        |                                                                        |                    10.1% {2401ms} TextComposer>>composeEachRectangleIn:
>>>        |                                                                        |                      10.1% {2397ms} MultiCompositionScanner>>composeFrom:inRectangle:firstLine:leftSide:rightSide:
>>>        |                                                                        |                        9.8% {2321ms} Text class>>fromString:
>>>        |                                                                        |                          9.7% {2299ms} primitives
>>>        |                                                                      8.6% {2030ms} GLMPluggableTextMorph(ScrollPane)>>setScrollDeltas
>>>        |                                                                        8.6% {2028ms} GLMPluggableTextMorph(ScrollPane)>>hideOrShowScrollBars
>>>        |                                                                          8.6% {2028ms} GLMPluggableTextMorph(ScrollPane)>>vHideOrShowScrollBar
>>>        |                                                                            8.6% {2028ms} GLMPluggableTextMorph(ScrollPane)>>vShowScrollBar
>>>        |                                                                              8.6% {2028ms} GLMPluggableTextMorph(PluggableTextMorph)>>resetExtent
>>>        |                                                                                8.6% {2026ms} GLMPluggableTextMorph(PluggableTextMorph)>>extent:
>>>        |                                                                                  8.6% {2026ms} GLMTextMorphForEditView(TextMorph)>>extent:
>>>        |                                                                                    8.6% {2026ms} GLMTextMorphForEditView(TextMorph)>>installEditorToReplace:
>>>        |                                                                                      8.6% {2026ms} GLMSmalltalkEditor class(TextEditor class)>>forMorph:
>>>        |                                                                                        8.6% {2026ms} GLMSmalltalkEditor(TextEditor)>>initWithMorph:
>>>        |                                                                                          8.6% {2026ms} GLMSmalltalkEditor(TextEditor)>>resetState
>>>        |                                                                                            8.6% {2026ms} GLMSmalltalkEditor(TextEditor)>>paragraph
>>>        |                                                                                              8.6% {2026ms} GLMTextMorphForEditView(TextMorphForEditView)>>paragraph
>>>        |                                                                                                8.6% {2026ms} GLMTextMorphForEditView(TextMorph)>>paragraph
>>>        |                                                                                                  8.6% {2026ms} Paragraph>>compose:style:from:in:
>>>        |                                                                                                    8.6% {2026ms} Paragraph>>composeAll
>>>        |                                                                                                      8.6% {2026ms} Paragraph>>multiComposeLinesFrom:to:delta:into:priorLines:atY:
>>>        |                                                                                                        8.6% {2026ms} TextComposer>>multiComposeLinesFrom:to:delta:into:priorLi...extStyle:text:container:wantsColumnBreaks:
>>>        |                                                                                                          8.6% {2026ms} TextComposer>>composeAllLines
>>>        |                                                                                                            8.6% {2026ms} TextComposer>>composeOneLine
>>>        |                                                                                                              8.6% {2024ms} TextComposer>>composeAllRectangles:
>>>        |                                                                                                                8.5% {2020ms} TextComposer>>composeEachRectangleIn:
>>>        |                                                                                                                  8.5% {2016ms} MultiCompositionScanner>>composeFrom:inRectangle:firstLine:leftSide:rightSide:
>>>        |                                                                                                                    8.3% {1956ms} Text class>>fromString:
>>>        |                                                                                                                      8.2% {1950ms} primitives
>>>      8.8% {2090ms} GLMSystemWindow(Morph)>>openInWorld
>>>        8.8% {2090ms} GLMSystemWindow(SystemWindow)>>openInWorld:
>>>          8.8% {2079ms} GLMSystemWindow(Morph)>>bounds:
>>>            5.2% {1229ms} GLMSystemWindow(SystemWindow)>>position:
>>>              |5.2% {1229ms} GLMSystemWindow(Morph)>>position:
>>>              |  5.2% {1229ms} GLMSystemWindow(Morph)>>fullBounds
>>>              |    5.2% {1229ms} GLMSystemWindow(Morph)>>doLayoutIn:
>>>              |      5.2% {1229ms} GLMSystemWindow(Morph)>>privateFullBounds
>>>              |        5.2% {1229ms} GLMSystemWindow(Morph)>>submorphBounds
>>>              |          5.2% {1229ms} PanelMorph(Morph)>>fullBounds
>>>              |            5.2% {1229ms} PanelMorph(Morph)>>doLayoutIn:
>>>              |              5.2% {1229ms} PanelMorph(Morph)>>privateFullBounds
>>>              |                5.2% {1229ms} PanelMorph(Morph)>>submorphBounds
>>>              |                  5.2% {1229ms} PanelMorph(Morph)>>fullBounds
>>>              |                    5.2% {1229ms} PanelMorph(Morph)>>doLayoutIn:
>>>              |                      5.2% {1229ms} PanelMorph(Morph)>>privateFullBounds
>>>              |                        5.2% {1229ms} PanelMorph(Morph)>>submorphBounds
>>>              |                          5.2% {1229ms} LazyTabGroupMorph(Morph)>>fullBounds
>>>              |                            5.2% {1229ms} LazyTabGroupMorph(Morph)>>doLayoutIn:
>>>              |                              5.2% {1229ms} LazyTabGroupMorph(Morph)>>privateFullBounds
>>>              |                                5.2% {1229ms} LazyTabGroupMorph(Morph)>>submorphBounds
>>>              |                                  5.2% {1229ms} PanelMorph(Morph)>>fullBounds
>>>              |                                    5.2% {1229ms} PanelMorph(Morph)>>doLayoutIn:
>>>              |                                      5.2% {1229ms} TableLayout>>layout:in:
>>>              |                                        5.2% {1227ms} TableLayout>>layoutTopToBottom:in:
>>>              |                                          5.2% {1227ms} GLMPluggableTextMorph(Morph)>>layoutInBounds:
>>>              |                                            5.2% {1227ms} GLMPluggableTextMorph(Morph)>>bounds:
>>>              |                                              5.2% {1227ms} GLMPluggableTextMorph(PluggableTextMorph)>>extent:
>>>              |                                                5.2% {1225ms} GLMTextMorphForEditView(TextMorph)>>extent:
>>>              |                                                  5.2% {1225ms} GLMTextMorphForEditView(TextMorph)>>installEditorToReplace:
>>>              |                                                    5.2% {1225ms} GLMSmalltalkEditor class(TextEditor class)>>forMorph:
>>>              |                                                      5.2% {1225ms} GLMSmalltalkEditor(TextEditor)>>initWithMorph:
>>>              |                                                        5.2% {1225ms} GLMSmalltalkEditor(TextEditor)>>resetState
>>>              |                                                          5.2% {1225ms} GLMSmalltalkEditor(TextEditor)>>paragraph
>>>              |                                                            5.2% {1225ms} GLMTextMorphForEditView(TextMorphForEditView)>>paragraph
>>>              |                                                              5.2% {1225ms} GLMTextMorphForEditView(TextMorph)>>paragraph
>>>              |                                                                5.2% {1225ms} Paragraph>>compose:style:from:in:
>>>              |                                                                  5.2% {1225ms} Paragraph>>composeAll
>>>              |                                                                    5.2% {1225ms} Paragraph>>multiComposeLinesFrom:to:delta:into:priorLines:atY:
>>>              |                                                                      5.2% {1225ms} TextComposer>>multiComposeLinesFrom:to:delta:into:priorLi...extStyle:text:container:wantsColumnBreaks:
>>>              |                                                                        5.2% {1225ms} TextComposer>>composeAllLines
>>>              |                                                                          5.2% {1225ms} TextComposer>>composeOneLine
>>>              |                                                                            5.2% {1225ms} TextComposer>>composeAllRectangles:
>>>              |                                                                              5.2% {1225ms} TextComposer>>composeEachRectangleIn:
>>>              |                                                                                5.2% {1225ms} MultiCompositionScanner>>composeFrom:inRectangle:firstLine:leftSide:rightSide:
>>>              |                                                                                  5.0% {1187ms} Text class>>fromString:
>>>              |                                                                                    5.0% {1177ms} primitives
>>>            3.6% {850ms} GLMSystemWindow>>extent:
>>>              3.6% {850ms} GLMSystemWindow(Morph)>>fullBounds
>>>                3.6% {850ms} GLMSystemWindow(Morph)>>doLayoutIn:
>>>                  3.6% {850ms} GLMSystemWindow(Morph)>>privateFullBounds
>>>                    3.6% {850ms} GLMSystemWindow(Morph)>>submorphBounds
>>>                      3.6% {850ms} PanelMorph(Morph)>>fullBounds
>>>                        3.6% {850ms} PanelMorph(Morph)>>doLayoutIn:
>>>                          3.6% {850ms} PanelMorph(Morph)>>privateFullBounds
>>>                            3.6% {850ms} PanelMorph(Morph)>>submorphBounds
>>>                              3.6% {850ms} PanelMorph(Morph)>>fullBounds
>>>                                3.6% {850ms} PanelMorph(Morph)>>doLayoutIn:
>>>                                  3.6% {850ms} PanelMorph(Morph)>>privateFullBounds
>>>                                    3.6% {850ms} PanelMorph(Morph)>>submorphBounds
>>>                                      3.6% {850ms} LazyTabGroupMorph(Morph)>>fullBounds
>>>                                        3.6% {850ms} LazyTabGroupMorph(Morph)>>doLayoutIn:
>>>                                          3.6% {850ms} LazyTabGroupMorph(Morph)>>privateFullBounds
>>>                                            3.6% {850ms} LazyTabGroupMorph(Morph)>>submorphBounds
>>>                                              3.6% {850ms} PanelMorph(Morph)>>fullBounds
>>>                                                3.6% {850ms} PanelMorph(Morph)>>doLayoutIn:
>>>                                                  3.6% {850ms} TableLayout>>layout:in:
>>>                                                    3.6% {850ms} TableLayout>>layoutTopToBottom:in:
>>>                                                      3.6% {848ms} GLMPluggableTextMorph(Morph)>>layoutInBounds:
>>>                                                        3.6% {848ms} GLMPluggableTextMorph(Morph)>>bounds:
>>>                                                          3.6% {848ms} GLMPluggableTextMorph(PluggableTextMorph)>>extent:
>>>                                                            3.6% {848ms} GLMTextMorphForEditView(TextMorph)>>extent:
>>>                                                              3.6% {848ms} GLMTextMorphForEditView(TextMorph)>>installEditorToReplace:
>>>                                                                3.6% {848ms} GLMSmalltalkEditor class(TextEditor class)>>forMorph:
>>>                                                                  3.6% {848ms} GLMSmalltalkEditor(TextEditor)>>initWithMorph:
>>>                                                                    3.6% {848ms} GLMSmalltalkEditor(TextEditor)>>resetState
>>>                                                                      3.6% {848ms} GLMSmalltalkEditor(TextEditor)>>paragraph
>>>                                                                        3.6% {848ms} GLMTextMorphForEditView(TextMorphForEditView)>>paragraph
>>>                                                                          3.6% {848ms} GLMTextMorphForEditView(TextMorph)>>paragraph
>>>                                                                            3.6% {848ms} Paragraph>>compose:style:from:in:
>>>                                                                              3.6% {848ms} Paragraph>>composeAll
>>>                                                                                3.6% {848ms} Paragraph>>multiComposeLinesFrom:to:delta:into:priorLines:atY:
>>>                                                                                  3.6% {848ms} TextComposer>>multiComposeLinesFrom:to:delta:into:priorLi...extStyle:text:container:wantsColumnBreaks:
>>>                                                                                    3.6% {848ms} TextComposer>>composeAllLines
>>>                                                                                      3.6% {846ms} TextComposer>>composeOneLine
>>>                                                                                        3.6% {846ms} TextComposer>>composeAllRectangles:
>>>                                                                                          3.6% {844ms} TextComposer>>composeEachRectangleIn:
>>>                                                                                            3.6% {844ms} MultiCompositionScanner>>composeFrom:inRectangle:firstLine:leftSide:rightSide:
>>>                                                                                              3.4% {807ms} Text class>>fromString:
>>>                                                                                                3.4% {802ms} primitives
>>> **Leaves**
>>> 96.5% {22842ms} Text class>>fromString:
>>>
>>> **Memory**
>>>      old                     -4,940,088 bytes
>>>      young           +69,144 bytes
>>>      used            -4,870,944 bytes
>>>      free            -1,051,976 bytes
>>>
>>> **GCs**
>>>      full                    3 totalling 1,428ms (6.0% uptime), avg 476.0ms
>>>      incr            16030 totalling 15,162ms (64.0% uptime), avg 1.0ms
>>>      tenures         42 (avg 381 GCs/tenure)
>>>      root table      0 overflows
>>>
>>>
>>
>>
>>
>>
>
> --
> _,.;:~^~:;._,.;:~^~:;._,.;:~^~:;._,.;:~^~:;._,.;:
> Alexandre Bergel  http://www.bergel.eu
> ^~:;._,.;:~^~:;._,.;:~^~:;._,.;:~^~:;._,.;:~^~:;.
>
>
>
>

--
_,.;:~^~:;._,.;:~^~:;._,.;:~^~:;._,.;:~^~:;._,.;:
Alexandre Bergel  http://www.bergel.eu
^~:;._,.;:~^~:;._,.;:~^~:;._,.;:~^~:;._,.;:~^~:;.