[Pharo-dev] Small text composition bench

Nicolas Cellier nicolas.cellier.aka.nice at gmail.com
Fri Oct 11 16:28:30 EDT 2013


OK Igor,
I loaded ConfigurationOfTxText and I understand what you say:
- TxText spend more time in composing layout because it records each and
every TxSpanInterval
- this will later accelerate display, because no scanning is required at
display time
On the base that you compose once and display many, this is a Memory/CPU
trading that would not have been a good idea the 70's (birth of
CharacterScanner family), but is now fair.

Even if that does not make much sense, composition (layout building) can be
measured with this kind of mini bench:

| text |
text := Compiler evaluate: (FileSystem workingDirectory parent parent
parent / 'text.st' ) readStream contentsOfEntireFile .
MessageTally spyOn: [[100 timesRepeat: [(Paragraph new)
        compose: text
        style: TextStyle default copy
        from: 1
        in: ( 0 at 0 corner: 569 at 9999999)]] timeToRun ].
MessageTally spyOn: [ 100 timesRepeat: [| m |
    m := TxTextMorph new.
    m layoutStrategy: TxWrapTextStrategy new.
    m extent: 569 at 9999999.
    m newTextContents: text]]

95ms in revised Squeak CompositionScanner / 366ms Pharo
MultiCcompositionScanner / 347ms TxText

I'll try to write a mini bench to measure display only on a Form with
StrikeFont and BitBlt...


2013/10/11 Camille Teruel <camille.teruel at gmail.com>

>
> On 11 oct. 2013, at 20:25, Stéphane Ducasse wrote:
>
> > Hi
> >
> > I discuss with igor and its new design precomputes everything so we will
> see.
> > What would be good is to have another guy looking at what igor is doing
> because now that fernando transformed himself
> > in a puff of smoke, igor is alone with me looking at it form time to
> time.
>
> Me when I come back. We have to work on the editor together anyway.
>
>
> > Stef
> > On Oct 11, 2013, at 1:08 PM, plantec <alain.plantec at yahoo.com> wrote:
> >
> >>
> >> Le 11 oct. 2013 à 08:15, Denis Kudriashov <dionisiydk at gmail.com> a
> écrit :
> >>
> >>> Me too.
> >>>
> >>> What exactly doing this code?
> >>>
> >>> Paragraph new compose: tm text
> >>>       style: tm textStyle copy
> >>>       from: 1
> >>>       in:
> >>>
> >>> Is it layout building stuff at new text model?
> >>
> >> I think yes.
> >> It composes a Text as a collection of TextLine.
> >> Alain
> >>
> >>>
> >>>
> >>> 2013/10/11 Stéphane Ducasse <stephane.ducasse at inria.fr>
> >>> Hi Igor
> >>>
> >>> it would be good to see how the new text model perform.
> >>>
> >>> Stef
> >>>
> >>>
> >>> Begin forwarded message:
> >>>
> >>>> From: Nicolas Cellier <nicolas.cellier.aka.nice at gmail.com>
> >>>> Subject: Fwd: Small text composition bench
> >>>> Date: October 10, 2013 10:46:42 PM GMT+02:00
> >>>> To: Stéphane Ducasse <stephane.ducasse at inria.fr>
> >>>>
> >>>>
> >>>>
> >>>> ---------- Forwarded message ----------
> >>>> From: Nicolas Cellier <nicolas.cellier.aka.nice at gmail.com>
> >>>> Date: 2013/10/10
> >>>> Subject: Small text composition bench
> >>>> To: The general-purpose Squeak developers list <
> squeak-dev at lists.squeakfoundation.org>
> >>>>
> >>>>
> >>>> Here is a simple bench:
> >>>>
> >>>> (StringHolder new contents:  (Compiler evaluate: (FileStream
> fileNamed: 'text.st') contentsOfEntireFile )) openLabel:  'Working With
> Squeak 2' .
> >>>> ((SystemWindow allSubInstances detect: [:e | e label = 'Working With
> Squeak 2']) findDeepSubmorphThat: [:m | m class = PluggableTextMorphPlus]
> ifAbsent: [] ) textMorph
> >>>> ifNotNil: [:tm | MessageTally spyOn: [
> >>>>   [100 timesRepeat: [(NewParagraph new)
> >>>>       compose: tm text
> >>>>       style: tm textStyle copy
> >>>>       from: 1
> >>>>       in: tm container]] timeToRun]].
> >>>>
> >>>> Before our changes: 162 ms
> >>>> After our changes: 95 ms
> >>>> And my Pharo 3.0 (#30417) (not up to date) :  364 ms
> >>>>
> >>>> The main gain is avoiding
> >>>> - the stopConditions copy
> >>>> - and the TextStopConditions indirection
> >>>> - and of course the Multi* when not necessary (Pharo does not)
> >>>>
> >>>> Here is the test for Pharo variant:
> >>>>
> >>>> | text |
> >>>> text := Compiler evaluate: (FileSystem workingDirectory parent parent
> parent / 'text.st' ) readStream contentsOfEntireFile .
> >>>> (StringHolder new contents:  text) openLabel:  'Working With Squeak
> 2' .
> >>>> ((SystemWindow allSubInstances detect: [:e | e label = 'Working With
> Squeak 2']) findDeepSubmorphThat: [:m | m class = PluggableTextMorph]
> ifAbsent: [] ) textMorph
> >>>> ifNotNil: [:tm | MessageTally spyOn: [
> >>>>   [100 timesRepeat: [(Paragraph new)
> >>>>       compose: text
> >>>>       style: tm textStyle copy
> >>>>       from: 1
> >>>>       in: tm container]] timeToRun]].
> >>>>
> >>>>
> >>>>
> >>>
> >>>
> >>>
> >>>
> >>
> >>
> >
> >
>
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.pharo.org/pipermail/pharo-dev_lists.pharo.org/attachments/20131011/6f15842d/attachment-0002.html>


More information about the Pharo-dev mailing list