Poor TTF font performance on Linux with newer VM

Tony Garnock-Jones tonyg at lshift.net
Thu May 18 10:53:55 UTC 2006


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.

I've attached the traces, in case they're meaningful at a glance to
anyone reading.

Regards,
  Tony

David T. Lewis wrote:
> On Thu, May 18, 2006 at 10:40:58AM +0100, Tony Garnock-Jones wrote:
>> Hi all,
>>
>> I have recently been building VMs on Linux (to fix a bug in the
>> FilePlugin), and with my shiny new patched 3.9-7 VM (build from the head
>> of svn plus my patch) the TTF font performance (Bitstream Vera Sans) has
>> dropped through the floor.
>>
>> I'm using a BookMorph with lots of Bitstream text morphs, and switching
>> pages causes the CPU to peg at 100% in Squeak for several seconds.
>>
>> Switching back to a 3.7-7 VM causes the font rendering to run at normal
>> speed again - even when I take a 3.7-7 source tree, patch it to fix the
>> FilePlugin bug, and recompile.
>>
>> So - it looks like something between 3.7-7 and 3.9-7 causes the TTF
>> performance to bottom out. What could it be? Any ideas?
>>
>> Tony
>>
>> PS. all this is on Debian, gcc 4.0.4, and I could be wrong about
>> identifying font rendering as the problem area. I know Squeak suddenly
>> seems to take a looooong time to do anything TTF related - strike fonts
>> seem to run at normal speed.
> 
> I don't know the answer to your question, but from what you're
> describing I might guess the TTF font rendering uses some plugin
> that is missing from your new VM. Check "Smalltalk listLoadedModules"
> on your 3.7-7 VM (after doing something with your BookMorph) and
> see if it shows some plugin that you have not included in your
> 3.9-7 build.
> 
> Dave
> 
> 
> 


-- 
 [][][] Tony Garnock-Jones     | Mob: +44 (0)7905 974 211
   [][] LShift Ltd             | Tel: +44 (0)20 7729 7060
 []  [] http://www.lshift.net/ | Email: tonyg at lshift.net
-------------- next part --------------
 - 461 tallies, 477 msec.

**Tree**
100.0% {477ms} BookMorph>>nextPage
  100.0% {477ms} BookMorph>>goToPage:
    100.0% {477ms} BookMorph>>goToPage:transitionSpec:
      100.0% {477ms} BookMorph>>goToPageMorph:transitionSpec:
        57.7% {275ms} PasteUpMorph>>displayWorld
          |57.7% {275ms} PasteUpMorph>>privateOuterDisplayWorld
          |  57.7% {275ms} WorldState>>displayWorld:submorphs:
          |    57.7% {275ms} WorldState>>drawWorld:submorphs:invalidAreasOn:
          |      57.7% {275ms} FormCanvas(Canvas)>>fullDrawMorph:
          |        57.7% {275ms} FormCanvas(Canvas)>>fullDraw:
          |          57.7% {275ms} BookMorph(Morph)>>fullDrawOn:
          |            57.7% {275ms} BookMorph(Morph)>>drawSubmorphsOn:
          |              57.7% {275ms} FormCanvas(Canvas)>>fullDrawMorph:
          |                57.7% {275ms} FormCanvas(Canvas)>>fullDraw:
          |                  57.7% {275ms} PasteUpMorph(Morph)>>fullDrawOn:
          |                    52.3% {249ms} PasteUpMorph>>drawSubmorphsOn:
          |                      |52.3% {249ms} FormCanvas(Canvas)>>fullDrawMorph:
[52.3% {249ms} FormCanvas(Canvas)>>fullDraw:
[  52.3% {249ms} TextMorph(Morph)>>fullDrawOn:
[    52.3% {249ms} FormCanvas(Canvas)>>drawMorph:
[      52.3% {249ms} FormCanvas(Canvas)>>draw:
[        52.3% {249ms} TextMorph>>drawOn:
[          30.6% {146ms} FormCanvas>>paragraph:bounds:color:
[            |30.6% {146ms} MultiNewParagraph>>displayOn:using:at:
[            |  30.6% {146ms} MultiDisplayScanner>>displayLine:offset:leftInRun:
[            |    27.1% {129ms} TTCFont>>displayString:on:from:to:at:kern:baselineY:
[            |      19.3% {92ms} TTCFont>>glyphInfoOf:into:
[            |        |11.3% {54ms} TTCFont>>ascentOf:
[            |        |  |11.3% {54ms} TTCFont>>ascent
[            |        |  |  6.7% {32ms} TTCFont>>pixelSize
[            |        |  |    |6.7% {32ms} TextStyle class>>pointsToPixels:
[            |        |  |    |  6.7% {32ms} TextStyle class>>pixelsPerInch
[            |        |  |    |    6.7% {32ms} Dictionary>>at:ifAbsentPut:
[            |        |  |    |      5.2% {25ms} Dictionary>>at:ifAbsent:
[[3.0% {14ms} primitives
[[2.2% {10ms} Dictionary(Set)>>findElementOrNil:
[[  2.2% {10ms} Dictionary>>scanFor:
[[    2.2% {10ms} ByteSymbol(String)>>hash
[            |        |  |  4.6% {22ms} Float(Number)>>//
[            |        |  |    3.0% {14ms} primitives
[            |        |8.0% {38ms} TTCFont>>formOf:
[            |        |  8.0% {38ms} TTCFont>>computeForm:
[            |        |    6.3% {30ms} TTGlyph>>asFormWithScale:ascender:...er:fgColor:bgColor:depth:
[            |        |      6.3% {30ms} TTGlyph>>asFormWithScale:ascender:...Color:depth:replaceColor:
[            |        |        6.3% {30ms} TTGlyph>>asFormWithScale:ascender:...:lingGlyphWidth:emphasis:
[            |        |          5.0% {24ms} BalloonCanvas>>drawGeneralBezierShape...rderWidth:borderColor:
[            |        |            3.0% {14ms} BalloonCanvas>>ensuredEngine
[[3.0% {14ms} BalloonEngine class(Behavior)>>new
[[  3.0% {14ms} BalloonEngine>>initialize
[[    3.0% {14ms} BalloonEngine>>bitBlt:
[            |      2.8% {13ms} primitives
[          21.7% {104ms} TextMorph>>paragraph
[            21.7% {104ms} MultiNewParagraph(NewParagraph)>>compose:style:from:in:
[              21.7% {104ms} MultiNewParagraph(NewParagraph)>>composeAll
[                21.7% {104ms} MultiNewParagraph(NewParagraph)>>composeLinesFrom:to:delta:into:priorLines:atY:
[                  21.7% {104ms} TextComposer>>composeLinesFrom:to:del...ner:wantsColumnBreaks:
[                    21.7% {104ms} TextComposer>>composeAllLines
[                      21.7% {104ms} TextComposer>>composeOneLine
[                        21.7% {104ms} TextComposer>>composeAllRectangles:
[                          21.7% {104ms} TextComposer>>composeEachRectangleIn:
[                            21.7% {104ms} CompositionScanner>>composeFrom:inRectan...leftSide:rightSide:
[                              19.7% {94ms} CompositionScanner(CharacterScanner)>>scanCharactersFrom:to...stopConditions:kern:
[                                19.7% {94ms} CompositionScanner(CharacterScanner)>>basicScanCharactersFr...stopConditions:kern:
[[19.7% {94ms} TTCFont>>widthOf:
[[  19.7% {94ms} TTCFont>>computeForm:
[[    17.6% {84ms} TTGlyph>>asFormWithScale:ascender:...er:fgColor:bgColor:depth:
[[      |17.6% {84ms} TTGlyph>>asFormWithScale:ascender:...Color:depth:replaceColor:
[[      |  17.6% {84ms} TTGlyph>>asFormWithScale:ascender:...:lingGlyphWidth:emphasis:
[[      |    12.6% {60ms} BalloonCanvas>>drawGeneralBezierShape...rderWidth:borderColor:
[[      |      |9.1% {43ms} BalloonEngine>>drawGeneralBezierShape...borderColor:transform:
[[      |      |  |4.8% {23ms} BalloonEngine>>postFlushIfNeeded
[[      |      |  |  |4.8% {23ms} BalloonEngine>>copyBits
[[      |      |  |  |  4.8% {23ms} BalloonEngine>>copyLoopFaster
[[      |      |  |4.3% {21ms} BalloonEngine>>registerFill:and:
[[      |      |  |  4.3% {21ms} BalloonEngine>>registerFills:
[[      |      |  |    2.4% {11ms} BalloonEngine>>registerFill:
[[      |      |3.5% {17ms} BalloonCanvas>>ensuredEngine
[[      |    5.0% {24ms} MatrixTransform2x3 class>>withScale:
[[    2.2% {10ms} TTCFont>>pixelSize
[[      2.2% {10ms} TextStyle class>>pointsToPixels:
[[        2.2% {10ms} TextStyle class>>pixelsPerInch
[[          2.2% {10ms} Dictionary>>at:ifAbsentPut:
[[            2.2% {10ms} Dictionary>>at:ifAbsent:
[[              2.2% {10ms} Dictionary(Set)>>findElementOrNil:
[[                2.2% {10ms} Dictionary>>scanFor:
[[                  2.2% {10ms} ByteSymbol(String)>>hash
[[                    2.2% {10ms} ByteString class(Object)>>hash
          |                    2.8% {13ms} FormCanvas(Canvas)>>drawMorph:
          |                      2.8% {13ms} FormCanvas(Canvas)>>draw:
[2.8% {13ms} PasteUpMorph>>drawOn:
[  2.8% {13ms} PasteUpMorph(Morph)>>drawOn:
[    2.8% {13ms} FormCanvas(Canvas)>>fillRectangle:fillStyle:borderStyle:
[      2.8% {13ms} FormCanvas>>fillRectangle:fillStyle:
[        2.8% {13ms} FormCanvas>>balloonFillRectangle:fillStyle:
[          2.8% {13ms} BalloonCanvas>>fillRectangle:fillStyle:
[            2.8% {13ms} BalloonCanvas>>drawRectangle:color:borderWidth:borderColor:
[              2.8% {13ms} BalloonEngine>>drawRectangle:fill:bor...borderColor:transform:
[                2.8% {13ms} BalloonEngine>>postFlushIfNeeded
[                  2.8% {13ms} BalloonEngine>>copyBits
[                    2.8% {13ms} BalloonEngine>>copyLoopFaster
        38.8% {185ms} PasteUpMorph(Morph)>>updateCachedThumbnail
          |38.8% {185ms} BookPageThumbnailMorph>>computeThumbnail
          |  38.8% {185ms} PasteUpMorph(Morph)>>imageForm
          |    38.8% {185ms} PasteUpMorph(Morph)>>imageFormForRectangle:
          |      38.8% {185ms} PasteUpMorph(Morph)>>imageForm:forRectangle:
          |        38.8% {185ms} FormCanvas(Canvas)>>fullDrawMorph:
          |          38.8% {185ms} FormCanvas(Canvas)>>fullDraw:
          |            38.8% {185ms} PasteUpMorph(Morph)>>fullDrawOn:
          |              31.2% {149ms} PasteUpMorph>>drawSubmorphsOn:
          |                |31.2% {149ms} FormCanvas(Canvas)>>fullDrawMorph:
          |                |  31.2% {149ms} FormCanvas(Canvas)>>fullDraw:
          |                |    31.2% {149ms} TextMorph(Morph)>>fullDrawOn:
          |                |      31.2% {149ms} FormCanvas(Canvas)>>drawMorph:
[31.2% {149ms} FormCanvas(Canvas)>>draw:
[  31.2% {149ms} TextMorph>>drawOn:
[    31.2% {149ms} FormCanvas>>paragraph:bounds:color:
[      31.2% {149ms} MultiNewParagraph>>displayOn:using:at:
[        31.2% {149ms} MultiDisplayScanner>>displayLine:offset:leftInRun:
[          28.2% {135ms} TTCFont>>displayString:on:from:to:at:kern:baselineY:
[            19.1% {91ms} TTCFont>>glyphInfoOf:into:
[              |17.6% {84ms} TTCFont>>ascentOf:
[              |  17.6% {84ms} TTCFont>>ascent
[              |    15.0% {72ms} TTCFont>>pixelSize
[              |      |15.0% {72ms} TextStyle class>>pointsToPixels:
[              |      |  15.0% {72ms} TextStyle class>>pixelsPerInch
[              |      |    15.0% {72ms} Dictionary>>at:ifAbsentPut:
[              |      |      13.2% {63ms} Dictionary>>at:ifAbsent:
[              |      |        8.9% {42ms} primitives
[              |      |        4.3% {21ms} Dictionary(Set)>>findElementOrNil:
[              |      |          2.4% {11ms} Dictionary>>scanFor:
[              |    2.6% {12ms} Float(Number)>>//
[            4.8% {23ms} GrafPort(BitBlt)>>sourceForm:
[            2.8% {13ms} primitives
          |              7.6% {36ms} FormCanvas(Canvas)>>drawMorph:
          |                7.6% {36ms} FormCanvas(Canvas)>>draw:
          |                  7.6% {36ms} PasteUpMorph>>drawOn:
          |                    7.6% {36ms} PasteUpMorph(Morph)>>drawOn:
          |                      7.6% {36ms} FormCanvas(Canvas)>>fillRectangle:fillStyle:borderStyle:
[7.6% {36ms} FormCanvas>>fillRectangle:fillStyle:
[  7.6% {36ms} FormCanvas>>balloonFillRectangle:fillStyle:
[    7.6% {36ms} BalloonCanvas>>fillRectangle:fillStyle:
[      7.6% {36ms} BalloonCanvas>>drawRectangle:color:borderWidth:borderColor:
[        7.6% {36ms} BalloonEngine>>drawRectangle:fill:bor...borderColor:transform:
[          7.6% {36ms} BalloonEngine>>postFlushIfNeeded
[            7.6% {36ms} BalloonEngine>>copyBits
[              7.6% {36ms} BalloonEngine>>copyLoopFaster
        3.5% {17ms} PasteUpMorph>>startSteppingSubmorphsOf:
          3.5% {17ms} PasteUpMorph(Morph)>>arrangeToStartSteppingIn:

**Leaves**
16.9% {81ms} BalloonEngine>>copyLoopFaster
13.2% {63ms} Dictionary>>at:ifAbsent:
6.5% {31ms} GrafPort(BitBlt)>>sourceForm:
5.6% {27ms} Float(Number)>>//
5.6% {27ms} Array(SequenceableCollection)>>do:
5.6% {27ms} TTCFont>>displayString:on:from:to:at:kern:baselineY:
5.0% {24ms} MatrixTransform2x3 class>>withScale:
3.7% {18ms} Dictionary(Set)>>findElementOrNil:
3.5% {17ms} Float(Number)>>floor
3.5% {17ms} Rectangle>>setOrigin:corner:
3.3% {16ms} Dictionary>>at:ifAbsentPut:
3.3% {16ms} ByteString class(Object)>>hash
3.3% {16ms} GrafPort(BitBlt)>>sourceOrigin:
3.0% {14ms} Point>>extent:
2.4% {11ms} BalloonEngine>>registerFill:
2.2% {10ms} ByteSymbol(String)>>hash

**Memory**
	old			+832,264 bytes
	young		-549,516 bytes
	used		+282,748 bytes
	free		-282,748 bytes

**GCs**
	full			0 totalling 0ms (0.0% uptime)
	incr		47 totalling 37ms (8.0% uptime), avg 1.0ms
	tenures		1 (avg 47 GCs/tenure)
	root table	0 overflows
-------------- next part --------------
 - 50151 tallies, 50354 msec.

**Tree**
100.0% {50354ms} BookMorph>>nextPage
  100.0% {50354ms} BookMorph>>goToPage:
    100.0% {50354ms} BookMorph>>goToPage:transitionSpec:
      100.0% {50354ms} BookMorph>>goToPageMorph:transitionSpec:
        61.2% {30817ms} PasteUpMorph(Morph)>>updateCachedThumbnail
          |61.2% {30817ms} BookPageThumbnailMorph>>computeThumbnail
          |  61.2% {30817ms} PasteUpMorph(Morph)>>imageForm
          |    61.2% {30817ms} PasteUpMorph(Morph)>>imageFormForRectangle:
          |      61.2% {30817ms} PasteUpMorph(Morph)>>imageForm:forRectangle:
          |        61.2% {30817ms} FormCanvas(Canvas)>>fullDrawMorph:
          |          61.2% {30817ms} FormCanvas(Canvas)>>fullDraw:
          |            61.2% {30817ms} PasteUpMorph(Morph)>>fullDrawOn:
          |              61.2% {30817ms} PasteUpMorph>>drawSubmorphsOn:
          |                61.2% {30817ms} FormCanvas(Canvas)>>fullDrawMorph:
          |                  61.2% {30817ms} FormCanvas(Canvas)>>fullDraw:
          |                    61.2% {30817ms} TextMorph(Morph)>>fullDrawOn:
          |                      61.1% {30766ms} FormCanvas(Canvas)>>drawMorph:
[61.1% {30766ms} FormCanvas(Canvas)>>draw:
[  61.1% {30766ms} TextMorph>>drawOn:
[    61.1% {30766ms} FormCanvas>>paragraph:bounds:color:
[      61.1% {30766ms} MultiNewParagraph>>displayOn:using:at:
[        61.1% {30766ms} MultiDisplayScanner>>displayLine:offset:leftInRun:
[          29.2% {14703ms} TTCFont>>displayString:on:from:to:at:kern:baselineY:
[            |27.5% {13847ms} TTCFont>>glyphInfoOf:into:
[            |  20.0% {10071ms} TTCFont>>formOf:
[            |    |19.2% {9668ms} TTCFont>>computeForm:
[            |    |  17.8% {8963ms} TTGlyph>>asFormWithScale:ascender:...er:fgColor:bgColor:depth:
[            |    |    17.8% {8963ms} TTGlyph>>asFormWithScale:ascender:...Color:depth:replaceColor:
[            |    |      17.8% {8963ms} TTGlyph>>asFormWithScale:ascender:...:lingGlyphWidth:emphasis:
[            |    |        10.5% {5287ms} BalloonCanvas>>drawGeneralBezierShape...rderWidth:borderColor:
[            |    |          |7.7% {3877ms} BalloonCanvas>>ensuredEngine
[            |    |          |  |7.6% {3827ms} BalloonEngine class(Behavior)>>new
[            |    |          |  |  7.6% {3827ms} BalloonEngine>>initialize
[            |    |          |  |    7.0% {3525ms} BitBlt class>>toForm:
[[6.7% {3374ms} primitives
[            |    |          |2.6% {1309ms} BalloonEngine>>drawGeneralBezierShape...borderColor:transform:
[            |    |        3.6% {1813ms} Form class>>extent:depth:
[            |    |          |3.6% {1813ms} Form>>setExtent:depth:
[            |    |          |  3.6% {1813ms} primitives
[            |    |        2.8% {1410ms} Form(DisplayMedium)>>fillColor:
[            |  6.6% {3323ms} TTCFont>>ascentOf:
[            |    6.6% {3323ms} TTCFont>>ascent
[            |      4.4% {2216ms} TTCFont>>pixelSize
[            |        |4.4% {2216ms} TextStyle class>>pointsToPixels:
[            |        |  4.4% {2216ms} TextStyle class>>pixelsPerInch
[            |        |    4.1% {2065ms} Dictionary>>at:ifAbsentPut:
[            |        |      4.1% {2065ms} Dictionary>>at:ifAbsent:
[            |        |        3.0% {1511ms} Dictionary(Set)>>findElementOrNil:
[            |        |          2.7% {1360ms} Dictionary>>scanFor:
[            |      2.2% {1108ms} Float(Number)>>//
[          28.0% {14099ms} MultiDisplayScanner(MultiCharacterScanner)>>scanCharactersFrom...opConditions:kern:
[            |28.0% {14099ms} MultiDisplayScanner(MultiCharacterScanner)>>basicScanCharacter...opConditions:kern:
[            |  28.0% {14099ms} TTCFont>>widthOf:
[            |    26.4% {13293ms} TTCFont>>computeForm:
[            |      25.8% {12991ms} TTGlyph>>asFormWithScale:ascender:...er:fgColor:bgColor:depth:
[            |        25.8% {12991ms} TTGlyph>>asFormWithScale:ascender:...Color:depth:replaceColor:
[            |          25.8% {12991ms} TTGlyph>>asFormWithScale:ascender:...:lingGlyphWidth:emphasis:
[            |            19.8% {9970ms} BalloonCanvas>>drawGeneralBezierShape...rderWidth:borderColor:
[            |              |14.9% {7503ms} BalloonCanvas>>ensuredEngine
[            |              |  |14.2% {7150ms} BalloonEngine class(Behavior)>>new
[            |              |  |  14.2% {7150ms} BalloonEngine>>initialize
[            |              |  |    12.2% {6143ms} BitBlt class>>toForm:
[[12.2% {6143ms} primitives
[            |              |5.0% {2518ms} BalloonEngine>>drawGeneralBezierShape...borderColor:transform:
[            |              |  3.1% {1561ms} BalloonEngine>>registerFill:and:
[            |              |    3.1% {1561ms} BalloonEngine>>registerFills:
[            |              |      2.5% {1259ms} BalloonEngine>>registerFill:
[            |            2.8% {1410ms} Form(DisplayMedium)>>fillColor:
[          3.1% {1561ms} MultiDisplayScanner>>endOfRun
[            3.0% {1511ms} MultiDisplayScanner>>setStopConditions
[              3.0% {1511ms} MultiDisplayScanner>>setFont
[                3.0% {1511ms} MultiDisplayScanner(MultiCharacterScanner)>>setFont
[                  3.0% {1511ms} TTCFont>>widthOf:
[                    2.5% {1259ms} TTCFont>>computeForm:
[                      2.5% {1259ms} TTGlyph>>asFormWithScale:ascender:...er:fgColor:bgColor:depth:
[                        2.5% {1259ms} TTGlyph>>asFormWithScale:ascender:...Color:depth:replaceColor:
[                          2.5% {1259ms} TTGlyph>>asFormWithScale:ascender:...:lingGlyphWidth:emphasis:
        38.2% {19235ms} PasteUpMorph>>displayWorld
          38.2% {19235ms} PasteUpMorph>>privateOuterDisplayWorld
            38.2% {19235ms} WorldState>>displayWorld:submorphs:
              38.2% {19235ms} WorldState>>drawWorld:submorphs:invalidAreasOn:
                38.2% {19235ms} FormCanvas(Canvas)>>fullDrawMorph:
                  38.2% {19235ms} FormCanvas(Canvas)>>fullDraw:
                    38.2% {19235ms} BookMorph(Morph)>>fullDrawOn:
                      38.2% {19235ms} BookMorph(Morph)>>drawSubmorphsOn:
                        38.2% {19235ms} FormCanvas(Canvas)>>fullDrawMorph:
                          38.2% {19235ms} FormCanvas(Canvas)>>fullDraw:
                            38.2% {19235ms} PasteUpMorph(Morph)>>fullDrawOn:
                              37.4% {18832ms} PasteUpMorph>>drawSubmorphsOn:
                                37.4% {18832ms} FormCanvas(Canvas)>>fullDrawMorph:
[37.4% {18832ms} FormCanvas(Canvas)>>fullDraw:
[  37.4% {18832ms} TextMorph(Morph)>>fullDrawOn:
[    37.3% {18782ms} FormCanvas(Canvas)>>drawMorph:
[      37.3% {18782ms} FormCanvas(Canvas)>>draw:
[        37.3% {18782ms} TextMorph>>drawOn:
[          30.7% {15459ms} FormCanvas>>paragraph:bounds:color:
[            |30.7% {15459ms} MultiNewParagraph>>displayOn:using:at:
[            |  30.7% {15459ms} MultiDisplayScanner>>displayLine:offset:leftInRun:
[            |    16.1% {8107ms} TTCFont>>displayString:on:from:to:at:kern:baselineY:
[            |      |11.9% {5992ms} TTCFont>>glyphInfoOf:into:
[            |      |  6.9% {3474ms} TTCFont>>ascentOf:
[            |      |    |6.9% {3474ms} TTCFont>>ascent
[            |      |    |  4.7% {2367ms} TTCFont>>pixelSize
[            |      |    |    4.4% {2216ms} TextStyle class>>pointsToPixels:
[            |      |    |      4.4% {2216ms} TextStyle class>>pixelsPerInch
[            |      |    |        4.2% {2115ms} Dictionary>>at:ifAbsentPut:
[            |      |    |          3.6% {1813ms} Dictionary>>at:ifAbsent:
[            |      |  5.0% {2518ms} TTCFont>>formOf:
[            |      |    4.7% {2367ms} TTCFont>>computeForm:
[            |      |      3.8% {1913ms} TTGlyph>>asFormWithScale:ascender:...er:fgColor:bgColor:depth:
[            |      |        3.8% {1913ms} TTGlyph>>asFormWithScale:ascender:...Color:depth:replaceColor:
[            |      |          3.8% {1913ms} TTGlyph>>asFormWithScale:ascender:...:lingGlyphWidth:emphasis:
[            |      |            2.1% {1057ms} BalloonCanvas>>drawGeneralBezierShape...rderWidth:borderColor:
[            |    11.3% {5690ms} MultiDisplayScanner(MultiCharacterScanner)>>scanCharactersFrom...opConditions:kern:
[            |      11.3% {5690ms} MultiDisplayScanner(MultiCharacterScanner)>>basicScanCharacter...opConditions:kern:
[            |        11.2% {5640ms} TTCFont>>widthOf:
[            |          11.2% {5640ms} TTCFont>>computeForm:
[            |            9.8% {4935ms} TTGlyph>>asFormWithScale:ascender:...er:fgColor:bgColor:depth:
[            |              9.8% {4935ms} TTGlyph>>asFormWithScale:ascender:...Color:depth:replaceColor:
[            |                9.8% {4935ms} TTGlyph>>asFormWithScale:ascender:...:lingGlyphWidth:emphasis:
[            |                  5.8% {2921ms} BalloonCanvas>>drawGeneralBezierShape...rderWidth:borderColor:
[            |                    3.4% {1712ms} BalloonCanvas>>ensuredEngine
[            |                    2.4% {1208ms} BalloonEngine>>drawGeneralBezierShape...borderColor:transform:
[          6.6% {3323ms} TextMorph>>paragraph
[            6.6% {3323ms} MultiNewParagraph(NewParagraph)>>compose:style:from:in:
[              6.6% {3323ms} MultiNewParagraph(NewParagraph)>>composeAll
[                6.6% {3323ms} MultiNewParagraph(NewParagraph)>>composeLinesFrom:to:delta:into:priorLines:atY:
[                  6.6% {3323ms} TextComposer>>composeLinesFrom:to:del...ner:wantsColumnBreaks:
[                    6.6% {3323ms} TextComposer>>composeAllLines
[                      6.6% {3323ms} TextComposer>>composeOneLine
[                        6.6% {3323ms} TextComposer>>composeAllRectangles:
[                          6.6% {3323ms} TextComposer>>composeEachRectangleIn:
[                            6.4% {3223ms} CompositionScanner>>composeFrom:inRectan...leftSide:rightSide:
[                              6.1% {3072ms} CompositionScanner(CharacterScanner)>>scanCharactersFrom:to...stopConditions:kern:
[                                6.1% {3072ms} CompositionScanner(CharacterScanner)>>basicScanCharactersFr...stopConditions:kern:
[[6.1% {3072ms} TTCFont>>widthOf:
[[  5.8% {2921ms} TTCFont>>computeForm:
[[    4.6% {2316ms} TTGlyph>>asFormWithScale:ascender:...er:fgColor:bgColor:depth:
[[      4.6% {2316ms} TTGlyph>>asFormWithScale:ascender:...Color:depth:replaceColor:
[[        4.6% {2316ms} TTGlyph>>asFormWithScale:ascender:...:lingGlyphWidth:emphasis:
[[          2.9% {1460ms} BalloonCanvas>>drawGeneralBezierShape...rderWidth:borderColor:

**Leaves**
20.3% {10222ms} BitBlt class>>toForm:
6.1% {3072ms} Form>>setExtent:depth:
5.3% {2669ms} Rectangle>>setOrigin:corner:
3.6% {1813ms} Dictionary>>at:ifAbsent:
3.3% {1662ms} Point>>+
3.0% {1511ms} Dictionary>>scanFor:
3.0% {1511ms} Float(Number)>>//
2.8% {1410ms} Point>>*
2.5% {1259ms} Association>>key:value:
2.5% {1259ms} Form(DisplayMedium)>>fillColor:
2.2% {1108ms} Color>>pixelWordFor:filledWith:
2.2% {1108ms} TTCFont>>displayString:on:from:to:at:kern:baselineY:
2.1% {1057ms} BalloonEngine>>copyLoopFaster

**Memory**
	old			+1,565,496 bytes
	young		-1,278,376 bytes
	used		+287,120 bytes
	free		+1,279,316 bytes

**GCs**
	full			1 totalling 200ms (0.0% uptime), avg 200.0ms
	incr		518 totalling 1,117ms (2.0% uptime), avg 2.0ms
	tenures		2 (avg 259 GCs/tenure)
	root table	0 overflows


More information about the Squeak-dev mailing list