Hello guys.

I want to visualize DNA sequence alignments in Pharo 8. For this task most
bioinformatics applications set a background color for each letter. But in
Pharo the Inspector is too slow to open even for just one small sequence of
1Kb. Consider now there are about 37k sequences of COVID-19 and each genome
contains about 30k of letters, so visualizing and scrolling these should be
fast (as for zooming).

But have a look at this script which takes about 6 seconds to open an
Inspector. The script uses BioSmalltalk, and the code could be enhanced for
sure, but that is not relevant to my performance problem of visualization:

[
| text attributes |
" Generate a Text object from a random sequence "
text := ((BioSequence forAlphabet: BioDNAAlphabet) randomLength: 1000)
sequence asText.
" Setup an array for each nucleotide background color "
attributes := Array new: text size.
1 to: text size do: [ : index |
attributes at: index put: {
(TextBackgroundColor color: (BioDNAAlphabet colorMap at: (text at: index)))
}  ].
text runs: (RunArray newFrom: attributes).
text inspect
] timeToRun asString  "'0:00:00:05.911'"

Also, resizing the opened Inspector takes 2-3 seconds to refresh.
You can see the output here: https://imgur.com/a/xUlBeVY

I should say without the #inspect the code ran without performance issues:
"'0:00:00:00.009'"

So I ran again the script for different sequence sizes:

String streamContents: [ : stream |
100 to: 2000 by: 100 do: [ : sl |
stream nextPutAll: ([
| text attributes |
" Generate a Text object from a random sequence "
text := ((BioSequence forAlphabet: BioDNAAlphabet) randomLength: sl)
sequence asText.
" Setup an array for each nucleotide background color "
attributes := Array new: text size.
1 to: text size do: [ : index |
attributes at: index put: {
(TextBackgroundColor color: (BioDNAAlphabet colorMap at: (text at: index)))
}  ].
text runs: (RunArray newFrom: attributes).
text inspect
] timeToRun asString);
cr
]
]

And these are the results:

0:00:00:00.147
0:00:00:00.28
0:00:00:00.568
0:00:00:00.993
0:00:00:01.776
0:00:00:02.123
0:00:00:03.111
0:00:00:04.084
0:00:00:04.574
0:00:00:06.192
0:00:00:07.214
0:00:00:07.915
0:00:00:10.382
0:00:00:12.725
0:00:00:12.359
0:00:00:17.357
0:00:00:17.147
0:00:00:20.651
0:00:00:20.392
0:00:00:23.238

At first I thought it was a problem of the Glamout text renderer for Rubric
Text, but profiling a single pass of the snippet for 2000 letters, shows a
couple of methods in Rubric scanner, after some DNU sends, which are
consuming a lot of the time:
RubCharacterBlockScanner(RubCharacterBlockScanner) >>
characterBlockAtPoint:index:in: and
RubCharacterBlockScanner(RubCharacterBlockScanner) >> endOfRun". I attached
the full profiler report so you may have a look if you like. But the
summary is:

**Leaves**
37.4% {8800ms}
RubCompositionScanner(RubCharacterScanner)>>basicScanCharactersFrom:to:in:rightX:stopConditions:kern:
6.3% {1476ms} Dictionary>>at:ifAbsentPut:
6.1% {1425ms} Context>>unwindComplete
4.6% {1082ms} Semaphore>>criticalReleasingOnError:
4.2% {991ms} Dictionary>>at:ifAbsent:
3.3% {785ms} Context>>aboutToReturn:through:
2.2% {527ms} Context>>resume:through:
2.0% {470ms} ExternalAddress>>isNull
1.8% {421ms} BlockClosure>>on:do:
1.7% {402ms}
RubCharacterBlockScanner(RubCharacterScanner)>>setConditionArray:
1.6% {378ms} FreeTypeFace>>validate
1.6% {376ms} Dictionary>>scanFor:
1.5% {364ms} Context>>unwindComplete:
1.5% {344ms} Context>>unwindBlock
1.4% {323ms} Array(SequenceableCollection)>>do:
1.3% {299ms} Dictionary(HashedCollection)>>findElementOrNil:
1.2% {293ms} RunArray>>at:setRunOffsetAndValue:
1.2% {289ms} FreeTypeCache>>atFont:charCode:type:ifAbsentPut:
1.1% {252ms} FreeTypeCacheLinkedList>>moveDown:

**Memory**
old +0 bytes
young -1,485,272 bytes
used -1,485,272 bytes
free +1,485,272 bytes

**GCs**
full 0 totalling 0ms (0.0% uptime)
incr 947 totalling 1,576ms (7.0% uptime), avg 2.0ms
tenures 0
root table 0 overflows

So my question is, is there any other text rendering backends to try? And
when I say backends I say which don't use Rubric.

Cheers,

Hernán
 - 23517 tallies, 23528 msec.

**Tree**
--------------------------------
Process: (40s) Morphic UI Process: nil
--------------------------------
99.1% {23313ms} UndefinedObject>>DoIt
  99.0% {23300ms} Text(Object)>>inspect
    99.0% {23300ms} GTInspector class>>inspect:
      99.0% {23300ms} GTInspector class>>openOn:
        99.0% {23300ms} GTInspector>>openOn:
          99.0% {23300ms} GTInspector(GLMCompositePresentation)>>openOn:
            99.0% {23300ms} GTInspector(GLMCompositePresentation)>>openOn:with:
              99.0% {23298ms} GTInspector(GLMCompositePresentation)>>openWith:
                99.0% {23298ms} GLMMorphicRenderer>>open:
                  99.0% {23285ms} GLMMorphicWindowRenderer 
class(GLMMorphicWidgetRenderer class)>>render:from:
                    99.0% {23285ms} GLMMorphicWindowRenderer>>render:
                      98.9% {23274ms} 
GLMMorphicWindowRenderer(GLMMorphicWidgetRenderer)>>renderObject:
                        98.9% {23274ms} GLMMorphicRenderer(GLMRenderer)>>render:
                          98.9% {23274ms} 
GTInspector(GLMCompositePresentation)>>renderGlamorouslyOn:
                            98.9% {23274ms} 
GLMTabbedArrangement>>renderGlamorouslyOn:
                              98.9% {23274ms} 
GLMMorphicRenderer>>renderTabbedCompositePresentation:
                                98.9% {23274ms} GLMMorphicTabbedRenderer 
class(GLMMorphicWidgetRenderer class)>>render:from:
                                  98.9% {23274ms} 
GLMMorphicTabbedRenderer>>render:
                                    98.9% {23274ms} 
GLMMorphicTabbedRenderer(GLMMorphicWidgetRenderer)>>renderWithTitleOrNil:
                                      98.9% {23274ms} 
GLMMorphicTabbedRenderer(GLMMorphicWidgetRenderer)>>renderObject:
                                        98.9% {23274ms} 
GLMMorphicRenderer(GLMRenderer)>>render:
                                          98.9% {23274ms} 
GLMPager>>renderGlamorouslyOn:
                                            98.9% {23274ms} 
GLMMorphicRenderer>>renderPager:
                                              98.9% {23274ms} 
GLMMorphicPagerRenderer class(GLMMorphicWidgetRenderer class)>>render:from:
                                                98.9% {23274ms} 
GLMMorphicPagerRenderer>>render:
                                                  98.9% {23270ms} 
OrderedCollection>>do:
                                                    98.9% {23270ms} 
GLMMorphicPagerRenderer>>render:
                                                      98.9% {23268ms} 
GLMMorphicPagerRenderer(GLMMorphicWidgetRenderer)>>renderObject:
                                                        98.9% {23268ms} 
GLMMorphicRenderer(GLMRenderer)>>render:
                                                          98.9% {23268ms} 
GLMPane>>renderGlamorouslyOn:
                                                            98.9% {23268ms} 
GLMMorphicRenderer>>renderPane:
                                                              98.9% {23268ms} 
GLMMorphicPaneRenderer class(GLMMorphicWidgetRenderer class)>>render:from:
                                                                98.9% {23268ms} 
GLMMorphicPaneRenderer>>render:
                                                                  98.9% 
{23268ms} GLMMorphicPaneRenderer>>renderContainerFor:
                                                                    98.9% 
{23262ms} GLMMorphicPaneRenderer(GLMMorphicWidgetRenderer)>>renderObject:
                                                                      98.9% 
{23262ms} GLMMorphicRenderer(GLMRenderer)>>render:
                                                                        98.9% 
{23262ms} GLMCompositePresentation>>renderGlamorouslyOn:
                                                                          98.9% 
{23262ms} GLMTabbedArrangement>>renderGlamorouslyOn:
                                                                            
98.9% {23262ms} GLMMorphicRenderer>>renderTabbedCompositePresentation:
                                                                              
98.9% {23262ms} GLMMorphicTabbedRenderer class(GLMMorphicWidgetRenderer 
class)>>render:from:
                                                                                
98.9% {23262ms} GLMMorphicTabbedRenderer>>render:
                                                                                
  98.9% {23262ms} 
GLMMorphicTabbedRenderer(GLMMorphicWidgetRenderer)>>renderWithTitleOrNil:
                                                                                
    98.9% {23262ms} 
GLMMorphicTabbedRenderer(GLMMorphicWidgetRenderer)>>renderObject:
                                                                                
      98.9% {23262ms} GLMMorphicRenderer(GLMRenderer)>>render:
                                                                                
        98.9% {23262ms} GLMDynamicPresentation>>renderGlamorouslyOn:
                                                                                
          98.9% {23262ms} GLMMorphicRenderer>>renderDynamicPresentation:
                                                                                
            98.9% {23262ms} GLMMorphicDynamicRenderer 
class(GLMMorphicWidgetRenderer class)>>render:from:
                                                                                
              98.9% {23262ms} GLMMorphicDynamicRenderer>>render:
                                                                                
                98.9% {23260ms} 
GLMMorphicDynamicRenderer(GLMMorphicWidgetRenderer)>>renderObject:
                                                                                
                  98.9% {23260ms} GLMMorphicRenderer(GLMRenderer)>>render:
                                                                                
                    98.9% {23260ms} 
GLMCompositePresentation>>renderGlamorouslyOn:
                                                                                
                      98.9% {23260ms} GLMTabbedArrangement>>renderGlamorouslyOn:
                                                                                
                        98.9% {23260ms} 
GLMMorphicRenderer>>renderTabbedCompositePresentation:
                                                                                
                          98.9% {23260ms} GLMMorphicTabbedRenderer 
class(GLMMorphicWidgetRenderer class)>>render:from:
                                                                                
                            98.9% {23260ms} GLMMorphicTabbedRenderer>>render:
                                                                                
                              98.9% {23260ms} 
GLMMorphicTabbedRenderer(GLMMorphicWidgetRenderer)>>renderWithTitleOrNil:
                                                                                
                                98.9% {23260ms} 
GLMMorphicTabbedRenderer(GLMMorphicWidgetRenderer)>>renderObject:
                                                                                
                                  98.9% {23260ms} 
GLMMorphicRenderer(GLMRenderer)>>render:
                                                                                
                                    98.9% {23260ms} 
GLMCompositePresentation>>renderGlamorouslyOn:
                                                                                
                                      98.9% {23260ms} 
GLMTabbedArrangement>>renderGlamorouslyOn:
                                                                                
                                        98.9% {23260ms} 
GLMMorphicRenderer>>renderTabbedCompositePresentation:
                                                                                
                                          98.9% {23260ms} 
GLMMorphicTabbedRenderer class(GLMMorphicWidgetRenderer class)>>render:from:
                                                                                
                                            98.9% {23260ms} 
GLMMorphicTabbedRenderer>>render:
                                                                                
                                              98.8% {23252ms} 
GLMAnnouncer>>suspendAllWhile:
                                                                                
                                                98.8% {23252ms} 
BlockClosure>>ensure:
                                                                                
                                                  98.8% {23252ms} 
GLMMorphicTabbedRenderer>>render:
                                                                                
                                                    98.8% {23252ms} 
LazyTabGroupMorph(TabGroupMorph)>>selectedPageIndex:
                                                                                
                                                      98.8% {23252ms} 
GLMTabSelectorBrick>>selectedIndex:
                                                                                
                                                        98.8% {23252ms} 
GLMTabSelectorBrick(Morph)>>changed:with:
                                                                                
                                                          98.8% {23252ms} 
GLMTabSelectorBrick(Morph)>>doAnnounce:
                                                                                
                                                            98.8% {23252ms} 
Announcer>>announce:
                                                                                
                                                              98.8% {23252ms} 
SubscriptionRegistry>>deliver:
                                                                                
                                                                98.8% {23252ms} 
SubscriptionRegistry>>deliver:to:
                                                                                
                                                                  98.8% 
{23252ms} SubscriptionRegistry>>deliver:to:startingAt:
                                                                                
                                                                    98.8% 
{23252ms} BlockClosure>>ifCurtailed:
                                                                                
                                                                      98.8% 
{23252ms} SubscriptionRegistry>>deliver:to:startingAt:
                                                                                
                                                                        98.8% 
{23252ms} AnnouncementSubscription>>deliver:
                                                                                
                                                                          98.8% 
{23252ms} BlockClosure>>on:fork:
                                                                                
                                                                            
98.8% {23252ms} BlockClosure>>on:do:
                                                                                
                                                                              
98.8% {23252ms} AnnouncementSubscription>>deliver:
                                                                                
                                                                                
98.8% {23252ms} MessageSend>>cull:cull:
                                                                                
                                                                                
  98.8% {23252ms} MessageSend>>cull:
                                                                                
                                                                                
    98.8% {23252ms} MessageSend>>value:
                                                                                
                                                                                
      98.8% {23252ms} LazyTabGroupMorph(Morph)>>handleUpdate:
                                                                                
                                                                                
        98.8% {23252ms} MorphChangedWithArguments>>deliverTo:
                                                                                
                                                                                
          98.8% {23252ms} LazyTabGroupMorph(Object)>>update:with:
                                                                                
                                                                                
            98.8% {23252ms} LazyTabGroupMorph(TabGroupMorph)>>update:
                                                                                
                                                                                
              98.8% {23252ms} LazyTabGroupMorph>>updatePageIndex:
                                                                                
                                                                                
                98.8% {23252ms} LazyTabGroupMorph>>pageAt:
                                                                                
                                                                                
                  98.8% {23252ms} LazyTabPage>>actualPageMorph
                                                                                
                                                                                
                    98.8% {23252ms} GLMMorphicTabbedRenderer>>render:
                                                                                
                                                                                
                      98.8% {23252ms} 
GLMMorphicTabbedRenderer(GLMMorphicWidgetRenderer)>>renderObject:
                                                                                
                                                                                
                        98.8% {23252ms} GLMMorphicRenderer(GLMRenderer)>>render:
                                                                                
                                                                                
                          98.8% {23252ms} 
GLMRubricTextPresentation>>renderGlamorouslyOn:
                                                                                
                                                                                
                            98.8% {23252ms} 
GLMMorphicRenderer>>renderRubricTextPresentation:
                                                                                
                                                                                
                              98.8% {23252ms} GLMMorphicRubricTextRenderer 
class(GLMMorphicWidgetRenderer class)>>render:from:
                                                                                
                                                                                
                                98.8% {23252ms} 
GLMMorphicRubricTextRenderer>>render:
                                                                                
                                                                                
                                  97.1% {22842ms} 
GLMMorphicRubricTextRenderer>>morph
                                                                                
                                                                                
                                    |97.1% {22835ms} 
RubScrolledTextMorph>>model:
[97.1% {22835ms} RubScrolledTextMorph>>setTextWith:
[  97.0% {22831ms} RubTextScrollPane>>setTextWith:
[    97.0% {22831ms} RubEditingArea(RubAbstractTextArea)>>setTextWith:
[      97.0% {22831ms} 
RubEditingArea(RubAbstractTextArea)>>handleParagraphChange:
[        97.0% {22829ms} RubEditingArea(RubAbstractTextArea)>>compose
[          97.0% {22818ms} 
RubEditingArea(RubAbstractTextArea)>>markBackgroundColors
[            97.0% {22818ms} RunArray>>withStartStopAndValueDo:
[              97.0% {22818ms} Array(SequenceableCollection)>>with:do:
[                97.0% {22815ms} RunArray>>withStartStopAndValueDo:
[                  97.0% {22813ms} 
RubEditingArea(RubAbstractTextArea)>>markBackgroundColors
[                    97.0% {22813ms} Array(SequenceableCollection)>>do:
[                      97.0% {22813ms} 
RubEditingArea(RubAbstractTextArea)>>markBackgroundColors
[                        96.9% {22799ms} 
RubEditingArea(RubAbstractTextArea)>>addSegment:
[                          96.8% {22778ms} 
RubTextBackgroundColorSegmentMorph(RubTextSegmentMorph)>>inTextArea:
[                            96.8% {22778ms} 
RubTextBackgroundColorSegmentMorph(RubTextSegmentMorph)>>computeVertices
[                              96.8% {22778ms} 
RubTextBackgroundColorSegmentMorph(RubTextSegmentMorph)>>computeStraightVertices
[                                96.6% {22728ms} 
RubTextBackgroundColorSegmentMorph(RubTextSegmentMorph)>>characterBlockForIndex:
[                                  96.6% {22719ms} 
RubCurrentLineBarDecorator(RubParagraphDecorator)>>doesNotUnderstand:
[                                    96.6% {22717ms} BlockClosure>>on:do:
[                                      96.6% {22717ms} 
RubCurrentLineBarDecorator(RubParagraphDecorator)>>doesNotUnderstand:
[                                        96.6% {22717ms} Message>>sendTo:
[                                          96.6% {22717ms} 
RubExtraSelectionDecorator(RubParagraphDecorator)>>doesNotUnderstand:
[                                            96.5% {22713ms} 
BlockClosure>>on:do:
[                                              96.5% {22713ms} 
RubExtraSelectionDecorator(RubParagraphDecorator)>>doesNotUnderstand:
[                                                96.5% {22713ms} 
Message>>sendTo:
[                                                  96.5% {22713ms} 
RubOpeningClosingDelimiterDecorator(RubParagraphDecorator)>>doesNotUnderstand:
[                                                    96.5% {22713ms} 
BlockClosure>>on:do:
[                                                      96.5% {22711ms} 
RubOpeningClosingDelimiterDecorator(RubParagraphDecorator)>>doesNotUnderstand:
[                                                        96.5% {22711ms} 
Message>>sendTo:
[                                                          96.5% {22711ms} 
RubParagraph>>characterBlockForIndex:
[                                                            96.5% {22707ms} 
RubCharacterBlockScanner>>characterBlockAtPoint:index:in:
[                                                              46.4% {10909ms} 
RubCharacterBlockScanner(RubCharacterScanner)>>scanCharactersFrom:to:in:rightX:stopConditions:kern:
[                                                                |46.2% 
{10865ms} 
RubCharacterBlockScanner(RubCharacterScanner)>>basicScanCharactersFrom:to:in:rightX:stopConditions:kern:
[                                                                |  36.9% 
{8690ms} primitives
[                                                                |  7.9% 
{1859ms} LogicalFont>>widthAndKernedWidthOfLeft:right:into:
[                                                                |    6.4% 
{1500ms} FreeTypeFont>>widthAndKernedWidthOfLeft:right:into:
[                                                                |      |5.9% 
{1398ms} Dictionary>>at:ifAbsentPut:
[                                                                |      |  4.5% 
{1062ms} primitives
[                                                                |      |  1.4% 
{335ms} Dictionary>>at:ifAbsent:
[                                                                |    1.2% 
{279ms} LogicalFont>>realFont
[                                                                |      1.1% 
{265ms} FreeTypeFont>>validate
[                                                              30.5% {7174ms} 
RubCharacterBlockScanner>>endOfRun
[                                                                |28.5% 
{6713ms} RubCharacterBlockScanner>>setStopConditions
[                                                                |  |25.9% 
{6085ms} RubCharacterBlockScanner>>setFont
[                                                                |  |  |25.8% 
{6079ms} RubCharacterBlockScanner(RubCharacterScanner)>>setFont
[                                                                |  |  |  18.3% 
{4299ms} LogicalFont>>widthOf:
[                                                                |  |  |    
|17.6% {4130ms} FreeTypeFont>>widthOf:
[                                                                |  |  |    |  
17.4% {4091ms} FreeTypeFont>>linearWidthOf:
[                                                                |  |  |    |   
 17.0% {3990ms} FreeTypeCache>>atFont:charCode:type:ifAbsentPut:
[                                                                |  |  |    |   
   16.4% {3867ms} Semaphore>>criticalReleasingOnError:
[                                                                |  |  |    |   
     15.7% {3694ms} BlockClosure>>ensure:
[                                                                |  |  |    |   
       13.7% {3222ms} Semaphore>>criticalReleasingOnError:
[                                                                |  |  |    |   
         |13.7% {3222ms} BlockClosure>>on:do:
[                                                                |  |  |    |   
         |  12.8% {3013ms} FreeTypeCache>>atFont:charCode:type:ifAbsentPut:
[                                                                |  |  |    |   
         |    7.5% {1759ms} Context>>aboutToReturn:through:
[                                                                |  |  |    |   
         |      |5.4% {1265ms} Context>>return:through:
[                                                                |  |  |    |   
         |      |  |5.2% {1231ms} Context>>resume:through:
[                                                                |  |  |    |   
         |      |  |  3.0% {696ms} Context>>unwindComplete
[                                                                |  |  |    |   
         |      |1.6% {380ms} primitives
[                                                                |  |  |    |   
         |    3.2% {761ms} Dictionary>>at:ifAbsentPut:
[                                                                |  |  |    |   
         |      |2.3% {551ms} Dictionary>>at:ifAbsent:
[                                                                |  |  |    |   
         |      |  1.5% {348ms} Dictionary(HashedCollection)>>findElementOrNil:
[                                                                |  |  |    |   
         |    1.1% {254ms} FreeTypeCacheLinkedList>>moveDown:
[                                                                |  |  |    |   
       2.0% {472ms} Context>>resume:through:
[                                                                |  |  |    |   
         1.5% {363ms} Semaphore>>criticalReleasingOnError:
[                                                                |  |  |  2.7% 
{632ms} LogicalFont>>descentKern
[                                                                |  |  |    
|1.7% {411ms} LogicalFont>>realFont
[                                                                |  |  |    |  
1.6% {386ms} FreeTypeFont>>validate
[                                                                |  |  |  1.6% 
{371ms} Array(SequenceableCollection)>>do:
[                                                                |  |  |    
1.3% {314ms} primitives
[                                                                |  |1.7% 
{402ms} RubCharacterBlockScanner(RubCharacterScanner)>>setConditionArray:
[                                                                |1.3% {313ms} 
Text>>runLengthFor:
[                                                                |  1.2% 
{286ms} RunArray>>runLengthAt:
[                                                                |    1.2% 
{272ms} RunArray>>at:setRunOffsetAndValue:
[                                                              17.9% {4223ms} 
LogicalFont>>widthOf:
[                                                                16.8% {3963ms} 
FreeTypeFont>>widthOf:
[                                                                  |16.6% 
{3912ms} FreeTypeFont>>linearWidthOf:
[                                                                  |  16.2% 
{3817ms} FreeTypeCache>>atFont:charCode:type:ifAbsentPut:
[                                                                  |    15.7% 
{3701ms} Semaphore>>criticalReleasingOnError:
[                                                                  |      15.0% 
{3524ms} BlockClosure>>ensure:
[                                                                  |        
12.9% {3028ms} Semaphore>>criticalReleasingOnError:
[                                                                  |          
|12.9% {3028ms} BlockClosure>>on:do:
[                                                                  |          | 
 12.0% {2832ms} FreeTypeCache>>atFont:charCode:type:ifAbsentPut:
[                                                                  |          | 
   7.2% {1700ms} Context>>aboutToReturn:through:
[                                                                  |          | 
     |5.0% {1188ms} Context>>return:through:
[                                                                  |          | 
     |  |5.0% {1180ms} Context>>resume:through:
[                                                                  |          | 
     |  |  3.1% {720ms} Context>>unwindComplete
[                                                                  |          | 
     |1.7% {399ms} primitives
[                                                                  |          | 
   2.6% {611ms} Dictionary>>at:ifAbsentPut:
[                                                                  |          | 
     |1.8% {429ms} Dictionary>>at:ifAbsent:
[                                                                  |          | 
   1.1% {265ms} FreeTypeCacheLinkedList>>moveDown:
[                                                                  |        
2.1% {495ms} Context>>resume:through:
[                                                                  |          
1.5% {360ms} Semaphore>>criticalReleasingOnError:
[                                                                1.0% {239ms} 
LogicalFont>>realFont
                                                                                
                                                                                
                                  1.6% {366ms} RubScrolledTextMorph>>wrapped:
                                                                                
                                                                                
                                    1.6% {366ms} RubTextScrollPane>>wrapped:
[1.6% {366ms} RubTextScrollPane>>handleWrappingPolicyChange:
[  1.5% {364ms} RubTextScrollPane>>fitScrollTargetWidth
[    1.5% {364ms} RubEditingArea(Morph)>>width:
[      1.5% {364ms} RubEditingArea(RubAbstractTextArea)>>extent:
[        1.5% {364ms} RubEditingArea(RubAbstractTextArea)>>handleBoundsChange:
[          1.1% {252ms} RubEditingArea(RubAbstractTextArea)>>extent:
[            1.1% {250ms} RubParagraph>>extentFromClientBottomRight:
[              1.1% {250ms} RubParagraph>>compose
[                1.1% {250ms} RubParagraph>>disableDrawingWhile:
[                  1.1% {250ms} BlockClosure>>ensure:
[                    1.1% {250ms} RubParagraph>>compose

**Leaves**
37.4% {8800ms} 
RubCompositionScanner(RubCharacterScanner)>>basicScanCharactersFrom:to:in:rightX:stopConditions:kern:
6.3% {1476ms} Dictionary>>at:ifAbsentPut:
6.1% {1425ms} Context>>unwindComplete
4.6% {1082ms} Semaphore>>criticalReleasingOnError:
4.2% {991ms} Dictionary>>at:ifAbsent:
3.3% {785ms} Context>>aboutToReturn:through:
2.2% {527ms} Context>>resume:through:
2.0% {470ms} ExternalAddress>>isNull
1.8% {421ms} BlockClosure>>on:do:
1.7% {402ms} RubCharacterBlockScanner(RubCharacterScanner)>>setConditionArray:
1.6% {378ms} FreeTypeFace>>validate
1.6% {376ms} Dictionary>>scanFor:
1.5% {364ms} Context>>unwindComplete:
1.5% {344ms} Context>>unwindBlock
1.4% {323ms} Array(SequenceableCollection)>>do:
1.3% {299ms} Dictionary(HashedCollection)>>findElementOrNil:
1.2% {293ms} RunArray>>at:setRunOffsetAndValue:
1.2% {289ms} FreeTypeCache>>atFont:charCode:type:ifAbsentPut:
1.1% {252ms} FreeTypeCacheLinkedList>>moveDown:

**Memory**
        old                     +0 bytes
        young           -1,485,272 bytes
        used            -1,485,272 bytes
        free            +1,485,272 bytes

**GCs**
        full                    0 totalling 0ms (0.0% uptime)
        incr            947 totalling 1,576ms (7.0% uptime), avg 2.0ms
        tenures         0
        root table      0 overflows

Reply via email to