Morphic slowness (was Re: Does *anyone* use MVC?)
Tim Rowledge
tim at sumeru.stanford.edu
Thu Aug 1 22:51:57 UTC 2002
"Andreas Raab" <Andreas.Raab at gmx.de> is claimed by the authorities to have written:
> Tim,
>
> > > What performance problems are you seeing?
> > General tardiness in a non-descript way.
> [...]
> > I suppose we really need some good meaningful test scenarios
> > that can be automated and profiled to really try to sort this out.
>
> Well, then let's get started. You say that opening menus hurts?! So how
> about (from a workspace):
Hokay, on my Acorn this resuts in:-
- 2829 tallies, 66170 msec.
**Tree**
75.3% {49826ms} PasteUpMorph>>doOneCycleNow
|75.3% {49826ms} WorldState>>doOneCycleNowFor:
| 71.7% {47444ms} WorldState>>displayWorldSafely:
| |71.5% {47312ms} PasteUpMorph>>displayWorld
| | 71.4% {47245ms} PasteUpMorph>>privateOuterDisplayWorld
| | 71.4% {47245ms} WorldState>>displayWorld:submorphs:
| | 61.7% {40827ms} WorldState>>drawWorld:submorphs:invalidAreasOn:
| | |59.2% {39173ms} FormCanvas(Canvas)>>fullDrawMorph:
| | | 59.2% {39173ms} FormCanvas(Canvas)>>fullDraw:
| | | 59.2% {39173ms} SystemWindow(Morph)>>fullDrawOn:
| | | 54.7% {36195ms} SystemWindow(Morph)>>drawSubmorphsOn:
| | | |54.4% {35996ms} FormCanvas(Canvas)>>fullDrawMorph:
| | | | 54.3% {35930ms} FormCanvas(Canvas)>>fullDraw:
| | | | 54.3% {35930ms} AlignmentMorph(Morph)>>fullDrawOn:
| | | | 40.1% {26534ms} AlignmentMorph(Morph)>>drawSubmorphsOn:
| | | | |39.8% {26336ms} FormCanvas(Canvas)>>fullDrawMorph:
| | | | | 39.7% {26269ms} FormCanvas(Canvas)>>fullDraw:
[39.5% {26137ms} RectangleMorph(Morph)>>fullDrawOn:
[ 11.0% {7279ms} FormCanvas(Canvas)>>roundCornersOf:during:
[ |11.0% {7279ms} FormCanvas>>roundCornersOf:in:during:
[ | 10.5% {6948ms} CornerRounder class>>roundCornersOf:on:i...orderWidth:corners:
[ | 7.4% {4897ms} CornerRounder>>tweakCornersOf:on:in:borderWidth:corners:
[ | |2.2% {1456ms} Form(DisplayObject)>>displayOn:at:rule:
[ | 3.1% {2051ms} CornerRounder>>saveBitsUnderCornersOf:on:in:corners:
[ 10.8% {7146ms} IconicButton(Morph)>>drawSubmorphsOn:
[ |10.5% {6948ms} FormCanvas(Canvas)>>fullDrawMorph:
[ | 10.4% {6882ms} FormCanvas(Canvas)>>fullDraw:
[ | 10.3% {6816ms} SketchMorph(Morph)>>fullDrawOn:
[ | 3.1% {2051ms} TransformMorph>>drawSubmorphsOn:
[ | |3.0% {1985ms} FormCanvas(Canvas)>>fullDrawMorph:
[ | | 3.0% {1985ms} FormCanvas(Canvas)>>fullDraw:
[ | | 3.0% {1985ms} TextMorphForEditView(Morph)>>fullDrawOn:
[ | | 2.7% {1787ms} FormCanvas(Canvas)>>drawMorph:
[ | | 2.7% {1787ms} FormCanvas(Canvas)>>draw:
[ | 3.0% {1985ms} FormCanvas(Canvas)>>roundCornersOf:during:
[ | |3.0% {1985ms} FormCanvas>>roundCornersOf:in:during:
[ | | 2.9% {1919ms} CornerRounder class>>roundCornersOf:on:i...orderWidth:corners:
[ | 2.2% {1456ms} FormCanvas(Canvas)>>drawMorph:
[ | 2.2% {1456ms} FormCanvas(Canvas)>>draw:
[ 8.8% {5823ms} FormCanvas(Canvas)>>drawMorph:
[ |8.8% {5823ms} FormCanvas(Canvas)>>draw:
[ | 7.3% {4830ms} RectangleMorph(Morph)>>drawOn:
[ | 6.4% {4235ms} FormCanvas(Canvas)>>fillRectangle:fillStyle:borderStyle:
[ | 2.5% {1654ms} SimpleBorder>>frameRectangle:on:
[ | |2.4% {1588ms} FormCanvas>>frameAndFillRectangle:fi...Color:bottomRightColor:
[ | 2.1% {1390ms} FormCanvas>>fillRectangle:fillStyle:
[ 6.2% {4103ms} TransformMorph>>drawSubmorphsOn:
[ 5.7% {3772ms} FormCanvas(Canvas)>>fullDrawMorph:
[ 5.4% {3573ms} FormCanvas(Canvas)>>fullDraw:
[ 5.3% {3507ms} StringMorph(Morph)>>fullDrawOn:
[ 2.7% {1787ms} FormCanvas(Canvas)>>drawMorph:
[ 2.7% {1787ms} FormCanvas(Canvas)>>draw:
[ 2.7% {1787ms} StringMorph>>drawOn:
[ 2.6% {1720ms} FormCanvas(Canvas)>>drawString:in:font:color:
[ 2.6% {1720ms} FormCanvas>>drawString:from:to:in:font:color:
| | | | 10.4% {6882ms} FormCanvas(Canvas)>>drawMorph:
| | | | 10.4% {6882ms} FormCanvas(Canvas)>>draw:
| | | | 3.3% {2184ms} MenuItemMorph>>drawOn:
[2.9% {1919ms} MenuItemMorph(StringMorph)>>drawOn:
[ 2.9% {1919ms} FormCanvas(Canvas)>>drawString:in:font:color:
[ 2.9% {1919ms} FormCanvas>>drawString:from:to:in:font:color:
| | | | 2.3% {1522ms} ProjectViewMorph>>drawOn:
| | | | 2.1% {1390ms} PluggableListMorph>>drawOn:
| | | 3.7% {2448ms} FormCanvas(Canvas)>>drawMorph:
| | | 3.7% {2448ms} FormCanvas(Canvas)>>draw:
| | | 2.7% {1787ms} SystemWindow(Morph)>>drawOn:
| | | 2.6% {1720ms} FormCanvas(Canvas)>>fillRectangle:fillStyle:borderStyle:
| | 9.6% {6352ms} WorldState>>forceDamageToScreen:
| | 9.6% {6352ms} DisplayScreen>>forceDamageToScreen:
| | 9.5% {6286ms} DisplayScreen>>forceToScreen:
| 3.1% {2051ms} HandMorph>>processEvents
| 3.0% {1985ms} EventSensor>>nextEvent
| 3.0% {1985ms} EventSensor>>nextEventFromQueue
18.0% {11911ms} MenuMorph>>popUpAt:forHand:in:
|17.9% {11844ms} MenuMorph>>popUpAt:forHand:in:allowKeyboard:
| 15.7% {10389ms} PasteUpMorph>>addMorphFront:
| 15.7% {10389ms} PasteUpMorph(Morph)>>addMorphInFrontOfLayer:
| 15.7% {10389ms} PasteUpMorph(Morph)>>addMorph:inFrontOf:
| 15.7% {10389ms} PasteUpMorph(Morph)>>privateAddMorph:atIndex:
| 15.4% {10190ms} PasteUpMorph(Morph)>>addedOrRemovedSubmorph:
| 15.4% {10190ms} MenuMorph(Morph)>>fullBounds
| 15.4% {10190ms} MenuMorph(Morph)>>doLayoutIn:
| 13.7% {9065ms} TableLayout>>layout:in:
| 13.7% {9065ms} TableLayout>>layoutTopToBottom:in:
| 8.6% {5691ms} MenuItemMorph(Morph)>>layoutInBounds:
| |5.1% {3375ms} MenuItemMorph(Morph)>>bounds:
| | 2.7% {1787ms} MenuItemMorph(Morph)>>extent:
| | |2.5% {1654ms} MenuItemMorph(Morph)>>changed
| | | 2.1% {1390ms} MenuItemMorph(Morph)>>invalidRect:
| | | 2.1% {1390ms} MenuItemMorph(Morph)>>invalidRect:from:
| | 2.3% {1522ms} MenuItemMorph(Morph)>>position:
| 4.2% {2779ms} MenuItemMorph(Morph)>>minExtent
5.1% {3375ms} PluggableListMorph>>getMenu:
5.1% {3375ms} PluggableListMorph(ScrollPane)>>getMenu:
**Leaves**
9.5% {6286ms} DisplayScreen>>forceToScreen:
7.0% {4632ms} GrafPort>>copyBits
5.7% {3772ms} GrafPort(BitBlt)>>displayString:from:to:at:strikeFont:kern:
4.6% {3044ms} IdentityDictionary>>scanFor:
3.5% {2316ms} Point>>+
3.5% {2316ms} Rectangle class>>origin:corner:
3.0% {1985ms} EventSensor>>nextEventFromQueue
2.5% {1654ms} Form>>copyBits:from:at:clippingBox:rule:fillColor:map:
2.2% {1456ms} SmallInteger class(Behavior)>>inheritsFrom:
2.2% {1456ms} IdentityDictionary(Dictionary)>>at:ifAbsent:
**Memory**
old +194,044 bytes
young -98,752 bytes
used +95,292 bytes
free -95,292 bytes
**GCs**
full 0 totalling 0ms (0.0% uptime)
incr 328 totalling 4,470ms (7.0% uptime), avg 14.0ms
tenures 4 (avg 82 GCs/tenure)
root table 0 overflows
As you can see, its pretty slow - 66 seconds! Some observations - corner
rouding is turned off, so I'm a bit surprised to see CornerRounder in
there. #forceToScreen: is a big hit because I can't get it (in the vm)
to work without looking for all events (it should work, but it just
won't.) TableLayout? in a menu?
tim
--
Tim Rowledge, tim at sumeru.stanford.edu, http://sumeru.stanford.edu/tim
I modem, but they grew back.
More information about the Squeak-dev
mailing list
|