Pharo-dev
By thread
pharo-dev@lists.pharo.org
By month
Messages by month
- ----- 2026 -----
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2025 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2024 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2023 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2022 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2021 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2020 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2019 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2018 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2017 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2016 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2015 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2014 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2013 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2012 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2011 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2010 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2009 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2008 -----
- December
- November
- October
- September
- August
- July
- June
- May
August 2012
- 91 participants
- 803 messages
Re: [Pharo-project] [Lsehub-staff] Fwd: Performance of text presentation in Glamour
by Alexandre Bergel
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 <usman.bhatti(a)gmail.com> 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 <usman.bhatti(a)gmail.com>
> > Date: Mon, Jul 23, 2012 at 5:36 AM
> > Subject: Performance of text presentation in Glamour
> > To: Moose-related development <moose-dev(a)iam.unibe.ch>
> >
> >
> > 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
^~:;._,.;:~^~:;._,.;:~^~:;._,.;:~^~:;._,.;:~^~:;.
Aug. 12, 2012
[Pharo-project] Fwd: [Lsehub-staff] Fwd: Performance of text presentation in Glamour
by 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.
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 <usman.bhatti(a)gmail.com>
> > Date: Mon, Jul 23, 2012 at 5:36 AM
> > Subject: Performance of text presentation in Glamour
> > To: Moose-related development <moose-dev(a)iam.unibe.ch>
> >
> >
> > 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
> >
> >
>
>
>
Aug. 12, 2012
Re: [Pharo-project] New Adventure.
by Igor Stasenko
On 11 August 2012 22:38, Diogenes Moreira <diogenes.moreira(a)gmail.com> wrote:
> Hi folks, I wanna tell you my new adventure, that i'll start today.
>
> I'll be try compile and fix the VM and FFI for run on 64 bits systems,
>
Cool.
> the idea is run dbxtalk over a Windows 2008 server..
>
> Any Clue o Tip are welcome.
>
Sure, i can help with what i can :)
> Best D,
>
>
> http://about.me/diogenes.moreira
>
--
Best regards,
Igor Stasenko.
Aug. 12, 2012
[Pharo-project] New Adventure.
by Diogenes Moreira
Hi folks, I wanna tell you my new adventure, that i'll start today.
I'll be try compile and fix the VM and FFI for run on 64 bits systems,
the idea is run dbxtalk over a Windows 2008 server..
Any Clue o Tip are welcome.
Best D,
http://about.me/diogenes.moreira
Aug. 11, 2012
Re: [Pharo-project] 'self halt' safety net
by Sean P. DeNigris
Igor Stasenko wrote
>
> in pharo you can use
> Halt now.
> which is imo the right way to do it..
>
> but i so get used to type 'self halt' .. its hard to get rid of bad
> habits. :)
>
One little carrot to use "Halt now." is that it opens the debugger on the
method with the halt in it instead of on Object>>halt, where you go to be
punished for using "self halt" ;) I just found that out because after
fighting to remove "self halt", I didn't get rid of my bad habit either, ha
ha
- S
--
View this message in context: http://forum.world.st/self-halt-safety-net-tp4643012p4643843.html
Sent from the Pharo Smalltalk mailing list archive at Nabble.com.
Aug. 11, 2012
[Pharo-project] 4 days left!! - ESUG 2012 9th Innovation Technology Awards - Reminder
by jdelgado
[Sorry if you receive this message more than once]
ESUG 2012, 9th Innovation Technology Awards
REMINDER: 4 days to deadline!!
Have you written innovative Smalltalk? The developers of any Smalltalk-based
software can enter by submitting a 3-5min video of their software. Entrants
demo their systems in a session at the end of Monday August 27th 2012, after
which the conference attendees vote. (A vote consists in providing a sorted
list of 3 preferred pieces of software.)
The top 3 teams with the most innovative software will receive,
respectively, 500 Euros, 300 Euros and 200 Euros. The results are announced
in the Awards ceremony that is held during the social event.
Applicants should provide the following information on the conference
registration server. Once you have registered your personal info, an
'Awards' menu allows submitting your software. You can provide this
information when you first register, or login again later and update your
details. The registration server will open soon. You can start preparing
your software right now though.
Info to provide:
Name of the software
Licence information (free, shareware, or commercial)
Name of the Smalltalk dialect used
Name, Affiliation and Country of developers
Besides, it would be great if the submission could include:
URL for a video (3-5 min) showing a screencast / demo of the software
URL for downloading the software or at least a runnable demo
Deadline: August 15
Any Smalltalker can apply (students, companies, ...). The presented piece of
code/software should be written in Smalltalk or directly support Smalltalk
(e.g. Smalltalk VM). All Smalltalk dialects are accepted. The applicant
should be "strongly related" to the presented code, be it as an author, as
owner of the copyright/copyleft, or as an official representative of the
copyright/copyleft owner.
Bests,
Jordi
--
View this message in context: http://forum.world.st/4-days-left-ESUG-2012-9th-Innovation-Technology-Award…
Sent from the Pharo Smalltalk mailing list archive at Nabble.com.
Aug. 11, 2012
Re: [Pharo-project] FileDirectory <> FSFileSystem
by Dale Henrichs
Cami,
Well, I've been able to use the existing FS implementation to get to the point where I am passing all of my unit tests in Pharo-2.0 without FileDirectory ...
I had to hack in a couple of places to get around the deficiencies of FS on Pharo-1.4 and I've yet to port the changes to the other platforms, so I'm not quite out of the woods, but I am at the point where I will start doing development in Pharo-2.0 using the FileTree repositories.
It will be nice to be able to use FS in Pharo-1.4, moving forward...
Thanks for your help,
Dale
----- Original Message -----
| From: "Camillo Bruni" <camillobruni(a)gmail.com>
| To: Pharo-project(a)lists.gforge.inria.fr
| Sent: Friday, August 10, 2012 4:50:13 PM
| Subject: Re: [Pharo-project] FileDirectory <> FSFileSystem
|
| hi dale,
|
| digesting your word flow right now :P...
| I don't think I will touch a computer this weekend so I probably take
| a look at
| it on monday to make the two things work...
|
| just to clarify what I intend to do:
| - update FS in 1.4 so we have all the "modern" features
| - provide an optionally loadable FileDirectory stub in 2.0
|
| I hope like that migration should become easier, since you can simply
| load code in 2.0
| and slowly start calling FileReference methods on the FileDirectory
| entries.
| My FileDirectory wrapper in 2.0 is simply a subclass of
| FileReference, being polymorphic
| here, I think, should really ease the migration task.
|
| best
| cami
|
| On 2012-08-10, at 19:15, Dale Henrichs <dhenrich(a)vmware.com> wrote:
|
| > Cami,
| >
| > turns out that #readStreamDo: was added for FileTree in Pharo1.x so
| > adding it doesn't need to be part of the base ...
| >
| > #name would then be the only compatibility method ... I can add
| > that one as an extension, too.
| >
| > Dale
| >
| > ----- Original Message -----
| > | From: "Dale Henrichs" <dhenrich(a)vmware.com>
| > | To: Pharo-project(a)lists.gforge.inria.fr
| > | Sent: Friday, August 10, 2012 8:39:18 AM
| > | Subject: Re: [Pharo-project] FileDirectory <> FSFileSystem
| > |
| > | Cami,
| > |
| > | Despite not being able to load your working version in Pharo-1.4
| > | I am
| > | making progress:). I've created a Grease-like layer for FileTree
| > | that papers over the differences between FileDirectory and
| > | FileSystem (there is no common protocol between the two at
| > | all:)...
| > |
| > | I am now porting the FileSystemDirectoryEntry/DirectoryEntry code
| > | and
| > | it would be _extremely convenient_ if FileSystemDirectoryEntry
| > | were
| > | more compatible with DirectoryEntry. In my case the two methods:
| > | #name and #readStreamDo: would save me a ton of work.
| > |
| > | I can add them as extension methods for FileTree (and will for
| > | the
| > | time being). #readStreamDo: is just plain missing and #name is an
| > | obvious concession to portability...
| > |
| > | Let me know whether you think these two method will be included
| > | in
| > | Pharo-2.0 or not.
| > |
| > | Dale
| > |
| > | ----- Original Message -----
| > | | From: "Camillo Bruni" <camillobruni(a)gmail.com>
| > | | To: Pharo-project(a)lists.gforge.inria.fr
| > | | Sent: Friday, August 10, 2012 1:56:37 AM
| > | | Subject: Re: [Pharo-project] FileDirectory <> FSFileSystem
| > | |
| > | |
| > | | On 2012-08-10, at 01:10, Dale Henrichs <dhenrich(a)vmware.com>
| > | | wrote:
| > | |
| > | | > Cami,
| > | | >
| > | | > If you can let me know where to find your new FS code, I can
| > | | > take
| > | | > it for a spin ...
| > | | >
| > | | > I've already spent time inventing a Grease-like layer that I
| > | | > can
| > | | > use with FileDirectory and FileSystem, but if your
| > | | > FileDirectory
| > | | > will be available and will fulfill my needs I can toss out
| > | | > the
| > | | > work I've done so far ...
| > | | >
| > | | > I just ask that if you make up your minds once and for all
| > | | > here
| > | | > ...
| > | | > I don't want to port FileTree to Pharo-2.0 more than twice
| > | | > (as I
| > | | > will tossing the work that I've put into porting over the
| > | | > last
| > | | > two
| > | | > days...)
| > | | >
| > | | > Dale
| > | |
| > | | my preliminary version is here:
| > | |
| > | | http://smalltalkhub.com/mc/dh83/fisleg/main
| > | |
| > | | I didn't have time to test it though ;)
| > | |
| > |
| > |
| >
|
|
|
Aug. 11, 2012
Re: [Pharo-project] FileDirectory <> FSFileSystem
by Camillo Bruni
hi dale,
digesting your word flow right now :P...
I don't think I will touch a computer this weekend so I probably take a look at
it on monday to make the two things work...
just to clarify what I intend to do:
- update FS in 1.4 so we have all the "modern" features
- provide an optionally loadable FileDirectory stub in 2.0
I hope like that migration should become easier, since you can simply load code in 2.0
and slowly start calling FileReference methods on the FileDirectory entries.
My FileDirectory wrapper in 2.0 is simply a subclass of FileReference, being polymorphic
here, I think, should really ease the migration task.
best
cami
On 2012-08-10, at 19:15, Dale Henrichs <dhenrich(a)vmware.com> wrote:
> Cami,
>
> turns out that #readStreamDo: was added for FileTree in Pharo1.x so adding it doesn't need to be part of the base ...
>
> #name would then be the only compatibility method ... I can add that one as an extension, too.
>
> Dale
>
> ----- Original Message -----
> | From: "Dale Henrichs" <dhenrich(a)vmware.com>
> | To: Pharo-project(a)lists.gforge.inria.fr
> | Sent: Friday, August 10, 2012 8:39:18 AM
> | Subject: Re: [Pharo-project] FileDirectory <> FSFileSystem
> |
> | Cami,
> |
> | Despite not being able to load your working version in Pharo-1.4 I am
> | making progress:). I've created a Grease-like layer for FileTree
> | that papers over the differences between FileDirectory and
> | FileSystem (there is no common protocol between the two at all:)...
> |
> | I am now porting the FileSystemDirectoryEntry/DirectoryEntry code and
> | it would be _extremely convenient_ if FileSystemDirectoryEntry were
> | more compatible with DirectoryEntry. In my case the two methods:
> | #name and #readStreamDo: would save me a ton of work.
> |
> | I can add them as extension methods for FileTree (and will for the
> | time being). #readStreamDo: is just plain missing and #name is an
> | obvious concession to portability...
> |
> | Let me know whether you think these two method will be included in
> | Pharo-2.0 or not.
> |
> | Dale
> |
> | ----- Original Message -----
> | | From: "Camillo Bruni" <camillobruni(a)gmail.com>
> | | To: Pharo-project(a)lists.gforge.inria.fr
> | | Sent: Friday, August 10, 2012 1:56:37 AM
> | | Subject: Re: [Pharo-project] FileDirectory <> FSFileSystem
> | |
> | |
> | | On 2012-08-10, at 01:10, Dale Henrichs <dhenrich(a)vmware.com> wrote:
> | |
> | | > Cami,
> | | >
> | | > If you can let me know where to find your new FS code, I can take
> | | > it for a spin ...
> | | >
> | | > I've already spent time inventing a Grease-like layer that I can
> | | > use with FileDirectory and FileSystem, but if your FileDirectory
> | | > will be available and will fulfill my needs I can toss out the
> | | > work I've done so far ...
> | | >
> | | > I just ask that if you make up your minds once and for all here
> | | > ...
> | | > I don't want to port FileTree to Pharo-2.0 more than twice (as I
> | | > will tossing the work that I've put into porting over the last
> | | > two
> | | > days...)
> | | >
> | | > Dale
> | |
> | | my preliminary version is here:
> | |
> | | http://smalltalkhub.com/mc/dh83/fisleg/main
> | |
> | | I didn't have time to test it though ;)
> | |
> |
> |
>
Aug. 10, 2012
Re: [Pharo-project] FileDirectory <> FSFileSystem
by Dale Henrichs
Cami,
turns out that #readStreamDo: was added for FileTree in Pharo1.x so adding it doesn't need to be part of the base ...
#name would then be the only compatibility method ... I can add that one as an extension, too.
Dale
----- Original Message -----
| From: "Dale Henrichs" <dhenrich(a)vmware.com>
| To: Pharo-project(a)lists.gforge.inria.fr
| Sent: Friday, August 10, 2012 8:39:18 AM
| Subject: Re: [Pharo-project] FileDirectory <> FSFileSystem
|
| Cami,
|
| Despite not being able to load your working version in Pharo-1.4 I am
| making progress:). I've created a Grease-like layer for FileTree
| that papers over the differences between FileDirectory and
| FileSystem (there is no common protocol between the two at all:)...
|
| I am now porting the FileSystemDirectoryEntry/DirectoryEntry code and
| it would be _extremely convenient_ if FileSystemDirectoryEntry were
| more compatible with DirectoryEntry. In my case the two methods:
| #name and #readStreamDo: would save me a ton of work.
|
| I can add them as extension methods for FileTree (and will for the
| time being). #readStreamDo: is just plain missing and #name is an
| obvious concession to portability...
|
| Let me know whether you think these two method will be included in
| Pharo-2.0 or not.
|
| Dale
|
| ----- Original Message -----
| | From: "Camillo Bruni" <camillobruni(a)gmail.com>
| | To: Pharo-project(a)lists.gforge.inria.fr
| | Sent: Friday, August 10, 2012 1:56:37 AM
| | Subject: Re: [Pharo-project] FileDirectory <> FSFileSystem
| |
| |
| | On 2012-08-10, at 01:10, Dale Henrichs <dhenrich(a)vmware.com> wrote:
| |
| | > Cami,
| | >
| | > If you can let me know where to find your new FS code, I can take
| | > it for a spin ...
| | >
| | > I've already spent time inventing a Grease-like layer that I can
| | > use with FileDirectory and FileSystem, but if your FileDirectory
| | > will be available and will fulfill my needs I can toss out the
| | > work I've done so far ...
| | >
| | > I just ask that if you make up your minds once and for all here
| | > ...
| | > I don't want to port FileTree to Pharo-2.0 more than twice (as I
| | > will tossing the work that I've put into porting over the last
| | > two
| | > days...)
| | >
| | > Dale
| |
| | my preliminary version is here:
| |
| | http://smalltalkhub.com/mc/dh83/fisleg/main
| |
| | I didn't have time to test it though ;)
| |
|
|
Aug. 10, 2012
[Pharo-project] [update 2.0] #20250
by Esteban Lorenzano
20250
-----
Issue 6503: ScriptLoader deletePackage: does not say what it says
http://code.google.com/p/pharo/issues/detail?id=6503
Issue 6542: unload package Polymorph
http://code.google.com/p/pharo/issues/detail?id=6542
Issue 6544: [ENH]: SystemPreferences - Notify Errors
http://code.google.com/p/pharo/issues/detail?id=6544
Issue 6545: There are no accesses to commandLine in CommandLineHandlerTest
http://code.google.com/p/pharo/issues/detail?id=6545
Aug. 10, 2012