I'll try to write a mini bench to measure display only on a Form with StrikeFont and BitBlt...95ms in revised Squeak CompositionScanner / 366ms Pharo MultiCcompositionScanner / 347ms TxTextOn 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.- this will later accelerate display, because no scanning is required at display time- TxText spend more time in composing layout because it records each and every TxSpanIntervalOK Igor,I loaded ConfigurationOfTxText and I understand what you say:
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 copyMessageTally spyOn: [ 100 timesRepeat: [| m |
������� from: 1
������� in: ( 0@0 corner: 569@9999999)]] timeToRun ].
��� m := TxTextMorph new.
��� m layoutStrategy: TxWrapTextStrategy new.
��� m extent: 569@9999999.
��� m newTextContents: text]]
2013/10/11 Camille Teruel <camille.teruel@gmail.com>
Me when I come back. We have to work on the editor together anyway.
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.
> Stef
> On Oct 11, 2013, at 1:08 PM, plantec <alain.plantec@yahoo.com> wrote:
>
>>
>> Le 11 oct. 2013 � 08:15, Denis Kudriashov <dionisiydk@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@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@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@inria.fr>
>>>>
>>>>
>>>>
>>>> ---------- Forwarded message ----------
>>>> From: Nicolas Cellier <nicolas.cellier.aka.nice@gmail.com>
>>>> Date: 2013/10/10
>>>> Subject: Small text composition bench
>>>> To: The general-purpose Squeak developers list <squeak-dev@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]].
>>>>
>>>>
>>>>
>>>
>>>
>>>
>>>
>>
>>
>
>