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):
selectItems := false. "if true, select all the menu items" Browser fullOnClass: Morph selector: #aboutToBeGrabbedBy:. World doOneCycleNow. MessageTally spyOn:[ World firstSubmorph "the app" allMorphsDo:[:m| (m isKindOf: ScrollPane) ifTrue:[ 1 to: 10 do:[:i| (m getMenu: false) ifNotNilDo:[:menu| menu popUpAt: m position forHand: m activeHand in: m world. World doOneCycleNow.
selectItems ifTrue:[ menu submorphs do:[:item| (item isKindOf: MenuItemMorph) ifTrue:[ menu selectItem: item event: m activeHand lastEvent. World doOneCycleNow. ]. ]. ]. menu delete. World doOneCycleNow. ]. ]. ]. ]. ].
That should give you a pretty decent hint about what is going on ;-)
Cheers, - Andreas