Re: Poor TTF font performance on Linux with newer VM

5 messages Options
Embed this post
Permalink
Tony Garnock-Jones-2

Re: Poor TTF font performance on Linux with newer VM

Reply Threaded More More options
Print post
Permalink
I've just checked against 3.9-4 (built from source tarball from
squeakvm.org), and it's still hideously slow. So it's down to something
that changed between 3.7-7 and 3.9-4. Or perhaps CroquetPlugin or
FloatMathPlugin. Or AioPlugin or UnixOSProcess :-)

Tony.

[hidden email] wrote:

> Hi!
>
> Tony Garnock-Jones <[hidden email]> wrote:
>> Thanks for that - I had suspected it might be a plugin. I've followed
>> your suggestion, and the plugin list is almost identical except for
>> OSProcess and FFI plugins.
>>
>> I've just run "MessageTally spyOn: [3 timesRepeat: [self nextPage]]" on
>> my BookMorph. The two results are dramatically different: on the 3.7 VM,
>> 477ms for the whole thing; on the 3.9 VM, 50354ms for the whole thing! A
>> factor of 100x slower.
>
> Just wanted to mention that this might indeed be the issue I have been
> experiencing with the new VM in my IRCe image - I thought it had to do
> with Socket communication, but hey, it might as well be this in fact.
>
> regards, Göran
>
>

Bert Freudenberg-3

Re: Poor TTF font performance on Linux with newer VM

Reply Threaded More More options
Print post
Permalink
Isn't that still the issue that TTF glyphs are not cached long enough  
anymore because of a fix to the garbage collector's weak ref handling?

Is there a fix in the image by now?

- Bert -

Am 18.05.2006 um 13:30 schrieb Tony Garnock-Jones:

> I've just checked against 3.9-4 (built from source tarball from
> squeakvm.org), and it's still hideously slow. So it's down to  
> something
> that changed between 3.7-7 and 3.9-4. Or perhaps CroquetPlugin or
> FloatMathPlugin. Or AioPlugin or UnixOSProcess :-)
>
> Tony.
>
> [hidden email] wrote:
>> Hi!
>>
>> Tony Garnock-Jones <[hidden email]> wrote:
>>> Thanks for that - I had suspected it might be a plugin. I've  
>>> followed
>>> your suggestion, and the plugin list is almost identical except for
>>> OSProcess and FFI plugins.
>>>
>>> I've just run "MessageTally spyOn: [3 timesRepeat: [self  
>>> nextPage]]" on
>>> my BookMorph. The two results are dramatically different: on the  
>>> 3.7 VM,
>>> 477ms for the whole thing; on the 3.9 VM, 50354ms for the whole  
>>> thing! A
>>> factor of 100x slower.


Tony Garnock-Jones-2

Re: Poor TTF font performance on Linux with newer VM

Reply Threaded More More options
Print post
Permalink
Bert Freudenberg wrote:
> Isn't that still the issue that TTF glyphs are not cached long enough
> anymore because of a fix to the garbage collector's weak ref handling?
>
> Is there a fix in the image by now?

Wow. That could be interesting to test. I'll try saving and loading the
project with the BookMorph into a 3.9 image; failing that, I'll try
building a mock couple of pages similar to those I have in my 3.8 image.

I'll report back.

Thanks,
  Tony

Tony Garnock-Jones-2

Re: Poor TTF font performance on Linux with newer VM

Reply Threaded More More options
Print post
Permalink
I've just tried a similar setup in a 3.9b-7032 image with 3.7-7 and
3.9-svn, and I get

3.7-7 - 107 tallies, 120 msec.
3.9-svn just after Smalltalk garbageCollect - 990 tallies, 1005 msec.
3.9-svn otherwise - 1323 tallies, 1343 msec.

So either the glyph caching isn't aggressive enough for this use case (I
made sure to use a real-world text example, rather than homogenous
repeats of the same string), or it's some other problem.

Traces attached.

Regards,
  Tony

Tony Garnock-Jones wrote:

> Bert Freudenberg wrote:
>> Isn't that still the issue that TTF glyphs are not cached long enough
>> anymore because of a fix to the garbage collector's weak ref handling?
>>
>> Is there a fix in the image by now?
>
> Wow. That could be interesting to test. I'll try saving and loading the
> project with the BookMorph into a 3.9 image; failing that, I'll try
> building a mock couple of pages similar to those I have in my 3.8 image.
>
> I'll report back.
>
> Thanks,
>   Tony
>
>

 - 107 tallies, 120 msec.

**Tree**
99.1% {119ms} BookMorph>>nextPage
  99.1% {119ms} BookMorph>>goToPage:
    99.1% {119ms} BookMorph>>goToPage:transitionSpec:
      99.1% {119ms} BookMorph>>goToPageMorph:transitionSpec:
        57.0% {68ms} PasteUpMorph(Morph)>>fullReleaseCachedState
          |57.0% {68ms} TextMorph>>releaseCachedState
          |  57.0% {68ms} TextMorph>>paragraph
          |    57.0% {68ms} MultiNewParagraph(NewParagraph)>>compose:style:from:in:
          |      57.0% {68ms} MultiNewParagraph(NewParagraph)>>composeAll
          |        57.0% {68ms} MultiNewParagraph(NewParagraph)>>composeLinesFrom:to:delta:into:priorLines:atY:
          |          57.0% {68ms} TextComposer>>composeLinesFrom:to:del...ner:wantsColumnBreaks:
          |            57.0% {68ms} TextComposer>>composeAllLines
          |              50.5% {61ms} TextComposer>>composeOneLine
          |                |43.9% {53ms} TextComposer>>composeAllRectangles:
          |                |  |43.9% {53ms} TextComposer>>composeEachRectangleIn:
          |                |  |  29.0% {35ms} CompositionScanner>>composeFrom:inRectan...leftSide:rightSide:
          |                |  |    |22.4% {27ms} CompositionScanner>>setStopConditions
          |                |  |    |  |22.4% {27ms} CompositionScanner>>setFont
          |                |  |    |  |  22.4% {27ms} CompositionScanner(CharacterScanner)>>setFont
          |                |  |    |  |    22.4% {27ms} TextFontReference>>emphasizeScanner:
          |                |  |    |  |      22.4% {27ms} CompositionScanner>>setActualFont:
          |                |  |    |  |        21.5% {26ms} TTCFont>>descent
          |                |  |    |  |          21.5% {26ms} TTCFont>>pixelSize
          |                |  |    |  |            21.5% {26ms} TextStyle class>>pointsToPixels:
          |                |  |    |  |              21.5% {26ms} TextStyle class>>pixelsPerInch
          |                |  |    |  |                21.5% {26ms} Dictionary>>at:ifAbsentPut:
          |                |  |    |  |                  21.5% {26ms} Dictionary>>at:ifAbsent:
          |                |  |    |  |                    21.5% {26ms} Dictionary(Set)>>findElementOrNil:
          |                |  |    |  |                      21.5% {26ms} Dictionary>>scanFor:
          |                |  |    |  |                        21.5% {26ms} ByteSymbol(String)>>hash
          |                |  |    |  |                          20.6% {25ms} primitives
          |                |  |    |6.5% {8ms} CompositionScanner(CharacterScanner)>>handleIndentation
          |                |  |    |  6.5% {8ms} SmallInteger(Integer)>>timesRepeat:
          |                |  |  15.0% {18ms} SmallInteger(Magnitude)>>max:
          |                |6.5% {8ms} Rectangle>>rectanglesAt:height:
          |                |  6.5% {8ms} Point>>corner:
          |                |    6.5% {8ms} Rectangle class>>origin:corner:
          |                |      6.5% {8ms} Rectangle>>setOrigin:corner:
          |              6.5% {8ms} Rectangle>>bottom
        42.1% {51ms} PasteUpMorph>>displayWorld
          42.1% {51ms} PasteUpMorph>>privateOuterDisplayWorld
            42.1% {51ms} WorldState>>displayWorld:submorphs:
              42.1% {51ms} WorldState>>drawWorld:submorphs:invalidAreasOn:
                42.1% {51ms} FormCanvas(Canvas)>>fullDrawMorph:
                  42.1% {51ms} FormCanvas(Canvas)>>fullDraw:
                    42.1% {51ms} BookMorph(Morph)>>fullDrawOn:
                      42.1% {51ms} BookMorph(Morph)>>drawSubmorphsOn:
                        42.1% {51ms} FormCanvas(Canvas)>>fullDrawMorph:
                          42.1% {51ms} FormCanvas(Canvas)>>fullDraw:
                            42.1% {51ms} PasteUpMorph(Morph)>>fullDrawOn:
                              42.1% {51ms} PasteUpMorph>>drawSubmorphsOn:
                                42.1% {51ms} FormCanvas(Canvas)>>fullDrawMorph:
                                  42.1% {51ms} FormCanvas(Canvas)>>fullDraw:
                                    42.1% {51ms} TextMorph(Morph)>>fullDrawOn:
                                      42.1% {51ms} FormCanvas(Canvas)>>drawMorph:
                                        42.1% {51ms} FormCanvas(Canvas)>>draw:
                                          42.1% {51ms} TextMorph>>drawOn:
                                            42.1% {51ms} FormCanvas>>paragraph:bounds:color:
                                              42.1% {51ms} MultiNewParagraph>>displayOn:using:at:
                                                42.1% {51ms} MultiDisplayScanner>>displayLine:offset:leftInRun:
                                                  29.0% {35ms} TTCFont>>displayString:on:from:to:at:kern:baselineY:
                                                    |15.0% {18ms} primitives
                                                    |14.0% {17ms} GrafPort>>copyBits
                                                  13.1% {16ms} MultiDisplayScanner>>setStopConditions
                                                    13.1% {16ms} MultiDisplayScanner>>setFont
                                                      13.1% {16ms} TTCFont>>installOn:foregroundColor:backgroundColor:
                                                        13.1% {16ms} GrafPort>>installTTCFont:foregroundColor:backgroundColor:
                                                          13.1% {16ms} GrafPort(BitBlt)>>installTTCFont:foregroundColor:backgroundColor:
                                                            13.1% {16ms} TTCFont>>height
                                                              13.1% {16ms} TTCFont>>pixelSize
                                                                13.1% {16ms} TextStyle class>>pointsToPixels:
                                                                  13.1% {16ms} TextStyle class>>pixelsPerInch
                                                                    13.1% {16ms} Dictionary>>at:ifAbsentPut:

**Leaves**
20.6% {25ms} ByteSymbol(String)>>hash
15.9% {19ms} SmallInteger(Magnitude)>>max:
15.0% {18ms} TTCFont>>displayString:on:from:to:at:kern:baselineY:
14.0% {17ms} GrafPort>>copyBits
13.1% {16ms} Dictionary>>at:ifAbsentPut:
6.5% {8ms} Rectangle>>bottom
6.5% {8ms} SmallInteger(Integer)>>timesRepeat:
6.5% {8ms} Rectangle>>setOrigin:corner:

**Memory**
        old +80,608 bytes
        young -226,056 bytes
        used -145,448 bytes
        free +145,448 bytes

**GCs**
        full 0 totalling 0ms (0.0% uptime)
        incr 10 totalling 0ms (0.0% uptime), avg 0.0ms
        tenures 1 (avg 10 GCs/tenure)
        root table 0 overflows

 - 1323 tallies, 1343 msec.

**Tree**
100.0% {1343ms} BookMorph>>nextPage
  100.0% {1343ms} BookMorph>>goToPage:
    100.0% {1343ms} BookMorph>>goToPage:transitionSpec:
      100.0% {1343ms} BookMorph>>goToPageMorph:transitionSpec:
        81.1% {1089ms} PasteUpMorph(Morph)>>fullReleaseCachedState
          |81.1% {1089ms} TextMorph>>releaseCachedState
          |  81.1% {1089ms} TextMorph>>paragraph
          |    81.1% {1089ms} MultiNewParagraph(NewParagraph)>>compose:style:from:in:
          |      81.1% {1089ms} MultiNewParagraph(NewParagraph)>>composeAll
          |        81.1% {1089ms} MultiNewParagraph(NewParagraph)>>composeLinesFrom:to:delta:into:priorLines:atY:
          |          81.1% {1089ms} TextComposer>>composeLinesFrom:to:del...ner:wantsColumnBreaks:
          |            81.0% {1088ms} TextComposer>>composeAllLines
          |              81.0% {1088ms} TextComposer>>composeOneLine
          |                80.2% {1077ms} TextComposer>>composeAllRectangles:
          |                  80.0% {1074ms} TextComposer>>composeEachRectangleIn:
          |                    79.4% {1066ms} CompositionScanner>>composeFrom:inRectan...leftSide:rightSide:
          |                      73.7% {990ms} CompositionScanner(CharacterScanner)>>scanCharactersFrom:to...stopConditions:kern:
          |                        |73.5% {987ms} CompositionScanner(CharacterScanner)>>basicScanCharactersFr...stopConditions:kern:
          |                        |  72.1% {968ms} TTCFont>>widthOf:
          |                        |    67.2% {902ms} TTCFont>>computeForm:
          |                        |      |63.0% {846ms} TTGlyph>>asFormWithScale:ascender:...er:fgColor:bgColor:depth:
          |                        |      |  |63.0% {846ms} TTGlyph>>asFormWithScale:ascender:...Color:depth:replaceColor:
          |                        |      |  |  62.7% {842ms} TTGlyph>>asFormWithScale:ascender:...:lingGlyphWidth:emphasis:
          |                        |      |  |    44.8% {602ms} BalloonCanvas>>drawGeneralBezierShape...rderWidth:borderColor:
          |                        |      |  |      |27.2% {365ms} BalloonEngine>>drawGeneralBezierShape...borderColor:transform:
          |                        |      |  |      |  |18.9% {254ms} BalloonEngine>>postFlushIfNeeded
          |                        |      |  |      |  |  |17.0% {228ms} BalloonEngine>>copyBits
          |                        |      |  |      |  |  |  16.5% {222ms} BalloonEngine>>copyLoopFaster
          |                        |      |  |      |  |  |    16.4% {220ms} primitives
          |                        |      |  |      |  |6.1% {82ms} BalloonEngine>>registerFill:and:
          |                        |      |  |      |  |  5.4% {73ms} BalloonEngine>>registerFills:
          |                        |      |  |      |  |    2.8% {38ms} BalloonEngine>>registerFill:
          |                        |      |  |      |  |      2.4% {32ms} Color>>scaledPixelValue32
          |                        |      |  |      |  |        2.2% {30ms} Color>>pixelWordForDepth:
          |                        |      |  |      |17.4% {234ms} BalloonCanvas>>ensuredEngine
          |                        |      |  |      |  9.5% {128ms} BalloonEngine class(Behavior)>>new
          |                        |      |  |      |    |9.5% {128ms} BalloonEngine>>initialize
          |                        |      |  |      |    |  5.2% {70ms} BalloonEngine>>bitBlt:
          |                        |      |  |      |  5.0% {67ms} BalloonEngine>>bitBlt:
          |                        |      |  |    5.7% {77ms} Form(DisplayMedium)>>fillColor:
          |                        |      |  |      |4.3% {58ms} Form(DisplayMedium)>>fill:fillColor:
          |                        |      |  |      |  3.9% {52ms} Form>>fill:rule:fillColor:
          |                        |      |  |      |    2.0% {27ms} BitBlt class>>toForm:
          |                        |      |  |    4.1% {55ms} BalloonCanvas class(FormCanvas class)>>on:
          |                        |      |  |      3.3% {44ms} BalloonCanvas(FormCanvas)>>setForm:
          |                        |      |  |        2.1% {28ms} GrafPort class(BitBlt class)>>toForm:
          |                        |      |2.1% {28ms} TTCFont>>pixelSize
          |                        |      |  2.0% {27ms} TextStyle class>>pointsToPixels:
          |                        |      |    2.0% {27ms} TextStyle class>>pixelsPerInch
          |                        |    2.1% {28ms} Character>>charCode
          |                      3.6% {48ms} CompositionScanner>>setStopConditions
          |                        3.6% {48ms} CompositionScanner>>setFont
          |                          3.4% {46ms} CompositionScanner(CharacterScanner)>>setFont
        18.3% {246ms} PasteUpMorph>>displayWorld
          18.3% {246ms} PasteUpMorph>>privateOuterDisplayWorld
            18.3% {246ms} WorldState>>displayWorld:submorphs:
              18.2% {244ms} WorldState>>drawWorld:submorphs:invalidAreasOn:
                18.2% {244ms} FormCanvas(Canvas)>>fullDrawMorph:
                  18.2% {244ms} FormCanvas(Canvas)>>fullDraw:
                    18.2% {244ms} BookMorph(Morph)>>fullDrawOn:
                      18.2% {244ms} BookMorph(Morph)>>drawSubmorphsOn:
                        18.2% {244ms} FormCanvas(Canvas)>>fullDrawMorph:
                          18.2% {244ms} FormCanvas(Canvas)>>fullDraw:
                            18.2% {244ms} PasteUpMorph(Morph)>>fullDrawOn:
                              17.5% {235ms} PasteUpMorph>>drawSubmorphsOn:
                                17.0% {228ms} FormCanvas(Canvas)>>fullDrawMorph:
                                  17.0% {228ms} FormCanvas(Canvas)>>fullDraw:
                                    17.0% {228ms} TextMorph(Morph)>>fullDrawOn:
                                      17.0% {228ms} FormCanvas(Canvas)>>drawMorph:
                                        17.0% {228ms} FormCanvas(Canvas)>>draw:
                                          17.0% {228ms} TextMorph>>drawOn:
                                            17.0% {228ms} FormCanvas>>paragraph:bounds:color:
                                              17.0% {228ms} MultiNewParagraph>>displayOn:using:at:
                                                17.0% {228ms} MultiDisplayScanner>>displayLine:offset:leftInRun:
                                                  9.0% {121ms} MultiDisplayScanner(MultiCharacterScanner)>>scanCharactersFrom...opConditions:kern:
                                                    |9.0% {121ms} MultiDisplayScanner(MultiCharacterScanner)>>basicScanCharacter...opConditions:kern:
                                                    |  9.0% {121ms} TTCFont>>widthOf:
                                                    |    8.7% {117ms} TTCFont>>computeForm:
                                                    |      7.8% {105ms} TTGlyph>>asFormWithScale:ascender:...er:fgColor:bgColor:depth:
                                                    |        7.8% {105ms} TTGlyph>>asFormWithScale:ascender:...Color:depth:replaceColor:
                                                    |          7.8% {105ms} TTGlyph>>asFormWithScale:ascender:...:lingGlyphWidth:emphasis:
                                                    |            5.6% {75ms} BalloonCanvas>>drawGeneralBezierShape...rderWidth:borderColor:
                                                    |              2.9% {39ms} BalloonEngine>>drawGeneralBezierShape...borderColor:transform:
                                                    |              2.6% {35ms} BalloonCanvas>>ensuredEngine
                                                  6.8% {91ms} TTCFont>>displayString:on:from:to:at:kern:baselineY:
                                                    4.9% {66ms} TTCFont>>glyphInfoOf:into:
                                                      4.5% {60ms} TTCFont>>formOf:
                                                        3.3% {44ms} TTCFont>>computeForm:
                                                          3.1% {42ms} TTGlyph>>asFormWithScale:ascender:...er:fgColor:bgColor:depth:
                                                            3.1% {42ms} TTGlyph>>asFormWithScale:ascender:...Color:depth:replaceColor:
                                                              3.1% {42ms} TTGlyph>>asFormWithScale:ascender:...:lingGlyphWidth:emphasis:
                                                                2.3% {31ms} BalloonCanvas>>drawGeneralBezierShape...rderWidth:borderColor:

**Leaves**
19.5% {262ms} BalloonEngine>>copyLoopFaster
3.6% {48ms} Character>>charCode
2.9% {39ms} Rectangle>>setOrigin:corner:
2.1% {28ms} Rectangle>>top
2.0% {27ms} LargePositiveInteger class(Behavior)>>new:

**Memory**
        old +150,016 bytes
        young +80,404 bytes
        used +230,420 bytes
        free -230,420 bytes

**GCs**
        full 0 totalling 0ms (0.0% uptime)
        incr 174 totalling 62ms (5.0% uptime), avg 0.0ms
        tenures 2 (avg 87 GCs/tenure)
        root table 0 overflows

 - 990 tallies, 1005 msec.

**Tree**
100.0% {1005ms} BookMorph>>nextPage
  100.0% {1005ms} BookMorph>>goToPage:
    100.0% {1005ms} BookMorph>>goToPage:transitionSpec:
      99.9% {1004ms} BookMorph>>goToPageMorph:transitionSpec:
        74.7% {751ms} PasteUpMorph(Morph)>>fullReleaseCachedState
          |74.7% {751ms} TextMorph>>releaseCachedState
          |  74.7% {751ms} TextMorph>>paragraph
          |    74.7% {751ms} MultiNewParagraph(NewParagraph)>>compose:style:from:in:
          |      74.7% {751ms} MultiNewParagraph(NewParagraph)>>composeAll
          |        74.7% {751ms} MultiNewParagraph(NewParagraph)>>composeLinesFrom:to:delta:into:priorLines:atY:
          |          74.7% {751ms} TextComposer>>composeLinesFrom:to:del...ner:wantsColumnBreaks:
          |            73.9% {743ms} TextComposer>>composeAllLines
          |              73.9% {743ms} TextComposer>>composeOneLine
          |                73.5% {739ms} TextComposer>>composeAllRectangles:
          |                  73.3% {737ms} TextComposer>>composeEachRectangleIn:
          |                    73.0% {734ms} CompositionScanner>>composeFrom:inRectan...leftSide:rightSide:
          |                      67.3% {676ms} CompositionScanner(CharacterScanner)>>scanCharactersFrom:to...stopConditions:kern:
          |                        |67.1% {674ms} CompositionScanner(CharacterScanner)>>basicScanCharactersFr...stopConditions:kern:
          |                        |  65.9% {662ms} TTCFont>>widthOf:
          |                        |    61.2% {615ms} TTCFont>>computeForm:
          |                        |      57.1% {574ms} TTGlyph>>asFormWithScale:ascender:...er:fgColor:bgColor:depth:
          |                        |        |57.0% {573ms} TTGlyph>>asFormWithScale:ascender:...Color:depth:replaceColor:
          |                        |        |  56.7% {570ms} TTGlyph>>asFormWithScale:ascender:...:lingGlyphWidth:emphasis:
          |                        |        |    40.2% {404ms} BalloonCanvas>>drawGeneralBezierShape...rderWidth:borderColor:
          |                        |        |      |24.4% {245ms} BalloonEngine>>drawGeneralBezierShape...borderColor:transform:
          |                        |        |      |  |17.4% {175ms} BalloonEngine>>postFlushIfNeeded
          |                        |        |      |  |  |16.0% {161ms} BalloonEngine>>copyBits
          |                        |        |      |  |  |  15.3% {154ms} BalloonEngine>>copyLoopFaster
          |                        |        |      |  |  |    14.0% {141ms} primitives
          |                        |        |      |  |5.1% {51ms} BalloonEngine>>registerFill:and:
          |                        |        |      |  |  4.5% {45ms} BalloonEngine>>registerFills:
          |                        |        |      |  |    2.4% {24ms} BalloonEngine>>registerFill:
          |                        |        |      |  |      2.2% {22ms} Color>>scaledPixelValue32
          |                        |        |      |15.7% {158ms} BalloonCanvas>>ensuredEngine
          |                        |        |      |  8.7% {87ms} BalloonEngine class(Behavior)>>new
          |                        |        |      |    |8.5% {85ms} BalloonEngine>>initialize
          |                        |        |      |    |  5.5% {55ms} BalloonEngine>>bitBlt:
          |                        |        |      |  4.6% {46ms} BalloonEngine>>bitBlt:
          |                        |        |    5.6% {56ms} Form(DisplayMedium)>>fillColor:
          |                        |        |      |4.8% {48ms} Form(DisplayMedium)>>fill:fillColor:
          |                        |        |      |  4.4% {44ms} Form>>fill:rule:fillColor:
          |                        |        |      |    2.4% {24ms} BitBlt>>copy:from:in:fillColor:rule:
          |                        |        |    4.5% {45ms} BalloonCanvas class(FormCanvas class)>>on:
          |                        |        |      4.0% {40ms} BalloonCanvas(FormCanvas)>>setForm:
          |                        |      2.8% {28ms} TTCFont>>pixelSize
          |                        |        2.2% {22ms} TextStyle class>>pointsToPixels:
          |                      4.2% {42ms} CompositionScanner>>setStopConditions
          |                        4.2% {42ms} CompositionScanner>>setFont
          |                          4.0% {40ms} CompositionScanner(CharacterScanner)>>setFont
          |                            2.6% {26ms} TTCFont>>widthOf:
          |                              2.4% {24ms} TTCFont>>computeForm:
          |                                2.3% {23ms} TTGlyph>>asFormWithScale:ascender:...er:fgColor:bgColor:depth:
          |                                  2.3% {23ms} TTGlyph>>asFormWithScale:ascender:...Color:depth:replaceColor:
          |                                    2.3% {23ms} TTGlyph>>asFormWithScale:ascender:...:lingGlyphWidth:emphasis:
        24.2% {243ms} PasteUpMorph>>displayWorld
          24.2% {243ms} PasteUpMorph>>privateOuterDisplayWorld
            24.2% {243ms} WorldState>>displayWorld:submorphs:
              24.0% {241ms} WorldState>>drawWorld:submorphs:invalidAreasOn:
                24.0% {241ms} FormCanvas(Canvas)>>fullDrawMorph:
                  24.0% {241ms} FormCanvas(Canvas)>>fullDraw:
                    24.0% {241ms} BookMorph(Morph)>>fullDrawOn:
                      23.9% {240ms} BookMorph(Morph)>>drawSubmorphsOn:
                        23.9% {240ms} FormCanvas(Canvas)>>fullDrawMorph:
                          23.9% {240ms} FormCanvas(Canvas)>>fullDraw:
                            23.9% {240ms} PasteUpMorph(Morph)>>fullDrawOn:
                              22.4% {225ms} PasteUpMorph>>drawSubmorphsOn:
                                22.4% {225ms} FormCanvas(Canvas)>>fullDrawMorph:
                                  22.4% {225ms} FormCanvas(Canvas)>>fullDraw:
                                    22.4% {225ms} TextMorph(Morph)>>fullDrawOn:
                                      22.4% {225ms} FormCanvas(Canvas)>>drawMorph:
                                        22.4% {225ms} FormCanvas(Canvas)>>draw:
                                          22.4% {225ms} TextMorph>>drawOn:
                                            22.4% {225ms} FormCanvas>>paragraph:bounds:color:
                                              22.4% {225ms} MultiNewParagraph>>displayOn:using:at:
                                                22.1% {222ms} MultiDisplayScanner>>displayLine:offset:leftInRun:
                                                  13.5% {136ms} MultiDisplayScanner(MultiCharacterScanner)>>scanCharactersFrom...opConditions:kern:
                                                    |13.5% {136ms} MultiDisplayScanner(MultiCharacterScanner)>>basicScanCharacter...opConditions:kern:
                                                    |  13.4% {135ms} TTCFont>>widthOf:
                                                    |    13.0% {131ms} TTCFont>>computeForm:
                                                    |      12.3% {124ms} TTGlyph>>asFormWithScale:ascender:...er:fgColor:bgColor:depth:
                                                    |        12.2% {123ms} TTGlyph>>asFormWithScale:ascender:...Color:depth:replaceColor:
                                                    |          12.2% {123ms} TTGlyph>>asFormWithScale:ascender:...:lingGlyphWidth:emphasis:
                                                    |            9.5% {95ms} BalloonCanvas>>drawGeneralBezierShape...rderWidth:borderColor:
                                                    |              4.7% {47ms} BalloonEngine>>drawGeneralBezierShape...borderColor:transform:
                                                    |                |2.9% {29ms} BalloonEngine>>postFlushIfNeeded
                                                    |                |  2.2% {22ms} BalloonEngine>>copyBits
                                                    |                |    2.2% {22ms} BalloonEngine>>copyLoopFaster
                                                    |              4.6% {46ms} BalloonCanvas>>ensuredEngine
                                                    |                2.4% {24ms} BalloonEngine class(Behavior)>>new
                                                    |                  2.3% {23ms} BalloonEngine>>initialize
                                                  8.2% {82ms} TTCFont>>displayString:on:from:to:at:kern:baselineY:
                                                    5.2% {52ms} TTCFont>>glyphInfoOf:into:
                                                      4.9% {49ms} TTCFont>>formOf:
                                                        3.7% {37ms} TTCFont>>computeForm:
                                                          3.5% {35ms} TTGlyph>>asFormWithScale:ascender:...er:fgColor:bgColor:depth:
                                                            3.5% {35ms} TTGlyph>>asFormWithScale:ascender:...Color:depth:replaceColor:
                                                              3.5% {35ms} TTGlyph>>asFormWithScale:ascender:...:lingGlyphWidth:emphasis:

                                                                2.3% {23ms} BalloonCanvas>>drawGeneralBezierShape...rderWidth:borderColor:

**Leaves**
18.1% {182ms} BalloonEngine>>copyLoopFaster
2.9% {29ms} Character>>charCode
2.6% {26ms} Rectangle>>setOrigin:corner:
2.4% {24ms} BalloonEdgeData class(Behavior)>>new
2.4% {24ms} LargePositiveInteger class(Behavior)>>new:

**Memory**
        old +109,396 bytes
        young -11,092 bytes
        used +98,304 bytes
        free -98,304 bytes

**GCs**
        full 0 totalling 0ms (0.0% uptime)
        incr 129 totalling 36ms (4.0% uptime), avg 0.0ms
        tenures 1 (avg 129 GCs/tenure)
        root table 0 overflows
John M McIntosh

Re: Poor TTF font performance on Linux with newer VM

Reply Threaded More More options
Print post
Permalink
In reply to this post by Bert Freudenberg-3
I recall Andreas posting a fix to the squeak list earlier in 2006, or  
was that 2005?

On 18-May-06, at 4:36 AM, Bert Freudenberg wrote:

> Isn't that still the issue that TTF glyphs are not cached long  
> enough anymore because of a fix to the garbage collector's weak ref  
> handling?
>
> Is there a fix in the image by now?
>
> - Bert -
>
> Am 18.05.2006 um 13:30 schrieb Tony Garnock-Jones:
>
>> I've just checked against 3.9-4 (built from source tarball from
>> squeakvm.org), and it's still hideously slow. So it's down to  
>> something
>> that changed between 3.7-7 and 3.9-4. Or perhaps CroquetPlugin or
>> FloatMathPlugin. Or AioPlugin or UnixOSProcess :-)
>>
>> Tony.
>>
>> [hidden email] wrote:
>>> Hi!
>>>
>>> Tony Garnock-Jones <[hidden email]> wrote:
>>>> Thanks for that - I had suspected it might be a plugin. I've  
>>>> followed
>>>> your suggestion, and the plugin list is almost identical except for
>>>> OSProcess and FFI plugins.
>>>>
>>>> I've just run "MessageTally spyOn: [3 timesRepeat: [self  
>>>> nextPage]]" on
>>>> my BookMorph. The two results are dramatically different: on the  
>>>> 3.7 VM,
>>>> 477ms for the whole thing; on the 3.9 VM, 50354ms for the whole  
>>>> thing! A
>>>> factor of 100x slower.
>
>

--
========================================================================
===
John M. McIntosh <[hidden email]> 1-800-477-2659
Corporate Smalltalk Consulting Ltd.  http://www.smalltalkconsulting.com
========================================================================
===