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]].