[Pharo-project] Rectangle>>intersects: change Rationale
Rectangle>>intersects: has been changed recently (GuillermoPolito 2/8/2013) rCorner x < origin x ifTrue: [ ^ false ]. rCorner y < origin y ifTrue: [ ^ false ]. rOrigin x > corner x ifTrue: [ ^ false ]. rOrigin y > corner y ifTrue: [ ^ false ]. these inequalities have been transformed into <= and >= Can someone point me to the issue number documenting this change? Nicolas
On 13 February 2013 22:55, Nicolas Cellier <nicolas.cellier.aka.nice@gmail.com> wrote:
Rectangle>>intersects: has been changed recently (GuillermoPolito 2/8/2013) rCorner x < origin x ifTrue: [ ^ false ]. rCorner y < origin y ifTrue: [ ^ false ]. rOrigin x > corner x ifTrue: [ ^ false ]. rOrigin y > corner y ifTrue: [ ^ false ].
these inequalities have been transformed into <= and >= Can someone point me to the issue number documenting this change?
well, we ran into following issue: (0@0 corner: 10@0) intersects: (0@0 corner: 100@100) => false but: (0@0 corner: 10@0) intersect: (0@0 corner: 100@100) => (0@0) corner: (10@0) but: (0@0 corner: 10@0) intersect: (0@0 corner: 100@100) ifNone: [ nil ] => nil now, since i was on a crusade to replace all senders of #intersect: with #intersect:ifNone: (for a good reason ;) this inconsistency strikes us back.. So, i really wonder whether we should relax conditions in #intersects: and change tests appropriately, or keep them as before.. but then how to deal with the above?
Nicolas
-- Best regards, Igor Stasenko.
Le 13/02/2013 22:32, Igor Stasenko a écrit :
now, since i was on a crusade to replace all senders of #intersect: with #intersect:ifNone: (for a good reason ;) this inconsistency strikes us back..
Oh, then I know who I have to send a bug report to with intersect:ifNone:... It's breaking the Announcer spy GUI. Thierry -- Thierry Goubier CEA list Laboratoire des Fondations des Systèmes Temps Réel Embarqués 91191 Gif sur Yvette Cedex France Phone/Fax: +33 (0) 1 69 08 32 92 / 83 95
Nicolas what I know is that with igor we fixed all the senders of fractions:offset: and after igor introduced intersect:ifNone: to avoid generating "wrong" rectangles with negative values. I thought that intersect: was deprecated. or the precondition should be clearer. Stef On Feb 13, 2013, at 9:55 PM, Nicolas Cellier <nicolas.cellier.aka.nice@gmail.com> wrote:
Rectangle>>intersects: has been changed recently (GuillermoPolito 2/8/2013) rCorner x < origin x ifTrue: [ ^ false ]. rCorner y < origin y ifTrue: [ ^ false ]. rOrigin x > corner x ifTrue: [ ^ false ]. rOrigin y > corner y ifTrue: [ ^ false ].
these inequalities have been transformed into <= and >= Can someone point me to the issue number documenting this change?
Nicolas
yes.. and i'd like to add that in some places i replaced senders of rect1 intersect: rect2 with: rect1 intersect: rect2 ifNone: [ self error: 'should not happen']. as it appears, it happens in some places... because of the above inconsistency. -- Best regards, Igor Stasenko.
I tried to put a halt in Rectangle>>setOrigin: topLeft corner: bottomRight in latest Pharo (20543) if width < 0 or height < 0 and of course the image hung... which means that degenerated Rectangles are pretty much in use I think I will juts raise a Notification, and catch it with a MessageTally hack to track the senders (as documented at http://bugs.squeak.org/bug_view_advanced_page.php?bug_id=6755 ) Nicolas 2013/2/13 Igor Stasenko <siguctua@gmail.com>:
yes.. and i'd like to add that in some places i replaced senders of
rect1 intersect: rect2
with:
rect1 intersect: rect2 ifNone: [ self error: 'should not happen'].
as it appears, it happens in some places... because of the above inconsistency.
-- Best regards, Igor Stasenko.
On 13 February 2013 23:47, Nicolas Cellier <nicolas.cellier.aka.nice@gmail.com> wrote:
I tried to put a halt in Rectangle>>setOrigin: topLeft corner: bottomRight in latest Pharo (20543) if width < 0 or height < 0 and of course the image hung... which means that degenerated Rectangles are pretty much in use
they are, because you can construct rectanges from two arbitrary points: rect := (100@100) corner: (0@0).. but internally, Rectangle should check that and do correct rearrangement and then answer correct values on: left => 0 top => 0 right => 100 bottom => 100 width => 100 height => 100 that was the final goal of all refactorings (make sure that internally , Rectangle stores coordinates in right order, regardless of what you supplied as origin & corner). But that was requiring to review all users of rects where it assumed that once they put origin>corner it will be like that.. (like offsets in frames etc).. so, this last change was not done.. because it is scary one ;) we need to test if it will work.
I think I will juts raise a Notification, and catch it with a MessageTally hack to track the senders (as documented at http://bugs.squeak.org/bug_view_advanced_page.php?bug_id=6755 )
Nicolas
2013/2/13 Igor Stasenko <siguctua@gmail.com>:
yes.. and i'd like to add that in some places i replaced senders of
rect1 intersect: rect2
with:
rect1 intersect: rect2 ifNone: [ self error: 'should not happen'].
as it appears, it happens in some places... because of the above inconsistency.
-- Best regards, Igor Stasenko.
-- Best regards, Igor Stasenko.
So here is what I did: Notification subclass: #DegeneratedRectangle instanceVariableNames: '' classVariableNames: '' poolDictionaries: '' category: 'Kernel-BasicObjects' Rectangle>>setOrigin: topLeft corner: bottomRight origin := topLeft. corner := bottomRight. (self width < 0 or: [ self height < 0 ]) ifTrue: [ DegeneratedRectangle signal ] Then in a workspace: tally := MessageTally new. tally spyEvery: 100 on: ['em ezilaitini ot si siht' reverse]. tally class: World class method: World class>>#doOneCycle. "middle lines begin" tallyEnd := false. [(Delay forSeconds: 300) wait. tallyEnd := true] fork. [[World doOneCycle. Processor yield.tallyEnd] whileFalse] on: DegeneratedRectangle do: [:exc | tally tally: exc signalerContext by: 1. exc resume]. (StringHolder new contents: (String streamContents: [:s | tally report: s])) openLabel: 'DegeneratedRectangle Spy Results'. "middle lines end" tally close. and here we go: - 371 tallies, 2 msec. **Tree** -------------------------------- Process: other processes -------------------------------- 38.3% {1ms} NautilusUI(AbstractNautilusUI)>>browseMessages 38.3% {1ms} NautilusUI(AbstractTool)>>browseMessagesFrom: 38.3% {1ms} NautilusUI(AbstractTool)>>getSelectorAndSendQuery:to:with:selector: 38.3% {1ms} SystemNavigation>>browseAllImplementorsOf: 38.3% {1ms} SystemNavigation>>browseImplementorsOf:name:autoSelect: 38.3% {1ms} SystemNavigation>>browseMessageList:name:autoSelect: 38.3% {1ms} MessageBrowser class>>openMessageList:name:autoSelect: 38.3% {1ms} MessageBrowser>>openWithSpec 38.3% {1ms} MessageBrowser(ComposableModel)>>openWithSpec 38.3% {1ms} MessageBrowser(ComposableModel)>>openWithSpec: 38.3% {1ms} WindowModel>>openWithSpec: 32.1% {1ms} WindowModel>>buildWithSpec: |24.8% {0ms} WindowModel>>addModelIn:withSpec: | |22.9% {0ms} MessageBrowser(ComposableModel)>>buildWithSpec: | | |19.4% {0ms} SpecInterpreter class>>buildWidgetFor:withSpec: | | | |19.4% {0ms} SpecInterpreter class>>interpretASpec:model: | | | | 19.4% {0ms} SpecInterpreter class>>interpretASpec:model:superSpec: | | | | 19.4% {0ms} SpecInterpreter class>>private_interpretASpec:model:superSpec: | | | | 19.4% {0ms} SpecInterpreter>>interpretASpec:model:superSpec: | | | | 19.4% {0ms} SpecInterpreter>>interpretASpec: | | | | 19.4% {0ms} SpecInterpreter class>>private_interpretASpec:model:superSpec: | | | | 19.4% {0ms} SpecInterpreter>>interpretASpec:model:superSpec: | | | | 19.4% {0ms} SpecInterpreter>>interpretASpec: | | | | 19.4% {0ms} SpecInterpreter>>retreiveSpecFrom: | | | | 9.7% {0ms} SpecInterpreter class>>private_interpretASpec:model:superSpec: | | | | |9.7% {0ms} SpecInterpreter>>interpretASpec:model:superSpec: | | | | | 9.7% {0ms} SpecInterpreter>>interpretASpec: | | | | | 9.7% {0ms} SpecInterpreter class>>private_interpretASpec:model:superSpec: | | | | | 9.7% {0ms} SpecInterpreter>>interpretASpec:model:superSpec: | | | | | 9.7% {0ms} SpecInterpreter>>interpretASpec: | | | | | 9.7% {0ms} SpecInterpreter>>retreiveSpecFrom: | | | | | 4.9% {0ms} SpecInterpreter class>>private_interpretASpec:model:superSpec: | | | | | |4.9% {0ms} SpecInterpreter>>interpretASpec:model:superSpec: | | | | | | 4.9% {0ms} SpecInterpreter>>interpretASpec: | | | | | | 4.9% {0ms} MultiColumnListModel(ComposableModel)>>private_buildWithSpec | | | | | | 4.9% {0ms} MultiColumnListModel(ComposableModel)>>private_buildWithSpec: | | | | | | 4.9% {0ms} SpecInterpreter class>>private_buildWidgetFor:withSpec: | | | | | | 4.9% {0ms} SpecInterpreter class>>private_interpretASpec:model: | | | | | | 4.9% {0ms} SpecInterpreter>>interpretASpec:model: | | | | | | 4.9% {0ms} SpecInterpreter>>interpretASpec:model:superSpec: | | | | | | 4.9% {0ms} SpecInterpreter>>interpretASpec: | | | | | | 2.7% {0ms} SpecInterpreter class>>private_interpretASpec:model:superSpec: | | | | | | |2.7% {0ms} SpecInterpreter>>interpretASpec:model:superSpec: | | | | | | | 2.7% {0ms} SpecInterpreter>>interpretASpec: | | | | | | | 2.7% {0ms} DropListModel(ComposableModel)>>private_buildWithSpec | | | | | | | 2.7% {0ms} DropListModel(ComposableModel)>>private_buildWithSpec: | | | | | | | 2.7% {0ms} SpecInterpreter class>>private_buildWidgetFor:withSpec: | | | | | | | 2.7% {0ms} SpecInterpreter class>>private_interpretASpec:model: | | | | | | | 2.7% {0ms} SpecInterpreter>>interpretASpec:model: | | | | | | | 2.7% {0ms} SpecInterpreter>>interpretASpec:model:superSpec: | | | | | | | 2.7% {0ms} SpecInterpreter>>interpretASpec: | | | | | | | 2.7% {0ms} SpecInterpreter>>actionToPerformWithSelector:arguments: | | | | | | | 2.7% {0ms} DropListSpec(AbstractSpec)>>instance | | | | | | | 2.7% {0ms} DropListSpec(AbstractSpec)>>initializeInstance | | | | | | | 2.7% {0ms} SpecInterpreter class>>private_interpretASpec:model: | | | | | | | 2.7% {0ms} SpecInterpreter>>interpretASpec:model: | | | | | | | 2.7% {0ms} SpecInterpreter>>interpretASpec:model:superSpec: | | | | | | | 2.7% {0ms} SpecInterpreter>>interpretASpec: | | | | | | | 2.7% {0ms} SpecInterpreter>>retreiveSpecFrom: | | | | | | | 1.3% {0ms} SpecInterpreter class>>private_interpretASpec:model:superSpec: | | | | | | | |1.3% {0ms} SpecInterpreter>>interpretASpec:model:superSpec: | | | | | | | | 1.3% {0ms} SpecInterpreter>>interpretASpec: | | | | | | | | 1.3% {0ms} SpecInterpreter>>convertSymbolOfClassToInstance: | | | | | | | | 1.3% {0ms} DropListMorph class(Behavior)>>new | | | | | | | | 1.3% {0ms} DropListMorph>>initialize | | | | | | | 1.3% {0ms} RawSpec>>defaultReceiver:model: | | | | | | | 1.3% {0ms} SpecInterpreter class>>private_interpretASpec:model: | | | | | | | 1.3% {0ms} SpecInterpreter>>interpretASpec:model: | | | | | | | 1.3% {0ms} SpecInterpreter>>interpretASpec:model:superSpec: | | | | | | | 1.3% {0ms} SpecInterpreter>>interpretASpec: | | | | | | | 1.3% {0ms} SpecInterpreter>>convertSymbolOfClassToInstance: | | | | | | | 1.3% {0ms} DropListMorph class(Behavior)>>new | | | | | | | 1.3% {0ms} DropListMorph>>initialize | | | | | | 2.2% {0ms} SpecInterpreter>>actionToPerformWithSelector:arguments: | | | | | | 2.2% {0ms} MultiColumnListSpec(AbstractSpec)>>instance | | | | | | 2.2% {0ms} MultiColumnListSpec(AbstractSpec)>>initializeInstance | | | | | | 2.2% {0ms} SpecInterpreter class>>private_interpretASpec:model: | | | | | | 2.2% {0ms} SpecInterpreter>>interpretASpec:model: | | | | | | 2.2% {0ms} SpecInterpreter>>interpretASpec:model:superSpec: | | | | | | 2.2% {0ms} SpecInterpreter>>interpretASpec: | | | | | | 2.2% {0ms} SpecInterpreter>>retreiveSpecFrom: | | | | | 4.9% {0ms} RawSpec>>defaultReceiver:model: | | | | | 4.9% {0ms} SpecInterpreter class>>private_interpretASpec:model: | | | | | 4.9% {0ms} SpecInterpreter>>interpretASpec:model: | | | | | 4.9% {0ms} SpecInterpreter>>interpretASpec:model:superSpec: | | | | | 4.9% {0ms} SpecInterpreter>>interpretASpec: | | | | | 4.9% {0ms} MultiColumnListModel(ComposableModel)>>private_buildWithSpec | | | | | 4.9% {0ms} MultiColumnListModel(ComposableModel)>>private_buildWithSpec: | | | | | 4.9% {0ms} SpecInterpreter class>>private_buildWidgetFor:withSpec: | | | | | 4.9% {0ms} SpecInterpreter class>>private_interpretASpec:model: | | | | | 4.9% {0ms} SpecInterpreter>>interpretASpec:model: | | | | | 4.9% {0ms} SpecInterpreter>>interpretASpec:model:superSpec: | | | | | 4.9% {0ms} SpecInterpreter>>interpretASpec: | | | | | 2.7% {0ms} SpecInterpreter class>>private_interpretASpec:model:superSpec: | | | | | |2.7% {0ms} SpecInterpreter>>interpretASpec:model:superSpec: | | | | | | 2.7% {0ms} SpecInterpreter>>interpretASpec: | | | | | | 2.7% {0ms} DropListModel(ComposableModel)>>private_buildWithSpec | | | | | | 2.7% {0ms} DropListModel(ComposableModel)>>private_buildWithSpec: | | | | | | 2.7% {0ms} SpecInterpreter class>>private_buildWidgetFor:withSpec: | | | | | | 2.7% {0ms} SpecInterpreter class>>private_interpretASpec:model: | | | | | | 2.7% {0ms} SpecInterpreter>>interpretASpec:model: | | | | | | 2.7% {0ms} SpecInterpreter>>interpretASpec:model:superSpec: | | | | | | 2.7% {0ms} SpecInterpreter>>interpretASpec: | | | | | | 2.7% {0ms} SpecInterpreter>>actionToPerformWithSelector:arguments: | | | | | | 2.7% {0ms} DropListSpec(AbstractSpec)>>instance | | | | | | 2.7% {0ms} DropListSpec(AbstractSpec)>>initializeInstance | | | | | | 2.7% {0ms} SpecInterpreter class>>private_interpretASpec:model: | | | | | | 2.7% {0ms} SpecInterpreter>>interpretASpec:model: | | | | | | 2.7% {0ms} SpecInterpreter>>interpretASpec:model:superSpec: | | | | | | 2.7% {0ms} SpecInterpreter>>interpretASpec: | | | | | | 2.7% {0ms} SpecInterpreter>>retreiveSpecFrom: | | | | | | 1.3% {0ms} SpecInterpreter class>>private_interpretASpec:model:superSpec: | | | | | | |1.3% {0ms} SpecInterpreter>>interpretASpec:model:superSpec: | | | | | | | 1.3% {0ms} SpecInterpreter>>interpretASpec: | | | | | | | 1.3% {0ms} SpecInterpreter>>convertSymbolOfClassToInstance: | | | | | | | 1.3% {0ms} DropListMorph class(Behavior)>>new | | | | | | | 1.3% {0ms} DropListMorph>>initialize | | | | | | 1.3% {0ms} RawSpec>>defaultReceiver:model: | | | | | | 1.3% {0ms} SpecInterpreter class>>private_interpretASpec:model: | | | | | | 1.3% {0ms} SpecInterpreter>>interpretASpec:model: | | | | | | 1.3% {0ms} SpecInterpreter>>interpretASpec:model:superSpec: | | | | | | 1.3% {0ms} SpecInterpreter>>interpretASpec: | | | | | | 1.3% {0ms} SpecInterpreter>>convertSymbolOfClassToInstance: | | | | | | 1.3% {0ms} DropListMorph class(Behavior)>>new | | | | | | 1.3% {0ms} DropListMorph>>initialize | | | | | 2.2% {0ms} SpecInterpreter>>actionToPerformWithSelector:arguments: | | | | | 2.2% {0ms} MultiColumnListSpec(AbstractSpec)>>instance | | | | | 2.2% {0ms} MultiColumnListSpec(AbstractSpec)>>initializeInstance | | | | | 2.2% {0ms} SpecInterpreter class>>private_interpretASpec:model: | | | | | 2.2% {0ms} SpecInterpreter>>interpretASpec:model: | | | | | 2.2% {0ms} SpecInterpreter>>interpretASpec:model:superSpec: | | | | | 2.2% {0ms} SpecInterpreter>>interpretASpec: | | | | | 2.2% {0ms} SpecInterpreter>>retreiveSpecFrom: | | | | 9.7% {0ms} RawSpec>>defaultReceiver:model: | | | | 9.7% {0ms} SpecInterpreter class>>private_interpretASpec:model: | | | | 9.7% {0ms} SpecInterpreter>>interpretASpec:model: | | | | 9.7% {0ms} SpecInterpreter>>interpretASpec:model:superSpec: | | | | 9.7% {0ms} SpecInterpreter>>interpretASpec: | | | | 9.7% {0ms} SpecInterpreter class>>private_interpretASpec:model:superSpec: | | | | 9.7% {0ms} SpecInterpreter>>interpretASpec:model:superSpec: | | | | 9.7% {0ms} SpecInterpreter>>interpretASpec: | | | | 9.7% {0ms} SpecInterpreter>>retreiveSpecFrom: | | | | 4.9% {0ms} SpecInterpreter class>>private_interpretASpec:model:superSpec: | | | | |4.9% {0ms} SpecInterpreter>>interpretASpec:model:superSpec: | | | | | 4.9% {0ms} SpecInterpreter>>interpretASpec: | | | | | 4.9% {0ms} MultiColumnListModel(ComposableModel)>>private_buildWithSpec | | | | | 4.9% {0ms} MultiColumnListModel(ComposableModel)>>private_buildWithSpec: | | | | | 4.9% {0ms} SpecInterpreter class>>private_buildWidgetFor:withSpec: | | | | | 4.9% {0ms} SpecInterpreter class>>private_interpretASpec:model: | | | | | 4.9% {0ms} SpecInterpreter>>interpretASpec:model: | | | | | 4.9% {0ms} SpecInterpreter>>interpretASpec:model:superSpec: | | | | | 4.9% {0ms} SpecInterpreter>>interpretASpec: | | | | | 2.7% {0ms} SpecInterpreter class>>private_interpretASpec:model:superSpec: | | | | | |2.7% {0ms} SpecInterpreter>>interpretASpec:model:superSpec: | | | | | | 2.7% {0ms} SpecInterpreter>>interpretASpec: | | | | | | 2.7% {0ms} DropListModel(ComposableModel)>>private_buildWithSpec | | | | | | 2.7% {0ms} DropListModel(ComposableModel)>>private_buildWithSpec: | | | | | | 2.7% {0ms} SpecInterpreter class>>private_buildWidgetFor:withSpec: | | | | | | 2.7% {0ms} SpecInterpreter class>>private_interpretASpec:model: | | | | | | 2.7% {0ms} SpecInterpreter>>interpretASpec:model: | | | | | | 2.7% {0ms} SpecInterpreter>>interpretASpec:model:superSpec: | | | | | | 2.7% {0ms} SpecInterpreter>>interpretASpec: | | | | | | 2.7% {0ms} SpecInterpreter>>actionToPerformWithSelector:arguments: | | | | | | 2.7% {0ms} DropListSpec(AbstractSpec)>>instance | | | | | | 2.7% {0ms} DropListSpec(AbstractSpec)>>initializeInstance | | | | | | 2.7% {0ms} SpecInterpreter class>>private_interpretASpec:model: | | | | | | 2.7% {0ms} SpecInterpreter>>interpretASpec:model: | | | | | | 2.7% {0ms} SpecInterpreter>>interpretASpec:model:superSpec: | | | | | | 2.7% {0ms} SpecInterpreter>>interpretASpec: | | | | | | 2.7% {0ms} SpecInterpreter>>retreiveSpecFrom: | | | | | | 1.3% {0ms} SpecInterpreter class>>private_interpretASpec:model:superSpec: | | | | | | |1.3% {0ms} SpecInterpreter>>interpretASpec:model:superSpec: | | | | | | | 1.3% {0ms} SpecInterpreter>>interpretASpec: | | | | | | | 1.3% {0ms} SpecInterpreter>>convertSymbolOfClassToInstance: | | | | | | | 1.3% {0ms} DropListMorph class(Behavior)>>new | | | | | | | 1.3% {0ms} DropListMorph>>initialize | | | | | | 1.3% {0ms} RawSpec>>defaultReceiver:model: | | | | | | 1.3% {0ms} SpecInterpreter class>>private_interpretASpec:model: | | | | | | 1.3% {0ms} SpecInterpreter>>interpretASpec:model: | | | | | | 1.3% {0ms} SpecInterpreter>>interpretASpec:model:superSpec: | | | | | | 1.3% {0ms} SpecInterpreter>>interpretASpec: | | | | | | 1.3% {0ms} SpecInterpreter>>convertSymbolOfClassToInstance: | | | | | | 1.3% {0ms} DropListMorph class(Behavior)>>new | | | | | | 1.3% {0ms} DropListMorph>>initialize | | | | | 2.2% {0ms} SpecInterpreter>>actionToPerformWithSelector:arguments: | | | | | 2.2% {0ms} MultiColumnListSpec(AbstractSpec)>>instance | | | | | 2.2% {0ms} MultiColumnListSpec(AbstractSpec)>>initializeInstance | | | | | 2.2% {0ms} SpecInterpreter class>>private_interpretASpec:model: | | | | | 2.2% {0ms} SpecInterpreter>>interpretASpec:model: | | | | | 2.2% {0ms} SpecInterpreter>>interpretASpec:model:superSpec: | | | | | 2.2% {0ms} SpecInterpreter>>interpretASpec: | | | | | 2.2% {0ms} SpecInterpreter>>retreiveSpecFrom: | | | | 4.9% {0ms} RawSpec>>defaultReceiver:model: | | | | 4.9% {0ms} SpecInterpreter class>>private_interpretASpec:model: | | | | 4.9% {0ms} SpecInterpreter>>interpretASpec:model: | | | | 4.9% {0ms} SpecInterpreter>>interpretASpec:model:superSpec: | | | | 4.9% {0ms} SpecInterpreter>>interpretASpec: | | | | 4.9% {0ms} MultiColumnListModel(ComposableModel)>>private_buildWithSpec | | | | 4.9% {0ms} MultiColumnListModel(ComposableModel)>>private_buildWithSpec: | | | | 4.9% {0ms} SpecInterpreter class>>private_buildWidgetFor:withSpec: | | | | 4.9% {0ms} SpecInterpreter class>>private_interpretASpec:model: | | | | 4.9% {0ms} SpecInterpreter>>interpretASpec:model: | | | | 4.9% {0ms} SpecInterpreter>>interpretASpec:model:superSpec: | | | | 4.9% {0ms} SpecInterpreter>>interpretASpec: | | | | 2.7% {0ms} SpecInterpreter class>>private_interpretASpec:model:superSpec: | | | | |2.7% {0ms} SpecInterpreter>>interpretASpec:model:superSpec: | | | | | 2.7% {0ms} SpecInterpreter>>interpretASpec: | | | | | 2.7% {0ms} DropListModel(ComposableModel)>>private_buildWithSpec | | | | | 2.7% {0ms} DropListModel(ComposableModel)>>private_buildWithSpec: | | | | | 2.7% {0ms} SpecInterpreter class>>private_buildWidgetFor:withSpec: | | | | | 2.7% {0ms} SpecInterpreter class>>private_interpretASpec:model: | | | | | 2.7% {0ms} SpecInterpreter>>interpretASpec:model: | | | | | 2.7% {0ms} SpecInterpreter>>interpretASpec:model:superSpec: | | | | | 2.7% {0ms} SpecInterpreter>>interpretASpec: | | | | | 2.7% {0ms} SpecInterpreter>>actionToPerformWithSelector:arguments: | | | | | 2.7% {0ms} DropListSpec(AbstractSpec)>>instance | | | | | 2.7% {0ms} DropListSpec(AbstractSpec)>>initializeInstance | | | | | 2.7% {0ms} SpecInterpreter class>>private_interpretASpec:model: | | | | | 2.7% {0ms} SpecInterpreter>>interpretASpec:model: | | | | | 2.7% {0ms} SpecInterpreter>>interpretASpec:model:superSpec: | | | | | 2.7% {0ms} SpecInterpreter>>interpretASpec: | | | | | 2.7% {0ms} SpecInterpreter>>retreiveSpecFrom: | | | | | 1.3% {0ms} SpecInterpreter class>>private_interpretASpec:model:superSpec: | | | | | |1.3% {0ms} SpecInterpreter>>interpretASpec:model:superSpec: | | | | | | 1.3% {0ms} SpecInterpreter>>interpretASpec: | | | | | | 1.3% {0ms} SpecInterpreter>>convertSymbolOfClassToInstance: | | | | | | 1.3% {0ms} DropListMorph class(Behavior)>>new | | | | | | 1.3% {0ms} DropListMorph>>initialize | | | | | 1.3% {0ms} RawSpec>>defaultReceiver:model: | | | | | 1.3% {0ms} SpecInterpreter class>>private_interpretASpec:model: | | | | | 1.3% {0ms} SpecInterpreter>>interpretASpec:model: | | | | | 1.3% {0ms} SpecInterpreter>>interpretASpec:model:superSpec: | | | | | 1.3% {0ms} SpecInterpreter>>interpretASpec: | | | | | 1.3% {0ms} SpecInterpreter>>convertSymbolOfClassToInstance: | | | | | 1.3% {0ms} DropListMorph class(Behavior)>>new | | | | | 1.3% {0ms} DropListMorph>>initialize | | | | 2.2% {0ms} SpecInterpreter>>actionToPerformWithSelector:arguments: | | | | 2.2% {0ms} MultiColumnListSpec(AbstractSpec)>>instance | | | | 2.2% {0ms} MultiColumnListSpec(AbstractSpec)>>initializeInstance | | | | 2.2% {0ms} SpecInterpreter class>>private_interpretASpec:model: | | | | 2.2% {0ms} SpecInterpreter>>interpretASpec:model: | | | | 2.2% {0ms} SpecInterpreter>>interpretASpec:model:superSpec: | | | | 2.2% {0ms} SpecInterpreter>>interpretASpec: | | | | 2.2% {0ms} SpecInterpreter>>retreiveSpecFrom: | | |3.5% {0ms} MessageBrowser(ComposableModel)>>ensureExtentFor: | | | 3.5% {0ms} PanelMorph(Morph)>>extent: | | | 3.5% {0ms} PanelMorph(Morph)>>changed | | | 3.5% {0ms} PanelMorph(Morph)>>privateFullBounds | | | 3.5% {0ms} PanelMorph(Morph)>>submorphBounds | | | 3.5% {0ms} PanelMorph(Morph)>>fullBounds | | | 3.5% {0ms} PanelMorph(Morph)>>doLayoutIn: | | | 3.5% {0ms} ProportionalLayout>>layout:in: | | | 3.5% {0ms} PluggableTextMorph(Morph)>>layoutProportionallyIn: | | | 3.2% {0ms} PluggableTextMorph(Morph)>>layoutInBounds: | | | 2.7% {0ms} PluggableTextMorph(Morph)>>bounds: | | | 1.6% {0ms} PluggableTextMorph>>extent: | |1.9% {0ms} StandardWindow(SystemWindow)>>addMorph:frame: | | 1.9% {0ms} StandardWindow(SystemWindow)>>addMorph:fullFrame: | | 1.9% {0ms} PanelMorph>>adoptPaneColor: | | 1.9% {0ms} PanelMorph(Morph)>>color: | | 1.9% {0ms} PanelMorph(Morph)>>changed | | 1.9% {0ms} PanelMorph(Morph)>>privateFullBounds | | 1.9% {0ms} PanelMorph(Morph)>>submorphBounds | | 1.9% {0ms} PanelMorph(Morph)>>fullBounds | | 1.9% {0ms} PanelMorph(Morph)>>doLayoutIn: | | 1.9% {0ms} ProportionalLayout>>layout:in: | | 1.9% {0ms} PluggableTextMorph(Morph)>>layoutProportionallyIn: | | 1.6% {0ms} PluggableTextMorph(Morph)>>layoutInBounds: |7.3% {0ms} SpecInterpreter class>>private_buildWidgetFor:withSpec: | 7.3% {0ms} SpecInterpreter class>>private_interpretASpec:model: | 7.3% {0ms} SpecInterpreter>>interpretASpec:model: | 7.3% {0ms} SpecInterpreter>>interpretASpec:model:superSpec: | 7.3% {0ms} SpecInterpreter>>interpretASpec: | 7.3% {0ms} SpecInterpreter>>actionToPerformWithSelector:arguments: | 7.3% {0ms} WindowSpec(AbstractSpec)>>instance | 7.3% {0ms} WindowSpec>>initializeInstance | 7.3% {0ms} StandardWindow class(Behavior)>>new | 7.3% {0ms} StandardWindow>>initialize | 3.8% {0ms} StandardWindow(SystemWindow)>>initialize | |3.5% {0ms} StandardWindow(SystemWindow)>>extent: | | 3.5% {0ms} StandardWindow(Morph)>>extent: | | 3.5% {0ms} StandardWindow(Morph)>>changed | | 3.5% {0ms} StandardWindow(Morph)>>privateFullBounds | | 3.5% {0ms} StandardWindow(Morph)>>submorphBounds | | 3.5% {0ms} AlignmentMorph(Morph)>>fullBounds | | 3.2% {0ms} AlignmentMorph(Morph)>>doLayoutIn: | | 3.2% {0ms} RowLayout>>layout:in: | | 3.0% {0ms} Point>>extent: | | 3.0% {0ms} Rectangle class>>origin:extent: | | 3.0% {0ms} Rectangle>>setOrigin:corner: | 3.5% {0ms} StandardWindow(SystemWindow)>>setWindowColor: | 3.5% {0ms} StandardWindow(SystemWindow)>>setStripeColorsFrom: | 3.5% {0ms} StandardWindow(Morph)>>fillStyle: | 3.5% {0ms} StandardWindow(Morph)>>changed | 3.5% {0ms} StandardWindow(Morph)>>privateFullBounds | 3.5% {0ms} StandardWindow(Morph)>>submorphBounds | 3.5% {0ms} AlignmentMorph(Morph)>>fullBounds | 3.2% {0ms} AlignmentMorph(Morph)>>doLayoutIn: | 3.2% {0ms} RowLayout>>layout:in: | 3.0% {0ms} Point>>extent: | 3.0% {0ms} Rectangle class>>origin:extent: | 3.0% {0ms} Rectangle>>setOrigin:corner: 6.2% {0ms} StandardWindow(Morph)>>openInWorld 6.2% {0ms} StandardWindow(SystemWindow)>>openInWorld: 3.5% {0ms} StandardWindow(Morph)>>bounds: |3.5% {0ms} StandardWindow(SystemWindow)>>position: | 3.5% {0ms} StandardWindow(Morph)>>position: | 3.5% {0ms} StandardWindow(Morph)>>fullBounds | 3.5% {0ms} StandardWindow(Morph)>>doLayoutIn: | 3.5% {0ms} ProportionalLayout>>layout:in: | 3.5% {0ms} AlignmentMorph(Morph)>>layoutProportionallyIn: | 3.5% {0ms} AlignmentMorph(Morph)>>fullBounds | 3.2% {0ms} AlignmentMorph(Morph)>>doLayoutIn: | 3.2% {0ms} RowLayout>>layout:in: | 3.0% {0ms} Point>>extent: | 3.0% {0ms} Rectangle class>>origin:extent: | 3.0% {0ms} Rectangle>>setOrigin:corner: 2.7% {0ms} StandardWindow>>openAsIsIn: 2.7% {0ms} StandardWindow(SystemWindow)>>openAsIsIn: 2.7% {0ms} StandardWindow(SystemWindow)>>activate 2.7% {0ms} StandardWindow(SystemWindow)>>navigateFocusForward 2.7% {0ms} StandardWindow(Morph)>>navigateFocusForward 2.7% {0ms} PluggableTextMorph(Morph)>>takeKeyboardFocus 2.7% {0ms} HandMorph>>newKeyboardFocus: 2.7% {0ms} PluggableTextMorph>>keyboardFocusChange: 2.7% {0ms} TextMorphForEditView(Morph)>>takeKeyboardFocus 2.7% {0ms} HandMorph>>newKeyboardFocus: 2.7% {0ms} TextMorphForEditView>>keyboardFocusChange: 2.7% {0ms} SmalltalkEditor(TextEditor)>>focused: 2.7% {0ms} SmalltalkEditingState>>focused:from: 2.7% {0ms} SmalltalkEditingState(EditingState)>>focused:from: 2.7% {0ms} EditorFindReplaceDialogWindow class>>on: 2.7% {0ms} EditorFindReplaceDialogWindow>>on: 2.7% {0ms} EditorFindReplaceDialogWindow(StandardWindow)>>model: 2.7% {0ms} EditorFindReplaceDialogWindow(SystemWindow)>>model: 2.7% {0ms} EditorFindReplaceDialogWindow(Morph)>>fillStyle: 2.7% {0ms} EditorFindReplaceDialogWindow(Morph)>>changed 2.7% {0ms} EditorFindReplaceDialogWindow(Morph)>>privateFullBounds 2.7% {0ms} EditorFindReplaceDialogWindow(Morph)>>submorphBounds 2.7% {0ms} AlignmentMorph(Morph)>>fullBounds 2.4% {0ms} AlignmentMorph(Morph)>>doLayoutIn: 2.4% {0ms} RowLayout>>layout:in: 2.2% {0ms} Point>>extent: 2.2% {0ms} Rectangle class>>origin:extent: 2.2% {0ms} Rectangle>>setOrigin:corner: 38.3% {1ms} MethodToolbar>>versionMethod 38.3% {1ms} AbstractTool>>browseVersionsFrom: 38.3% {1ms} VersionsBrowser class>>browseVersionsOf:class:meta:category:selector: 38.3% {1ms} VersionsBrowser class>>browseVersionsOf:class:meta:category:selector:lostMethodPointer: 38.3% {1ms} VersionsBrowser class(ChangeList class)>>open:name:multiSelect: 38.3% {1ms} VersionsBrowser class(ChangeList class)>>openAsMorph:name:multiSelect: 38.3% {1ms} VersionsBrowser(ChangeList)>>openAsMorphName:multiSelect: 28.0% {1ms} SystemWindow(Morph)>>openInWorld |28.0% {1ms} SystemWindow>>openInWorld: | 15.1% {0ms} SystemWindow(Morph)>>bounds: | |15.1% {0ms} SystemWindow>>position: | | 15.1% {0ms} SystemWindow(Morph)>>position: | | 15.1% {0ms} SystemWindow(Morph)>>fullBounds | | 15.1% {0ms} SystemWindow(Morph)>>doLayoutIn: | | 14.8% {0ms} ProportionalLayout>>layout:in: | | 14.8% {0ms} AlignmentMorph(Morph)>>layoutProportionallyIn: | | 13.2% {0ms} AlignmentMorph(Morph)>>fullBounds | | |12.9% {0ms} AlignmentMorph(Morph)>>doLayoutIn: | | | 12.4% {0ms} ProportionalLayout>>layout:in: | | | 12.4% {0ms} PanelMorph(Morph)>>layoutProportionallyIn: | | | 11.9% {0ms} PanelMorph(Morph)>>layoutInBounds: | | | 10.2% {0ms} PanelMorph(Morph)>>bounds: | | | 8.1% {0ms} PanelMorph(Morph)>>position: | | | 6.5% {0ms} PanelMorph(Morph)>>fullBounds | | | 5.7% {0ms} PanelMorph(Morph)>>doLayoutIn: | | | 4.0% {0ms} TableLayout>>layout:in: | | | |3.2% {0ms} TableLayout>>placeCells:in:horizontal:target: | | | | 3.2% {0ms} PluggableTextMorph(Morph)>>layoutInBounds: | | | | 3.2% {0ms} PluggableTextMorph(Morph)>>bounds: | | | | 3.2% {0ms} PluggableTextMorph>>extent: | | | | 1.6% {0ms} TextMorphForEditView(TextMorph)>>extent: | | | | 1.3% {0ms} PluggableTextMorph(ScrollPane)>>extent: | | | 1.6% {0ms} PanelMorph(Morph)>>privateFullBounds | | 1.6% {0ms} AlignmentMorph(Morph)>>layoutInBounds: | | 1.6% {0ms} AlignmentMorph(Morph)>>bounds: | 12.9% {0ms} SystemWindow>>openAsIsIn: | 12.7% {0ms} SystemWindow>>activate | 12.7% {0ms} SystemWindow>>basicActivate | 7.8% {0ms} SystemWindow(Morph)>>changed | |7.8% {0ms} SystemWindow(Morph)>>privateFullBounds | | 7.8% {0ms} SystemWindow(Morph)>>submorphBounds | | 7.8% {0ms} AlignmentMorph(Morph)>>fullBounds | | 7.8% {0ms} AlignmentMorph(Morph)>>doLayoutIn: | | 7.8% {0ms} ProportionalLayout>>layout:in: | | 7.8% {0ms} PanelMorph(Morph)>>layoutProportionallyIn: | | 7.8% {0ms} PanelMorph(Morph)>>fullBounds | | 7.8% {0ms} PanelMorph(Morph)>>doLayoutIn: | | 7.8% {0ms} TableLayout>>layout:in: | | 6.2% {0ms} TableLayout>>placeCells:in:horizontal:target: | | |6.2% {0ms} DiffMorph(Morph)>>layoutInBounds: | | | 6.2% {0ms} DiffMorph(Morph)>>bounds: | | | 5.7% {0ms} DiffMorph>>extent: | | | 5.7% {0ms} DiffMorph>>calibrateScrollbar | | | 5.7% {0ms} DiffMorph(Morph)>>fullBounds | | | 5.7% {0ms} DiffMorph(Morph)>>doLayoutIn: | | | 5.7% {0ms} ProportionalLayout>>layout:in: | | | 5.7% {0ms} PanelMorph(Morph)>>layoutProportionallyIn: | | | 5.4% {0ms} PanelMorph(Morph)>>layoutInBounds: | | | 4.6% {0ms} PanelMorph(Morph)>>bounds: | | | 3.5% {0ms} PanelMorph(Morph)>>position: | | | 2.7% {0ms} PanelMorph(Morph)>>fullBounds | | | 2.2% {0ms} PanelMorph(Morph)>>doLayoutIn: | | | 1.3% {0ms} PanelMorph(Morph)>>privateFullBounds | | 1.6% {0ms} TableLayout>>computeCellSizes:in:horizontal: | | 1.6% {0ms} DiffMorph(Morph)>>minExtent | | 1.6% {0ms} ProportionalLayout>>minExtentOf:in: | | 1.6% {0ms} PanelMorph(Morph)>>minExtent | | 1.6% {0ms} PanelMorph(Morph)>>layoutBounds | 4.9% {0ms} VersionsBrowser(CodeHolder)>>modelWakeUpIn: | 4.9% {0ms} VersionsBrowser>>updateListsAndCodeIn: | 4.9% {0ms} VersionsBrowser>>reformulateList | 4.9% {0ms} VersionsBrowser>>contentsChanged | 4.9% {0ms} VersionsBrowser>>buildDiffCodePane | 4.9% {0ms} VersionsBrowser>>buildDiffMorphFromOldString:toNewString:contextClass: | 4.6% {0ms} DiffMorph class(Behavior)>>new | 4.6% {0ms} DiffMorph>>initialize | 4.6% {0ms} DiffMorph>>extent: | 4.6% {0ms} DiffMorph>>calibrateScrollbar | 4.6% {0ms} DiffMorph(Morph)>>fullBounds | 4.6% {0ms} DiffMorph(Morph)>>doLayoutIn: | 2.7% {0ms} DiffMorph(Morph)>>privateFullBounds | |2.7% {0ms} DiffMorph(Morph)>>submorphBounds | | 2.7% {0ms} PanelMorph(Morph)>>fullBounds | | 2.2% {0ms} PanelMorph(Morph)>>doLayoutIn: | | 1.3% {0ms} PanelMorph(Morph)>>privateFullBounds | 1.9% {0ms} ProportionalLayout>>layout:in: | 1.9% {0ms} PanelMorph(Morph)>>layoutProportionallyIn: | 1.6% {0ms} PanelMorph(Morph)>>layoutInBounds: 3.8% {0ms} SystemWindow class>>labelled: |3.8% {0ms} SystemWindow class(Behavior)>>new | 3.8% {0ms} SystemWindow>>initialize | 3.5% {0ms} SystemWindow>>extent: | 3.5% {0ms} SystemWindow(Morph)>>extent: | 3.5% {0ms} SystemWindow(Morph)>>changed | 3.5% {0ms} SystemWindow(Morph)>>privateFullBounds | 3.5% {0ms} SystemWindow(Morph)>>submorphBounds | 3.5% {0ms} AlignmentMorph(Morph)>>fullBounds | 3.2% {0ms} AlignmentMorph(Morph)>>doLayoutIn: | 3.2% {0ms} RowLayout>>layout:in: | 3.0% {0ms} Point>>extent: | 3.0% {0ms} Rectangle class>>origin:extent: | 3.0% {0ms} Rectangle>>setOrigin:corner: 3.5% {0ms} SystemWindow>>model: |3.5% {0ms} SystemWindow(Morph)>>fillStyle: | 3.5% {0ms} SystemWindow(Morph)>>changed | 3.5% {0ms} SystemWindow(Morph)>>privateFullBounds | 3.5% {0ms} SystemWindow(Morph)>>submorphBounds | 3.5% {0ms} AlignmentMorph(Morph)>>fullBounds | 3.2% {0ms} AlignmentMorph(Morph)>>doLayoutIn: | 3.2% {0ms} RowLayout>>layout:in: | 3.0% {0ms} Point>>extent: | 3.0% {0ms} Rectangle class>>origin:extent: | 3.0% {0ms} Rectangle>>setOrigin:corner: 1.9% {0ms} VersionsBrowser(CodeHolder)>>addLowerPanesTo:at:with: 1.9% {0ms} VersionsBrowser(CodeHolder)>>addOptionalButtonsTo:at:plus: 17.5% {0ms} ToolRegistry>>openClassBrowser 17.5% {0ms} Nautilus class>>open 17.5% {0ms} Nautilus class>>openInEnvironment: 17.5% {0ms} Nautilus>>open 17.5% {0ms} NautilusUI>>open 17.5% {0ms} NautilusUI(AbstractNautilusUI)>>open 7.3% {0ms} NautilusWindow class(Behavior)>>new |7.3% {0ms} NautilusWindow(StandardWindow)>>initialize | 3.8% {0ms} NautilusWindow(SystemWindow)>>initialize | |3.5% {0ms} NautilusWindow(SystemWindow)>>extent: | | 3.5% {0ms} NautilusWindow(Morph)>>extent: | | 3.5% {0ms} NautilusWindow(Morph)>>changed | | 3.5% {0ms} NautilusWindow(Morph)>>privateFullBounds | | 3.5% {0ms} NautilusWindow(Morph)>>submorphBounds | | 3.5% {0ms} AlignmentMorph(Morph)>>fullBounds | | 3.2% {0ms} AlignmentMorph(Morph)>>doLayoutIn: | | 3.2% {0ms} RowLayout>>layout:in: | | 3.0% {0ms} Point>>extent: | | 3.0% {0ms} Rectangle class>>origin:extent: | | 3.0% {0ms} Rectangle>>setOrigin:corner: | 3.5% {0ms} NautilusWindow(SystemWindow)>>setWindowColor: | 3.5% {0ms} NautilusWindow(SystemWindow)>>setStripeColorsFrom: | 3.5% {0ms} NautilusWindow(Morph)>>fillStyle: | 3.5% {0ms} NautilusWindow(Morph)>>changed | 3.5% {0ms} NautilusWindow(Morph)>>privateFullBounds | 3.5% {0ms} NautilusWindow(Morph)>>submorphBounds | 3.5% {0ms} AlignmentMorph(Morph)>>fullBounds | 3.2% {0ms} AlignmentMorph(Morph)>>doLayoutIn: | 3.2% {0ms} RowLayout>>layout:in: | 3.0% {0ms} Point>>extent: | 3.0% {0ms} Rectangle class>>origin:extent: | 3.0% {0ms} Rectangle>>setOrigin:corner: 6.7% {0ms} NautilusUI>>addAll: |5.7% {0ms} NautilusUI>>buildColumns:height: | 1.3% {0ms} NautilusUI>>buildNavigationList | 1.3% {0ms} DropListMorph class>>on:list:selected:changeSelected: | 1.3% {0ms} DropListMorph class(Behavior)>>new | 1.3% {0ms} DropListMorph>>initialize 3.5% {0ms} NautilusWindow(Morph)>>openInWorld 3.5% {0ms} NautilusWindow(SystemWindow)>>openInWorld: 3.5% {0ms} NautilusWindow(Morph)>>bounds: 3.5% {0ms} NautilusWindow(SystemWindow)>>position: 3.5% {0ms} NautilusWindow(Morph)>>position: 3.5% {0ms} NautilusWindow(Morph)>>fullBounds 3.5% {0ms} NautilusWindow(Morph)>>doLayoutIn: 3.5% {0ms} ProportionalLayout>>layout:in: 3.5% {0ms} AlignmentMorph(Morph)>>layoutProportionallyIn: 3.5% {0ms} AlignmentMorph(Morph)>>fullBounds 3.2% {0ms} AlignmentMorph(Morph)>>doLayoutIn: 3.2% {0ms} RowLayout>>layout:in: 3.0% {0ms} Point>>extent: 3.0% {0ms} Rectangle class>>origin:extent: 3.0% {0ms} Rectangle>>setOrigin:corner: 3.2% {0ms} WorldState>>doOneCycleNowFor: 3.2% {0ms} HandMorph>>processEvents 3.2% {0ms} HandMorph>>handleEvent: 3.2% {0ms} HandMorph>>sendMouseEvent: 3.2% {0ms} HandMorph>>sendEvent:focus:clear: 3.2% {0ms} PasteUpMorph(Morph)>>processEvent: 3.2% {0ms} PasteUpMorph>>processEvent:using: 3.2% {0ms} PasteUpMorph(Morph)>>processEvent:using: 3.2% {0ms} MorphicEventDispatcher>>dispatchEvent:with: 3.2% {0ms} MorphicEventDispatcher>>dispatchMouseDown:with: 3.2% {0ms} PasteUpMorph(Morph)>>handleEvent: 3.2% {0ms} MouseButtonEvent>>sentTo: 3.2% {0ms} PasteUpMorph(Morph)>>handleMouseDown: 3.2% {0ms} PasteUpMorph>>mouseDown: 3.2% {0ms} PasteUpMorph>>invokeWorldMenu: 3.2% {0ms} MenuMorph>>popUpEvent:in: 3.2% {0ms} MenuMorph>>popUpAt:forHand:in: 3.2% {0ms} MenuMorph>>popUpAt:forHand:in:allowKeyboard: 3.2% {0ms} MenuMorph>>positionAt:relativeTo:inWorld: 3.2% {0ms} MenuMorph(Morph)>>fullBounds 3.2% {0ms} MenuMorph(Morph)>>doLayoutIn: 3.2% {0ms} TableLayout>>layout:in: 3.2% {0ms} TableLayout>>layoutTopToBottom:in: 2.4% {0ms} AlignmentMorph(Morph)>>layoutInBounds: 1.6% {0ms} AlignmentMorph(Morph)>>bounds: 1.6% {0ms} AlignmentMorph(Morph)>>position: 1.6% {0ms} AlignmentMorph(Morph)>>fullBounds 1.3% {0ms} AlignmentMorph(Morph)>>doLayoutIn: 2.7% {0ms} NautilusWindow(SystemWindow)>>closeBoxHit 2.7% {0ms} NautilusWindow>>delete 2.7% {0ms} NautilusWindow(StandardWindow)>>delete 2.7% {0ms} NautilusWindow(SystemWindow)>>delete 2.7% {0ms} SystemWindow class>>noteTopWindowIn: 2.7% {0ms} SystemWindow>>activate 2.7% {0ms} SystemWindow>>navigateFocusForward 2.7% {0ms} SystemWindow(Morph)>>navigateFocusForward 2.7% {0ms} PluggableTextMorph(Morph)>>takeKeyboardFocus 2.7% {0ms} HandMorph>>newKeyboardFocus: 2.7% {0ms} PluggableTextMorph>>keyboardFocusChange: 2.7% {0ms} TextMorphForEditView(Morph)>>takeKeyboardFocus 2.7% {0ms} HandMorph>>newKeyboardFocus: 2.7% {0ms} TextMorphForEditView>>keyboardFocusChange: 2.7% {0ms} SmalltalkEditor(TextEditor)>>focused: 2.7% {0ms} SmalltalkEditingState>>focused:from: 2.7% {0ms} SmalltalkEditingState(EditingState)>>focused:from: 2.7% {0ms} EditorFindReplaceDialogWindow class>>on: 2.7% {0ms} EditorFindReplaceDialogWindow>>on: 2.7% {0ms} EditorFindReplaceDialogWindow(StandardWindow)>>model: 2.7% {0ms} EditorFindReplaceDialogWindow(SystemWindow)>>model: 2.7% {0ms} EditorFindReplaceDialogWindow(Morph)>>fillStyle: 2.7% {0ms} EditorFindReplaceDialogWindow(Morph)>>changed 2.7% {0ms} EditorFindReplaceDialogWindow(Morph)>>privateFullBounds 2.7% {0ms} EditorFindReplaceDialogWindow(Morph)>>submorphBounds 2.7% {0ms} AlignmentMorph(Morph)>>fullBounds 2.4% {0ms} AlignmentMorph(Morph)>>doLayoutIn: 2.4% {0ms} RowLayout>>layout:in: 2.2% {0ms} Point>>extent: 2.2% {0ms} Rectangle class>>origin:extent: 2.2% {0ms} Rectangle>>setOrigin:corner: **Leaves** 100.0% {2ms} Rectangle>>setOrigin:corner: **Memory** old +0 bytes young +4,588 bytes used +4,588 bytes free -4,588 bytes **GCs** full 0 totalling 0ms (0.0% uptime) incr 0 totalling 0ms (0.0% uptime) tenures 0 root table 0 overflows My feeling is that you are not thru with degenerated rectangles :) You'd better enforce the invariant in http://code.google.com/p/pharo/issues/detail?id=2601 rathert than remove it as requested in http://code.google.com/p/pharo/issues/detail?id=2441 Nicolas 2013/2/13 Nicolas Cellier <nicolas.cellier.aka.nice@gmail.com>:
I tried to put a halt in Rectangle>>setOrigin: topLeft corner: bottomRight in latest Pharo (20543) if width < 0 or height < 0 and of course the image hung... which means that degenerated Rectangles are pretty much in use
I think I will juts raise a Notification, and catch it with a MessageTally hack to track the senders (as documented at http://bugs.squeak.org/bug_view_advanced_page.php?bug_id=6755 )
Nicolas
2013/2/13 Igor Stasenko <siguctua@gmail.com>:
yes.. and i'd like to add that in some places i replaced senders of
rect1 intersect: rect2
with:
rect1 intersect: rect2 ifNone: [ self error: 'should not happen'].
as it appears, it happens in some places... because of the above inconsistency.
-- Best regards, Igor Stasenko.
On 14 February 2013 00:01, Nicolas Cellier <nicolas.cellier.aka.nice@gmail.com> wrote:
So here is what I did: .....
My feeling is that you are not thru with degenerated rectangles :) You'd better enforce the invariant in http://code.google.com/p/pharo/issues/detail?id=2601 rathert than remove it as requested in http://code.google.com/p/pharo/issues/detail?id=2441
After replacement of intersect: with intersect:ifNone: there is no need to enforcing invariants in #intersect: anymore, because users can decide by themselves what to do if two rects are not intersecting.. the behavior of #intersect: for non-intersecting rects is totally absurd and changing it to answer empty rect (like with all zeroes) is not a good solution either, comparing to providing a closure to handle it.
Nicolas
-- Best regards, Igor Stasenko.
Please use my MessageTally trick above and you'll unfortunately see that intersect: is just one producer of empty Rectangle among many... So I think that the ifNone: protection is quite vain given the flow of empty rectangles, user is not in control at all, it's an illusion, and that a reasonnable decision is to enforce the invariant. It's not ideal, but it's a wiser decision in the short term. Nicolas 2013/2/13 Igor Stasenko <siguctua@gmail.com>:
On 14 February 2013 00:01, Nicolas Cellier <nicolas.cellier.aka.nice@gmail.com> wrote:
So here is what I did: .....
My feeling is that you are not thru with degenerated rectangles :) You'd better enforce the invariant in http://code.google.com/p/pharo/issues/detail?id=2601 rathert than remove it as requested in http://code.google.com/p/pharo/issues/detail?id=2441
After replacement of intersect: with intersect:ifNone: there is no need to enforcing invariants in #intersect: anymore, because users can decide by themselves what to do if two rects are not intersecting..
the behavior of #intersect: for non-intersecting rects is totally absurd and changing it to answer empty rect (like with all zeroes) is not a good solution either, comparing to providing a closure to handle it.
Nicolas
-- Best regards, Igor Stasenko.
On 14 February 2013 00:15, Nicolas Cellier <nicolas.cellier.aka.nice@gmail.com> wrote:
Please use my MessageTally trick above and you'll unfortunately see that intersect: is just one producer of empty Rectangle among many...
So I think that the ifNone: protection is quite vain given the flow of empty rectangles, user is not in control at all, it's an illusion, and that a reasonnable decision is to enforce the invariant.
but the way to enforce it is to make rect to have consistent answers to #width and #height, regardless in what order of origin:corner coordinates given. First , you make rectangle to be consistent.. then the users of it.. i do not see other way to deal with it.. I repeat, the final intent was to change #setOrigin:corner: to: Rectangle>>setOrigin: topLeft corner: bottomRight origin := (topLeft x min: bottomRight x) @ (topLeft y min: bottomRight y). corner := (topLeft x max: bottomRight x) @ (topLeft y max: bottomRight y). like that, there is no way a #width or #height can answer negative values. But as i said, for that we needed to review all the code which was assumed that rectangles internally keep origin @ corner points as they supplied during construction.. but this is inherently wrong assumption.. one should not put any assumptions on object's internal storage. never! only on it's desired behavior. And desired behavior for rectangle with two points (0,0) and (10,10) regardless in what order they given to answer 0 for #left, and 10 for #right. Because once we make assumptions about internal storage then what prevents me from assuming that following should also work: extent := 10@10. rect := Rectangle origin: 10@10 extent: extent. self assert: extent == rect extent Doing the small patches to fix minor stuff was not an intent of this refactoring.. because it is counterproductive as to me: if model is wrong and assumptions is wrong, you will meet problems with it over and over again.. and as result, in a longer term you will spend more time fixing glitches and dealing with inconsistencies here and there comparing to just fixing the model and putting right assumptions in a first place, once and for all. This is the Pharo spirit :) well, at least to me :)
It's not ideal, but it's a wiser decision in the short term.
Nicolas
2013/2/13 Igor Stasenko <siguctua@gmail.com>:
On 14 February 2013 00:01, Nicolas Cellier <nicolas.cellier.aka.nice@gmail.com> wrote:
So here is what I did: .....
My feeling is that you are not thru with degenerated rectangles :) You'd better enforce the invariant in http://code.google.com/p/pharo/issues/detail?id=2601 rathert than remove it as requested in http://code.google.com/p/pharo/issues/detail?id=2441
After replacement of intersect: with intersect:ifNone: there is no need to enforcing invariants in #intersect: anymore, because users can decide by themselves what to do if two rects are not intersecting..
the behavior of #intersect: for non-intersecting rects is totally absurd and changing it to answer empty rect (like with all zeroes) is not a good solution either, comparing to providing a closure to handle it.
Nicolas
-- Best regards, Igor Stasenko.
-- Best regards, Igor Stasenko.
2013/2/13 Igor Stasenko <siguctua@gmail.com>:
On 14 February 2013 00:15, Nicolas Cellier <nicolas.cellier.aka.nice@gmail.com> wrote:
Please use my MessageTally trick above and you'll unfortunately see that intersect: is just one producer of empty Rectangle among many...
So I think that the ifNone: protection is quite vain given the flow of empty rectangles, user is not in control at all, it's an illusion, and that a reasonnable decision is to enforce the invariant.
but the way to enforce it is to make rect to have consistent answers to #width and #height, regardless in what order of origin:corner coordinates given. First , you make rectangle to be consistent.. then the users of it.. i do not see other way to deal with it..
I repeat, the final intent was to change #setOrigin:corner: to:
Rectangle>>setOrigin: topLeft corner: bottomRight origin := (topLeft x min: bottomRight x) @ (topLeft y min: bottomRight y). corner := (topLeft x max: bottomRight x) @ (topLeft y max: bottomRight y).
like that, there is no way a #width or #height can answer negative values.
What I just want to remind you is that the base system is not at all ready for such a change and that you have a lot of work to clean it of degenerated Rectangle, it's not just cleaning intersect: and intersects: Are you sure you aint' gonna need an abstraction to represent an empty Rectangle? What if I try to inset a rectangle by more than half extent? What if I explicitely create a Rectangle with negative extent? (0@0 extent: -10@10) extent = (10@10) does not necessarily better meet my expectations... So what is your plan? - don't provide empty rectangle abstraction but equip each and every Rectangle producer with an ifEmpty: parameter? - create a class EmptyRectangle class with more explicit semantic than hasPositiveExtent not? Of course, if you can come with a cleaner model (less obscure features, and avoiding spreading guards everywhere in client code) then it is better to change the model rather than patch it. But it's not clear at all to me what your strategy is and where I can read about it? The bug reports I read are not informative and rather scary because they just completely ignore the old invariants. It's not a recipe for providing smooth transition. Also, when you change the invariants in the base system you have to provide a transition period to support the migration of client code. IMO, in the transition period, the code should better raise an Error rather than fixing things to what you THINK that is right in total contradiction with what users KNEW was right in the previous version. What are your plans concerning transition? Nicolas
But as i said, for that we needed to review all the code which was assumed that rectangles internally keep origin @ corner points as they supplied during construction.. but this is inherently wrong assumption.. one should not put any assumptions on object's internal storage. never! only on it's desired behavior. And desired behavior for rectangle with two points (0,0) and (10,10) regardless in what order they given to answer 0 for #left, and 10 for #right.
Because once we make assumptions about internal storage then what prevents me from assuming that following should also work:
extent := 10@10. rect := Rectangle origin: 10@10 extent: extent.
self assert: extent == rect extent
Doing the small patches to fix minor stuff was not an intent of this refactoring.. because it is counterproductive as to me: if model is wrong and assumptions is wrong, you will meet problems with it over and over again.. and as result, in a longer term you will spend more time fixing glitches and dealing with inconsistencies here and there comparing to just fixing the model and putting right assumptions in a first place, once and for all. This is the Pharo spirit :) well, at least to me :)
Agree, if you have enough power to do it.
It's not ideal, but it's a wiser decision in the short term.
Nicolas
2013/2/13 Igor Stasenko <siguctua@gmail.com>:
On 14 February 2013 00:01, Nicolas Cellier <nicolas.cellier.aka.nice@gmail.com> wrote:
So here is what I did: .....
My feeling is that you are not thru with degenerated rectangles :) You'd better enforce the invariant in http://code.google.com/p/pharo/issues/detail?id=2601 rathert than remove it as requested in http://code.google.com/p/pharo/issues/detail?id=2441
After replacement of intersect: with intersect:ifNone: there is no need to enforcing invariants in #intersect: anymore, because users can decide by themselves what to do if two rects are not intersecting..
the behavior of #intersect: for non-intersecting rects is totally absurd and changing it to answer empty rect (like with all zeroes) is not a good solution either, comparing to providing a closure to handle it.
Nicolas
-- Best regards, Igor Stasenko.
-- Best regards, Igor Stasenko.
Hi nicolas Thanks for the questions. Indeed we should get a strategy. I like your idea of raising an exception. Now how would you do it? I'm so sad that the system is build on sand. Stef
2013/2/13 Igor Stasenko <siguctua@gmail.com>:
On 14 February 2013 00:15, Nicolas Cellier <nicolas.cellier.aka.nice@gmail.com> wrote:
Please use my MessageTally trick above and you'll unfortunately see that intersect: is just one producer of empty Rectangle among many...
So I think that the ifNone: protection is quite vain given the flow of empty rectangles, user is not in control at all, it's an illusion, and that a reasonnable decision is to enforce the invariant.
but the way to enforce it is to make rect to have consistent answers to #width and #height, regardless in what order of origin:corner coordinates given. First , you make rectangle to be consistent.. then the users of it.. i do not see other way to deal with it..
I repeat, the final intent was to change #setOrigin:corner: to:
Rectangle>>setOrigin: topLeft corner: bottomRight origin := (topLeft x min: bottomRight x) @ (topLeft y min: bottomRight y). corner := (topLeft x max: bottomRight x) @ (topLeft y max: bottomRight y).
like that, there is no way a #width or #height can answer negative values.
What I just want to remind you is that the base system is not at all ready for such a change and that you have a lot of work to clean it of degenerated Rectangle, it's not just cleaning intersect: and intersects:
Are you sure you aint' gonna need an abstraction to represent an empty Rectangle? What if I try to inset a rectangle by more than half extent? What if I explicitely create a Rectangle with negative extent? (0@0 extent: -10@10) extent = (10@10) does not necessarily better meet my expectations...
So what is your plan? - don't provide empty rectangle abstraction but equip each and every Rectangle producer with an ifEmpty: parameter? - create a class EmptyRectangle class with more explicit semantic than hasPositiveExtent not?
Of course, if you can come with a cleaner model (less obscure features, and avoiding spreading guards everywhere in client code) then it is better to change the model rather than patch it.
But it's not clear at all to me what your strategy is and where I can read about it? The bug reports I read are not informative and rather scary because they just completely ignore the old invariants. It's not a recipe for providing smooth transition.
Also, when you change the invariants in the base system you have to provide a transition period to support the migration of client code.
IMO, in the transition period, the code should better raise an Error rather than fixing things to what you THINK that is right in total contradiction with what users KNEW was right in the previous version.
What are your plans concerning transition?
Nicolas
But as i said, for that we needed to review all the code which was assumed that rectangles internally keep origin @ corner points as they supplied during construction.. but this is inherently wrong assumption.. one should not put any assumptions on object's internal storage. never! only on it's desired behavior. And desired behavior for rectangle with two points (0,0) and (10,10) regardless in what order they given to answer 0 for #left, and 10 for #right.
Because once we make assumptions about internal storage then what prevents me from assuming that following should also work:
extent := 10@10. rect := Rectangle origin: 10@10 extent: extent.
self assert: extent == rect extent
Doing the small patches to fix minor stuff was not an intent of this refactoring.. because it is counterproductive as to me: if model is wrong and assumptions is wrong, you will meet problems with it over and over again.. and as result, in a longer term you will spend more time fixing glitches and dealing with inconsistencies here and there comparing to just fixing the model and putting right assumptions in a first place, once and for all. This is the Pharo spirit :) well, at least to me :)
Agree, if you have enough power to do it.
It's not ideal, but it's a wiser decision in the short term.
Nicolas
2013/2/13 Igor Stasenko <siguctua@gmail.com>:
On 14 February 2013 00:01, Nicolas Cellier <nicolas.cellier.aka.nice@gmail.com> wrote:
So here is what I did: .....
My feeling is that you are not thru with degenerated rectangles :) You'd better enforce the invariant in http://code.google.com/p/pharo/issues/detail?id=2601 rathert than remove it as requested in http://code.google.com/p/pharo/issues/detail?id=2441
After replacement of intersect: with intersect:ifNone: there is no need to enforcing invariants in #intersect: anymore, because users can decide by themselves what to do if two rects are not intersecting..
the behavior of #intersect: for non-intersecting rects is totally absurd and changing it to answer empty rect (like with all zeroes) is not a good solution either, comparing to providing a closure to handle it.
Nicolas
-- Best regards, Igor Stasenko.
-- Best regards, Igor Stasenko.
On 14 February 2013 07:35, Nicolas Cellier <nicolas.cellier.aka.nice@gmail.com> wrote:
2013/2/13 Igor Stasenko <siguctua@gmail.com>:
On 14 February 2013 00:15, Nicolas Cellier <nicolas.cellier.aka.nice@gmail.com> wrote:
Please use my MessageTally trick above and you'll unfortunately see that intersect: is just one producer of empty Rectangle among many...
So I think that the ifNone: protection is quite vain given the flow of empty rectangles, user is not in control at all, it's an illusion, and that a reasonnable decision is to enforce the invariant.
but the way to enforce it is to make rect to have consistent answers to #width and #height, regardless in what order of origin:corner coordinates given. First , you make rectangle to be consistent.. then the users of it.. i do not see other way to deal with it..
I repeat, the final intent was to change #setOrigin:corner: to:
Rectangle>>setOrigin: topLeft corner: bottomRight origin := (topLeft x min: bottomRight x) @ (topLeft y min: bottomRight y). corner := (topLeft x max: bottomRight x) @ (topLeft y max: bottomRight y).
like that, there is no way a #width or #height can answer negative values.
What I just want to remind you is that the base system is not at all ready for such a change and that you have a lot of work to clean it of degenerated Rectangle, it's not just cleaning intersect: and intersects:
Are you sure you aint' gonna need an abstraction to represent an empty Rectangle? What if I try to inset a rectangle by more than half extent? What if I explicitely create a Rectangle with negative extent? (0@0 extent: -10@10) extent = (10@10) does not necessarily better meet my expectations...
negative extent? That should raise an error imo.
So what is your plan? - don't provide empty rectangle abstraction but equip each and every Rectangle producer with an ifEmpty: parameter? - create a class EmptyRectangle class with more explicit semantic than hasPositiveExtent not?
no. I do not see why we need such thing. We could have "isEmpty" or "isDegenerate" tests, to let users check this if necessary.. but then consider our code base: - where you will put these tests? I will give you a clue: in places where code doing wrong things with rects.. That means, you are gonna to fix that code anyways.
Of course, if you can come with a cleaner model (less obscure features, and avoiding spreading guards everywhere in client code) then it is better to change the model rather than patch it.
But it's not clear at all to me what your strategy is and where I can read about it? The bug reports I read are not informative and rather scary because they just completely ignore the old invariants. It's not a recipe for providing smooth transition.
Also, when you change the invariants in the base system you have to provide a transition period to support the migration of client code.
IMO, in the transition period, the code should better raise an Error rather than fixing things to what you THINK that is right in total contradiction with what users KNEW was right in the previous version.
wait, what was right? that intersection of two non-intersecting rectangles gives you some rectangle? or that insetting 2-pixels wide rectangle by 5 pixels should produce some useful shape? btw, do you know that after i replaced intersect: with #intersect:ifNone:, i got a small, yet noticeable world redraw speedup.
What are your plans concerning transition?
The "strategy" is pretty simple ;) : - change the behavior - see where it breaks - fix broken stuff
Nicolas
-- Best regards, Igor Stasenko.
On 14 February 2013 14:37, Igor Stasenko <siguctua@gmail.com> wrote:
On 14 February 2013 07:35, Nicolas Cellier <nicolas.cellier.aka.nice@gmail.com> wrote:
2013/2/13 Igor Stasenko <siguctua@gmail.com>:
On 14 February 2013 00:15, Nicolas Cellier <nicolas.cellier.aka.nice@gmail.com> wrote:
Please use my MessageTally trick above and you'll unfortunately see that intersect: is just one producer of empty Rectangle among many...
So I think that the ifNone: protection is quite vain given the flow of empty rectangles, user is not in control at all, it's an illusion, and that a reasonnable decision is to enforce the invariant.
but the way to enforce it is to make rect to have consistent answers to #width and #height, regardless in what order of origin:corner coordinates given. First , you make rectangle to be consistent.. then the users of it.. i do not see other way to deal with it..
I repeat, the final intent was to change #setOrigin:corner: to:
Rectangle>>setOrigin: topLeft corner: bottomRight origin := (topLeft x min: bottomRight x) @ (topLeft y min: bottomRight y). corner := (topLeft x max: bottomRight x) @ (topLeft y max: bottomRight y).
like that, there is no way a #width or #height can answer negative values.
What I just want to remind you is that the base system is not at all ready for such a change and that you have a lot of work to clean it of degenerated Rectangle, it's not just cleaning intersect: and intersects:
Are you sure you aint' gonna need an abstraction to represent an empty Rectangle? What if I try to inset a rectangle by more than half extent? What if I explicitely create a Rectangle with negative extent? (0@0 extent: -10@10) extent = (10@10) does not necessarily better meet my expectations...
negative extent? That should raise an error imo.
So what is your plan? - don't provide empty rectangle abstraction but equip each and every Rectangle producer with an ifEmpty: parameter? - create a class EmptyRectangle class with more explicit semantic than hasPositiveExtent not?
no. I do not see why we need such thing. We could have "isEmpty" or "isDegenerate" tests, to let users check this if necessary.. but then consider our code base: - where you will put these tests? I will give you a clue: in places where code doing wrong things with rects.. That means, you are gonna to fix that code anyways.
Of course, if you can come with a cleaner model (less obscure features, and avoiding spreading guards everywhere in client code) then it is better to change the model rather than patch it.
But it's not clear at all to me what your strategy is and where I can read about it? The bug reports I read are not informative and rather scary because they just completely ignore the old invariants. It's not a recipe for providing smooth transition.
Also, when you change the invariants in the base system you have to provide a transition period to support the migration of client code.
IMO, in the transition period, the code should better raise an Error rather than fixing things to what you THINK that is right in total contradiction with what users KNEW was right in the previous version.
and yes, about raising an Error.. this is exactly what i did by replacing: rect1 intersect: rect2 with: rect1 intersect: rect2 ifNone: [ self error: '..... do something about it' ]. so where we have a disagreement about it? yes.. the thing is not finished.. still the changes we did going towards right direction. just need more work.
wait, what was right? that intersection of two non-intersecting rectangles gives you some rectangle?
or that insetting 2-pixels wide rectangle by 5 pixels should produce some useful shape?
btw, do you know that after i replaced intersect: with #intersect:ifNone:, i got a small, yet noticeable world redraw speedup.
What are your plans concerning transition?
The "strategy" is pretty simple ;) : - change the behavior - see where it breaks - fix broken stuff
Nicolas
-- Best regards, Igor Stasenko.
-- Best regards, Igor Stasenko.
2013/2/14 Igor Stasenko <siguctua@gmail.com>:
On 14 February 2013 07:35, Nicolas Cellier <nicolas.cellier.aka.nice@gmail.com> wrote:
2013/2/13 Igor Stasenko <siguctua@gmail.com>:
On 14 February 2013 00:15, Nicolas Cellier <nicolas.cellier.aka.nice@gmail.com> wrote:
Please use my MessageTally trick above and you'll unfortunately see that intersect: is just one producer of empty Rectangle among many...
So I think that the ifNone: protection is quite vain given the flow of empty rectangles, user is not in control at all, it's an illusion, and that a reasonnable decision is to enforce the invariant.
but the way to enforce it is to make rect to have consistent answers to #width and #height, regardless in what order of origin:corner coordinates given. First , you make rectangle to be consistent.. then the users of it.. i do not see other way to deal with it..
I repeat, the final intent was to change #setOrigin:corner: to:
Rectangle>>setOrigin: topLeft corner: bottomRight origin := (topLeft x min: bottomRight x) @ (topLeft y min: bottomRight y). corner := (topLeft x max: bottomRight x) @ (topLeft y max: bottomRight y).
like that, there is no way a #width or #height can answer negative values.
What I just want to remind you is that the base system is not at all ready for such a change and that you have a lot of work to clean it of degenerated Rectangle, it's not just cleaning intersect: and intersects:
Are you sure you aint' gonna need an abstraction to represent an empty Rectangle? What if I try to inset a rectangle by more than half extent? What if I explicitely create a Rectangle with negative extent? (0@0 extent: -10@10) extent = (10@10) does not necessarily better meet my expectations...
negative extent? That should raise an error imo.
So what is your plan? - don't provide empty rectangle abstraction but equip each and every Rectangle producer with an ifEmpty: parameter? - create a class EmptyRectangle class with more explicit semantic than hasPositiveExtent not?
no. I do not see why we need such thing. We could have "isEmpty" or "isDegenerate" tests, to let users check this if necessary.. but then consider our code base: - where you will put these tests? I will give you a clue: in places where code doing wrong things with rects.. That means, you are gonna to fix that code anyways.
Of course, if you can come with a cleaner model (less obscure features, and avoiding spreading guards everywhere in client code) then it is better to change the model rather than patch it.
But it's not clear at all to me what your strategy is and where I can read about it? The bug reports I read are not informative and rather scary because they just completely ignore the old invariants. It's not a recipe for providing smooth transition.
Also, when you change the invariants in the base system you have to provide a transition period to support the migration of client code.
IMO, in the transition period, the code should better raise an Error rather than fixing things to what you THINK that is right in total contradiction with what users KNEW was right in the previous version.
wait, what was right? that intersection of two non-intersecting rectangles gives you some rectangle?
or that insetting 2-pixels wide rectangle by 5 pixels should produce some useful shape?
btw, do you know that after i replaced intersect: with #intersect:ifNone:, i got a small, yet noticeable world redraw speedup.
What are your plans concerning transition?
The "strategy" is pretty simple ;) : - change the behavior - see where it breaks - fix broken stuff
Good luck
Nicolas
-- Best regards, Igor Stasenko.
It is all about intervals.. if you define a rectangle using pair of intervals (2-dimensional): [ a .. b ) then it contains all points between a and b, including a, but not including b and therefore rectangles [ a.. b ) and [b .. c ) (where c >b) do not intersect. if rectangle defined as pair of intervals: [ a .. b ] then it contains all points between a and b, including a AND b and of course [ a .. b ] and [b .. c ] (where c >b) will overlap. the problem is if you using [ ) intervals, then how you represent degenerate (zero-width or zero-height) rectangles.. because interval [a .. a) holds a contradiction: it includes 'a', but not includes 'a', which makes no sense. and then you have interesting questions, like do intervals [a..a) and [a..b) overlap? While if using [a..a] there's no problem.. [a..a] certainly overlaps with [a..b] But from other side, if we will use [...] intervals, then there is no way to split interval to get two non-overlapping ones: [a..b] => [a..c] + [c..b] (a<=c<=b) But i am not sure whether it will have significant impact or not. So, here my question: what interval type is better [) or [] ? Existed implementation uses [) -- Best regards, Igor Stasenko.
Yet another perspective.. is that if we state: Any two points form a rectangle.. Then, by construction it means that Rectangle origin: pt1 corner: pt2 should be equal to: Rectangle origin: pt2 corner: pt1 and here the evil part: if you use [) intervals you not get what you want, because in one case it will be rectangle which includes all points from pt1 to pt2 but not including pt2 while in another case, it will be rectangle which includes all points from pt1 to pt2 but not including pt1.. and this is why i inclined to use [] intervals for defining the rectangles. -- Best regards, Igor Stasenko.
That means you probably need to change some graphics primitives. If you want to go this way (have mathematical geometric objects), then I think you're on the step off Juan Morphic 3... Nicolas 2013/2/14 Igor Stasenko <siguctua@gmail.com>:
Yet another perspective.. is that if we state:
Any two points form a rectangle..
Then, by construction it means that
Rectangle origin: pt1 corner: pt2
should be equal to:
Rectangle origin: pt2 corner: pt1
and here the evil part: if you use [) intervals you not get what you want, because in one case it will be rectangle which includes all points from pt1 to pt2 but not including pt2 while in another case, it will be rectangle which includes all points from pt1 to pt2 but not including pt1..
and this is why i inclined to use [] intervals for defining the rectangles.
-- Best regards, Igor Stasenko.
On 14 February 2013 18:10, Nicolas Cellier <nicolas.cellier.aka.nice@gmail.com> wrote:
That means you probably need to change some graphics primitives.
If you want to go this way (have mathematical geometric objects), then I think you're on the step off Juan Morphic 3...
well, how you can reason about intersecting rectangles without using geometry? i do not want a rectangle which is not a rectangle in common sense, but rectangle in "our" sense, just because it fits us better.
Nicolas
-- Best regards, Igor Stasenko.
On 14 February 2013 17:22, Igor Stasenko <siguctua@gmail.com> wrote:
On 14 February 2013 18:10, Nicolas Cellier <nicolas.cellier.aka.nice@gmail.com> wrote:
That means you probably need to change some graphics primitives.
If you want to go this way (have mathematical geometric objects), then I think you're on the step off Juan Morphic 3...
well, how you can reason about intersecting rectangles without using geometry?
I think Nicolas means intervals over discrete values - integers - versus intervals over continuous values - reals. frank
i do not want a rectangle which is not a rectangle in common sense, but rectangle in "our" sense, just because it fits us better.
Nicolas
-- Best regards, Igor Stasenko.
I don't want nothing, but you inherit from very specialized class historically used to draw on pixel boundaries... A rectangle that you cannot even rotate, common ;) Nicolas 2013/2/14 Igor Stasenko <siguctua@gmail.com>:
On 14 February 2013 18:10, Nicolas Cellier <nicolas.cellier.aka.nice@gmail.com> wrote:
That means you probably need to change some graphics primitives.
If you want to go this way (have mathematical geometric objects), then I think you're on the step off Juan Morphic 3...
well, how you can reason about intersecting rectangles without using geometry?
i do not want a rectangle which is not a rectangle in common sense, but rectangle in "our" sense, just because it fits us better.
Nicolas
-- Best regards, Igor Stasenko.
On 14 February 2013 18:27, Nicolas Cellier <nicolas.cellier.aka.nice@gmail.com> wrote:
I don't want nothing, but you inherit from very specialized class historically used to draw on pixel boundaries... A rectangle that you cannot even rotate, common ;)
Well, from that perspective, then we should not touch anything and let it stink forever :) P.S. I think that we should revert the change to #intersects: -- Best regards, Igor Stasenko.
2013/2/14 Igor Stasenko <siguctua@gmail.com>:
On 14 February 2013 18:27, Nicolas Cellier <nicolas.cellier.aka.nice@gmail.com> wrote:
I don't want nothing, but you inherit from very specialized class historically used to draw on pixel boundaries... A rectangle that you cannot even rotate, common ;)
Well, from that perspective, then we should not touch anything and let it stink forever :)
Sure, they still serves low abstractions for low requirements... Despite they are present in Fun Squeak, not everybody needs a tilted menu or window... However, given the variety of pixel density these days, non scalable graphics are going to be a problem. Nicolas
P.S. I think that we should revert the change to #intersects:
-- Best regards, Igor Stasenko.
On 14 February 2013 17:27, Nicolas Cellier <nicolas.cellier.aka.nice@gmail.com> wrote:
I don't want nothing, but you inherit from very specialized class historically used to draw on pixel boundaries... A rectangle that you cannot even rotate, common ;)
You can't define a unique rectangle with only two points anyway, if you permit them to be rotated - consider the flipped version / reflected in the line between the two points. When you add the constraint that their sides must be horizontal/vertical you remove a degree of freedom, and then you get unique rectangles. frank
Nicolas
2013/2/14 Igor Stasenko <siguctua@gmail.com>:
On 14 February 2013 18:10, Nicolas Cellier <nicolas.cellier.aka.nice@gmail.com> wrote:
That means you probably need to change some graphics primitives.
If you want to go this way (have mathematical geometric objects), then I think you're on the step off Juan Morphic 3...
well, how you can reason about intersecting rectangles without using geometry?
i do not want a rectangle which is not a rectangle in common sense, but rectangle in "our" sense, just because it fits us better.
Nicolas
-- Best regards, Igor Stasenko.
Sure, any other point on the circle defined by this diameter would be a valid vertex... Nicolas 2013/2/14 Frank Shearar <frank.shearar@gmail.com>:
On 14 February 2013 17:27, Nicolas Cellier <nicolas.cellier.aka.nice@gmail.com> wrote:
I don't want nothing, but you inherit from very specialized class historically used to draw on pixel boundaries... A rectangle that you cannot even rotate, common ;)
You can't define a unique rectangle with only two points anyway, if you permit them to be rotated - consider the flipped version / reflected in the line between the two points.
When you add the constraint that their sides must be horizontal/vertical you remove a degree of freedom, and then you get unique rectangles.
frank
Nicolas
2013/2/14 Igor Stasenko <siguctua@gmail.com>:
On 14 February 2013 18:10, Nicolas Cellier <nicolas.cellier.aka.nice@gmail.com> wrote:
That means you probably need to change some graphics primitives.
If you want to go this way (have mathematical geometric objects), then I think you're on the step off Juan Morphic 3...
well, how you can reason about intersecting rectangles without using geometry?
i do not want a rectangle which is not a rectangle in common sense, but rectangle in "our" sense, just because it fits us better.
Nicolas
-- Best regards, Igor Stasenko.
Yes, I think it is a problem of reasonning as whole number of pixels Interval [ ) is for the case where (0@0 extent: 10@1) is exactly 10 pixels wide, and 1 pixel tall... The mail I cited above is using Rectangle as an abstraction of horizontal/vertical line segment (zero-width), in which case [a a) must still intersects... That must be conflicting with redrawing surfaces for which [a a) must not... Nicolas 2013/2/14 Igor Stasenko <siguctua@gmail.com>:
It is all about intervals.. if you define a rectangle using pair of intervals (2-dimensional):
[ a .. b )
then it contains all points between a and b, including a, but not including b and therefore rectangles [ a.. b ) and [b .. c ) (where c >b) do not intersect.
if rectangle defined as pair of intervals:
[ a .. b ]
then it contains all points between a and b, including a AND b and of course [ a .. b ] and [b .. c ] (where c >b) will overlap.
the problem is if you using [ ) intervals, then how you represent degenerate (zero-width or zero-height) rectangles.. because interval [a .. a) holds a contradiction: it includes 'a', but not includes 'a', which makes no sense.
and then you have interesting questions, like do intervals [a..a) and [a..b) overlap?
While if using [a..a] there's no problem.. [a..a] certainly overlaps with [a..b]
But from other side, if we will use [...] intervals, then there is no way to split interval to get two non-overlapping ones:
[a..b] => [a..c] + [c..b] (a<=c<=b)
But i am not sure whether it will have significant impact or not.
So, here my question: what interval type is better [) or [] ? Existed implementation uses [)
-- Best regards, Igor Stasenko.
Nicolas I did what you suggest
Notification subclass: #DegeneratedRectangle instanceVariableNames: '' classVariableNames: '' poolDictionaries: '' category: 'Kernel-BasicObjects'
Rectangle>>setOrigin: topLeft corner: bottomRight origin := topLeft. corner := bottomRight. (self width < 0 or: [ self height < 0 ]) ifTrue: [ DegeneratedRectangle signal ]
Then in a workspace:
tally := MessageTally new. tally spyEvery: 100 on: ['em ezilaitini ot si siht' reverse]. tally class: World class method: World class>>#doOneCycle. "middle lines begin" tallyEnd := false. [(Delay forSeconds: 300) wait. tallyEnd := true] fork. [[World doOneCycle. Processor yield.tallyEnd] whileFalse] on: DegeneratedRectangle do: [:exc | tally tally: exc signalerContext by: 1. exc resume]. (StringHolder new contents: (String streamContents: [:s | tally report: s])) openLabel: 'DegeneratedRectangle Spy Results'. "middle lines end" tally close.
But I get nothing 20531 Then I do not understand the trace you sent where is the information about the wrong rectangle in it.
and here we go:
- 371 tallies, 2 msec.
**Tree** -------------------------------- Process: other processes -------------------------------- 38.3% {1ms} NautilusUI(AbstractNautilusUI)>>browseMessages 38.3% {1ms} NautilusUI(AbstractTool)>>browseMessagesFrom: 38.3% {1ms} NautilusUI(AbstractTool)>>getSelectorAndSendQuery:to:with:selector: 38.3% {1ms} SystemNavigation>>browseAllImplementorsOf: 38.3% {1ms} SystemNavigation>>browseImplementorsOf:name:autoSelect: 38.3% {1ms} SystemNavigation>>browseMessageList:name:autoSelect: 38.3% {1ms} MessageBrowser class>>openMessageList:name:autoSelect: 38.3% {1ms} MessageBrowser>>openWithSpec 38.3% {1ms} MessageBrowser(ComposableModel)>>openWithSpec 38.3% {1ms} MessageBrowser(ComposableModel)>>openWithSpec: 38.3% {1ms} WindowModel>>openWithSpec: 32.1% {1ms} WindowModel>>buildWithSpec: |24.8% {0ms} WindowModel>>addModelIn:withSpec: | |22.9% {0ms} MessageBrowser(ComposableModel)>>buildWithSpec: | | |19.4% {0ms} SpecInterpreter class>>buildWidgetFor:withSpec: | | | |19.4% {0ms} SpecInterpreter class>>interpretASpec:model: | | | | 19.4% {0ms} SpecInterpreter class>>interpretASpec:model:superSpec: | | | | 19.4% {0ms} SpecInterpreter class>>private_interpretASpec:model:superSpec: | | | | 19.4% {0ms} SpecInterpreter>>interpretASpec:model:superSpec: | | | | 19.4% {0ms} SpecInterpreter>>interpretASpec: | | | | 19.4% {0ms} SpecInterpreter class>>private_interpretASpec:model:superSpec: | | | | 19.4% {0ms} SpecInterpreter>>interpretASpec:model:superSpec: | | | | 19.4% {0ms} SpecInterpreter>>interpretASpec: | | | | 19.4% {0ms} SpecInterpreter>>retreiveSpecFrom: | | | | 9.7% {0ms} SpecInterpreter class>>private_interpretASpec:model:superSpec: | | | | |9.7% {0ms} SpecInterpreter>>interpretASpec:model:superSpec: | | | | | 9.7% {0ms} SpecInterpreter>>interpretASpec: | | | | | 9.7% {0ms} SpecInterpreter class>>private_interpretASpec:model:superSpec: | | | | | 9.7% {0ms} SpecInterpreter>>interpretASpec:model:superSpec: | | | | | 9.7% {0ms} SpecInterpreter>>interpretASpec: | | | | | 9.7% {0ms} SpecInterpreter>>retreiveSpecFrom: | | | | | 4.9% {0ms} SpecInterpreter class>>private_interpretASpec:model:superSpec: | | | | | |4.9% {0ms} SpecInterpreter>>interpretASpec:model:superSpec: | | | | | | 4.9% {0ms} SpecInterpreter>>interpretASpec: | | | | | | 4.9% {0ms} MultiColumnListModel(ComposableModel)>>private_buildWithSpec | | | | | | 4.9% {0ms} MultiColumnListModel(ComposableModel)>>private_buildWithSpec: | | | | | | 4.9% {0ms} SpecInterpreter class>>private_buildWidgetFor:withSpec: | | | | | | 4.9% {0ms} SpecInterpreter class>>private_interpretASpec:model: | | | | | | 4.9% {0ms} SpecInterpreter>>interpretASpec:model: | | | | | | 4.9% {0ms} SpecInterpreter>>interpretASpec:model:superSpec: | | | | | | 4.9% {0ms} SpecInterpreter>>interpretASpec: | | | | | | 2.7% {0ms} SpecInterpreter class>>private_interpretASpec:model:superSpec: | | | | | | |2.7% {0ms} SpecInterpreter>>interpretASpec:model:superSpec: | | | | | | | 2.7% {0ms} SpecInterpreter>>interpretASpec: | | | | | | | 2.7% {0ms} DropListModel(ComposableModel)>>private_buildWithSpec | | | | | | | 2.7% {0ms} DropListModel(ComposableModel)>>private_buildWithSpec: | | | | | | | 2.7% {0ms} SpecInterpreter class>>private_buildWidgetFor:withSpec: | | | | | | | 2.7% {0ms} SpecInterpreter class>>private_interpretASpec:model: | | | | | | | 2.7% {0ms} SpecInterpreter>>interpretASpec:model: | | | | | | | 2.7% {0ms} SpecInterpreter>>interpretASpec:model:superSpec: | | | | | | | 2.7% {0ms} SpecInterpreter>>interpretASpec: | | | | | | | 2.7% {0ms} SpecInterpreter>>actionToPerformWithSelector:arguments: | | | | | | | 2.7% {0ms} DropListSpec(AbstractSpec)>>instance | | | | | | | 2.7% {0ms} DropListSpec(AbstractSpec)>>initializeInstance | | | | | | | 2.7% {0ms} SpecInterpreter class>>private_interpretASpec:model: | | | | | | | 2.7% {0ms} SpecInterpreter>>interpretASpec:model: | | | | | | | 2.7% {0ms} SpecInterpreter>>interpretASpec:model:superSpec: | | | | | | | 2.7% {0ms} SpecInterpreter>>interpretASpec: | | | | | | | 2.7% {0ms} SpecInterpreter>>retreiveSpecFrom: | | | | | | | 1.3% {0ms} SpecInterpreter class>>private_interpretASpec:model:superSpec: | | | | | | | |1.3% {0ms} SpecInterpreter>>interpretASpec:model:superSpec: | | | | | | | | 1.3% {0ms} SpecInterpreter>>interpretASpec: | | | | | | | | 1.3% {0ms} SpecInterpreter>>convertSymbolOfClassToInstance: | | | | | | | | 1.3% {0ms} DropListMorph class(Behavior)>>new | | | | | | | | 1.3% {0ms} DropListMorph>>initialize | | | | | | | 1.3% {0ms} RawSpec>>defaultReceiver:model: | | | | | | | 1.3% {0ms} SpecInterpreter class>>private_interpretASpec:model: | | | | | | | 1.3% {0ms} SpecInterpreter>>interpretASpec:model: | | | | | | | 1.3% {0ms} SpecInterpreter>>interpretASpec:model:superSpec: | | | | | | | 1.3% {0ms} SpecInterpreter>>interpretASpec: | | | | | | | 1.3% {0ms} SpecInterpreter>>convertSymbolOfClassToInstance: | | | | | | | 1.3% {0ms} DropListMorph class(Behavior)>>new | | | | | | | 1.3% {0ms} DropListMorph>>initialize | | | | | | 2.2% {0ms} SpecInterpreter>>actionToPerformWithSelector:arguments: | | | | | | 2.2% {0ms} MultiColumnListSpec(AbstractSpec)>>instance | | | | | | 2.2% {0ms} MultiColumnListSpec(AbstractSpec)>>initializeInstance | | | | | | 2.2% {0ms} SpecInterpreter class>>private_interpretASpec:model: | | | | | | 2.2% {0ms} SpecInterpreter>>interpretASpec:model: | | | | | | 2.2% {0ms} SpecInterpreter>>interpretASpec:model:superSpec: | | | | | | 2.2% {0ms} SpecInterpreter>>interpretASpec: | | | | | | 2.2% {0ms} SpecInterpreter>>retreiveSpecFrom: | | | | | 4.9% {0ms} RawSpec>>defaultReceiver:model: | | | | | 4.9% {0ms} SpecInterpreter class>>private_interpretASpec:model: | | | | | 4.9% {0ms} SpecInterpreter>>interpretASpec:model: | | | | | 4.9% {0ms} SpecInterpreter>>interpretASpec:model:superSpec: | | | | | 4.9% {0ms} SpecInterpreter>>interpretASpec: | | | | | 4.9% {0ms} MultiColumnListModel(ComposableModel)>>private_buildWithSpec | | | | | 4.9% {0ms} MultiColumnListModel(ComposableModel)>>private_buildWithSpec: | | | | | 4.9% {0ms} SpecInterpreter class>>private_buildWidgetFor:withSpec: | | | | | 4.9% {0ms} SpecInterpreter class>>private_interpretASpec:model: | | | | | 4.9% {0ms} SpecInterpreter>>interpretASpec:model: | | | | | 4.9% {0ms} SpecInterpreter>>interpretASpec:model:superSpec: | | | | | 4.9% {0ms} SpecInterpreter>>interpretASpec: | | | | | 2.7% {0ms} SpecInterpreter class>>private_interpretASpec:model:superSpec: | | | | | |2.7% {0ms} SpecInterpreter>>interpretASpec:model:superSpec: | | | | | | 2.7% {0ms} SpecInterpreter>>interpretASpec: | | | | | | 2.7% {0ms} DropListModel(ComposableModel)>>private_buildWithSpec | | | | | | 2.7% {0ms} DropListModel(ComposableModel)>>private_buildWithSpec: | | | | | | 2.7% {0ms} SpecInterpreter class>>private_buildWidgetFor:withSpec: | | | | | | 2.7% {0ms} SpecInterpreter class>>private_interpretASpec:model: | | | | | | 2.7% {0ms} SpecInterpreter>>interpretASpec:model: | | | | | | 2.7% {0ms} SpecInterpreter>>interpretASpec:model:superSpec: | | | | | | 2.7% {0ms} SpecInterpreter>>interpretASpec: | | | | | | 2.7% {0ms} SpecInterpreter>>actionToPerformWithSelector:arguments: | | | | | | 2.7% {0ms} DropListSpec(AbstractSpec)>>instance | | | | | | 2.7% {0ms} DropListSpec(AbstractSpec)>>initializeInstance | | | | | | 2.7% {0ms} SpecInterpreter class>>private_interpretASpec:model: | | | | | | 2.7% {0ms} SpecInterpreter>>interpretASpec:model: | | | | | | 2.7% {0ms} SpecInterpreter>>interpretASpec:model:superSpec: | | | | | | 2.7% {0ms} SpecInterpreter>>interpretASpec: | | | | | | 2.7% {0ms} SpecInterpreter>>retreiveSpecFrom: | | | | | | 1.3% {0ms} SpecInterpreter class>>private_interpretASpec:model:superSpec: | | | | | | |1.3% {0ms} SpecInterpreter>>interpretASpec:model:superSpec: | | | | | | | 1.3% {0ms} SpecInterpreter>>interpretASpec: | | | | | | | 1.3% {0ms} SpecInterpreter>>convertSymbolOfClassToInstance: | | | | | | | 1.3% {0ms} DropListMorph class(Behavior)>>new | | | | | | | 1.3% {0ms} DropListMorph>>initialize | | | | | | 1.3% {0ms} RawSpec>>defaultReceiver:model: | | | | | | 1.3% {0ms} SpecInterpreter class>>private_interpretASpec:model: | | | | | | 1.3% {0ms} SpecInterpreter>>interpretASpec:model: | | | | | | 1.3% {0ms} SpecInterpreter>>interpretASpec:model:superSpec: | | | | | | 1.3% {0ms} SpecInterpreter>>interpretASpec: | | | | | | 1.3% {0ms} SpecInterpreter>>convertSymbolOfClassToInstance: | | | | | | 1.3% {0ms} DropListMorph class(Behavior)>>new | | | | | | 1.3% {0ms} DropListMorph>>initialize | | | | | 2.2% {0ms} SpecInterpreter>>actionToPerformWithSelector:arguments: | | | | | 2.2% {0ms} MultiColumnListSpec(AbstractSpec)>>instance | | | | | 2.2% {0ms} MultiColumnListSpec(AbstractSpec)>>initializeInstance | | | | | 2.2% {0ms} SpecInterpreter class>>private_interpretASpec:model: | | | | | 2.2% {0ms} SpecInterpreter>>interpretASpec:model: | | | | | 2.2% {0ms} SpecInterpreter>>interpretASpec:model:superSpec: | | | | | 2.2% {0ms} SpecInterpreter>>interpretASpec: | | | | | 2.2% {0ms} SpecInterpreter>>retreiveSpecFrom: | | | | 9.7% {0ms} RawSpec>>defaultReceiver:model: | | | | 9.7% {0ms} SpecInterpreter class>>private_interpretASpec:model: | | | | 9.7% {0ms} SpecInterpreter>>interpretASpec:model: | | | | 9.7% {0ms} SpecInterpreter>>interpretASpec:model:superSpec: | | | | 9.7% {0ms} SpecInterpreter>>interpretASpec: | | | | 9.7% {0ms} SpecInterpreter class>>private_interpretASpec:model:superSpec: | | | | 9.7% {0ms} SpecInterpreter>>interpretASpec:model:superSpec: | | | | 9.7% {0ms} SpecInterpreter>>interpretASpec: | | | | 9.7% {0ms} SpecInterpreter>>retreiveSpecFrom: | | | | 4.9% {0ms} SpecInterpreter class>>private_interpretASpec:model:superSpec: | | | | |4.9% {0ms} SpecInterpreter>>interpretASpec:model:superSpec: | | | | | 4.9% {0ms} SpecInterpreter>>interpretASpec: | | | | | 4.9% {0ms} MultiColumnListModel(ComposableModel)>>private_buildWithSpec | | | | | 4.9% {0ms} MultiColumnListModel(ComposableModel)>>private_buildWithSpec: | | | | | 4.9% {0ms} SpecInterpreter class>>private_buildWidgetFor:withSpec: | | | | | 4.9% {0ms} SpecInterpreter class>>private_interpretASpec:model: | | | | | 4.9% {0ms} SpecInterpreter>>interpretASpec:model: | | | | | 4.9% {0ms} SpecInterpreter>>interpretASpec:model:superSpec: | | | | | 4.9% {0ms} SpecInterpreter>>interpretASpec: | | | | | 2.7% {0ms} SpecInterpreter class>>private_interpretASpec:model:superSpec: | | | | | |2.7% {0ms} SpecInterpreter>>interpretASpec:model:superSpec: | | | | | | 2.7% {0ms} SpecInterpreter>>interpretASpec: | | | | | | 2.7% {0ms} DropListModel(ComposableModel)>>private_buildWithSpec | | | | | | 2.7% {0ms} DropListModel(ComposableModel)>>private_buildWithSpec: | | | | | | 2.7% {0ms} SpecInterpreter class>>private_buildWidgetFor:withSpec: | | | | | | 2.7% {0ms} SpecInterpreter class>>private_interpretASpec:model: | | | | | | 2.7% {0ms} SpecInterpreter>>interpretASpec:model: | | | | | | 2.7% {0ms} SpecInterpreter>>interpretASpec:model:superSpec: | | | | | | 2.7% {0ms} SpecInterpreter>>interpretASpec: | | | | | | 2.7% {0ms} SpecInterpreter>>actionToPerformWithSelector:arguments: | | | | | | 2.7% {0ms} DropListSpec(AbstractSpec)>>instance | | | | | | 2.7% {0ms} DropListSpec(AbstractSpec)>>initializeInstance | | | | | | 2.7% {0ms} SpecInterpreter class>>private_interpretASpec:model: | | | | | | 2.7% {0ms} SpecInterpreter>>interpretASpec:model: | | | | | | 2.7% {0ms} SpecInterpreter>>interpretASpec:model:superSpec: | | | | | | 2.7% {0ms} SpecInterpreter>>interpretASpec: | | | | | | 2.7% {0ms} SpecInterpreter>>retreiveSpecFrom: | | | | | | 1.3% {0ms} SpecInterpreter class>>private_interpretASpec:model:superSpec: | | | | | | |1.3% {0ms} SpecInterpreter>>interpretASpec:model:superSpec: | | | | | | | 1.3% {0ms} SpecInterpreter>>interpretASpec: | | | | | | | 1.3% {0ms} SpecInterpreter>>convertSymbolOfClassToInstance: | | | | | | | 1.3% {0ms} DropListMorph class(Behavior)>>new | | | | | | | 1.3% {0ms} DropListMorph>>initialize | | | | | | 1.3% {0ms} RawSpec>>defaultReceiver:model: | | | | | | 1.3% {0ms} SpecInterpreter class>>private_interpretASpec:model: | | | | | | 1.3% {0ms} SpecInterpreter>>interpretASpec:model: | | | | | | 1.3% {0ms} SpecInterpreter>>interpretASpec:model:superSpec: | | | | | | 1.3% {0ms} SpecInterpreter>>interpretASpec: | | | | | | 1.3% {0ms} SpecInterpreter>>convertSymbolOfClassToInstance: | | | | | | 1.3% {0ms} DropListMorph class(Behavior)>>new | | | | | | 1.3% {0ms} DropListMorph>>initialize | | | | | 2.2% {0ms} SpecInterpreter>>actionToPerformWithSelector:arguments: | | | | | 2.2% {0ms} MultiColumnListSpec(AbstractSpec)>>instance | | | | | 2.2% {0ms} MultiColumnListSpec(AbstractSpec)>>initializeInstance | | | | | 2.2% {0ms} SpecInterpreter class>>private_interpretASpec:model: | | | | | 2.2% {0ms} SpecInterpreter>>interpretASpec:model: | | | | | 2.2% {0ms} SpecInterpreter>>interpretASpec:model:superSpec: | | | | | 2.2% {0ms} SpecInterpreter>>interpretASpec: | | | | | 2.2% {0ms} SpecInterpreter>>retreiveSpecFrom: | | | | 4.9% {0ms} RawSpec>>defaultReceiver:model: | | | | 4.9% {0ms} SpecInterpreter class>>private_interpretASpec:model: | | | | 4.9% {0ms} SpecInterpreter>>interpretASpec:model: | | | | 4.9% {0ms} SpecInterpreter>>interpretASpec:model:superSpec: | | | | 4.9% {0ms} SpecInterpreter>>interpretASpec: | | | | 4.9% {0ms} MultiColumnListModel(ComposableModel)>>private_buildWithSpec | | | | 4.9% {0ms} MultiColumnListModel(ComposableModel)>>private_buildWithSpec: | | | | 4.9% {0ms} SpecInterpreter class>>private_buildWidgetFor:withSpec: | | | | 4.9% {0ms} SpecInterpreter class>>private_interpretASpec:model: | | | | 4.9% {0ms} SpecInterpreter>>interpretASpec:model: | | | | 4.9% {0ms} SpecInterpreter>>interpretASpec:model:superSpec: | | | | 4.9% {0ms} SpecInterpreter>>interpretASpec: | | | | 2.7% {0ms} SpecInterpreter class>>private_interpretASpec:model:superSpec: | | | | |2.7% {0ms} SpecInterpreter>>interpretASpec:model:superSpec: | | | | | 2.7% {0ms} SpecInterpreter>>interpretASpec: | | | | | 2.7% {0ms} DropListModel(ComposableModel)>>private_buildWithSpec | | | | | 2.7% {0ms} DropListModel(ComposableModel)>>private_buildWithSpec: | | | | | 2.7% {0ms} SpecInterpreter class>>private_buildWidgetFor:withSpec: | | | | | 2.7% {0ms} SpecInterpreter class>>private_interpretASpec:model: | | | | | 2.7% {0ms} SpecInterpreter>>interpretASpec:model: | | | | | 2.7% {0ms} SpecInterpreter>>interpretASpec:model:superSpec: | | | | | 2.7% {0ms} SpecInterpreter>>interpretASpec: | | | | | 2.7% {0ms} SpecInterpreter>>actionToPerformWithSelector:arguments: | | | | | 2.7% {0ms} DropListSpec(AbstractSpec)>>instance | | | | | 2.7% {0ms} DropListSpec(AbstractSpec)>>initializeInstance | | | | | 2.7% {0ms} SpecInterpreter class>>private_interpretASpec:model: | | | | | 2.7% {0ms} SpecInterpreter>>interpretASpec:model: | | | | | 2.7% {0ms} SpecInterpreter>>interpretASpec:model:superSpec: | | | | | 2.7% {0ms} SpecInterpreter>>interpretASpec: | | | | | 2.7% {0ms} SpecInterpreter>>retreiveSpecFrom: | | | | | 1.3% {0ms} SpecInterpreter class>>private_interpretASpec:model:superSpec: | | | | | |1.3% {0ms} SpecInterpreter>>interpretASpec:model:superSpec: | | | | | | 1.3% {0ms} SpecInterpreter>>interpretASpec: | | | | | | 1.3% {0ms} SpecInterpreter>>convertSymbolOfClassToInstance: | | | | | | 1.3% {0ms} DropListMorph class(Behavior)>>new | | | | | | 1.3% {0ms} DropListMorph>>initialize | | | | | 1.3% {0ms} RawSpec>>defaultReceiver:model: | | | | | 1.3% {0ms} SpecInterpreter class>>private_interpretASpec:model: | | | | | 1.3% {0ms} SpecInterpreter>>interpretASpec:model: | | | | | 1.3% {0ms} SpecInterpreter>>interpretASpec:model:superSpec: | | | | | 1.3% {0ms} SpecInterpreter>>interpretASpec: | | | | | 1.3% {0ms} SpecInterpreter>>convertSymbolOfClassToInstance: | | | | | 1.3% {0ms} DropListMorph class(Behavior)>>new | | | | | 1.3% {0ms} DropListMorph>>initialize | | | | 2.2% {0ms} SpecInterpreter>>actionToPerformWithSelector:arguments: | | | | 2.2% {0ms} MultiColumnListSpec(AbstractSpec)>>instance | | | | 2.2% {0ms} MultiColumnListSpec(AbstractSpec)>>initializeInstance | | | | 2.2% {0ms} SpecInterpreter class>>private_interpretASpec:model: | | | | 2.2% {0ms} SpecInterpreter>>interpretASpec:model: | | | | 2.2% {0ms} SpecInterpreter>>interpretASpec:model:superSpec: | | | | 2.2% {0ms} SpecInterpreter>>interpretASpec: | | | | 2.2% {0ms} SpecInterpreter>>retreiveSpecFrom: | | |3.5% {0ms} MessageBrowser(ComposableModel)>>ensureExtentFor: | | | 3.5% {0ms} PanelMorph(Morph)>>extent: | | | 3.5% {0ms} PanelMorph(Morph)>>changed | | | 3.5% {0ms} PanelMorph(Morph)>>privateFullBounds | | | 3.5% {0ms} PanelMorph(Morph)>>submorphBounds | | | 3.5% {0ms} PanelMorph(Morph)>>fullBounds | | | 3.5% {0ms} PanelMorph(Morph)>>doLayoutIn: | | | 3.5% {0ms} ProportionalLayout>>layout:in: | | | 3.5% {0ms} PluggableTextMorph(Morph)>>layoutProportionallyIn: | | | 3.2% {0ms} PluggableTextMorph(Morph)>>layoutInBounds: | | | 2.7% {0ms} PluggableTextMorph(Morph)>>bounds: | | | 1.6% {0ms} PluggableTextMorph>>extent: | |1.9% {0ms} StandardWindow(SystemWindow)>>addMorph:frame: | | 1.9% {0ms} StandardWindow(SystemWindow)>>addMorph:fullFrame: | | 1.9% {0ms} PanelMorph>>adoptPaneColor: | | 1.9% {0ms} PanelMorph(Morph)>>color: | | 1.9% {0ms} PanelMorph(Morph)>>changed | | 1.9% {0ms} PanelMorph(Morph)>>privateFullBounds | | 1.9% {0ms} PanelMorph(Morph)>>submorphBounds | | 1.9% {0ms} PanelMorph(Morph)>>fullBounds | | 1.9% {0ms} PanelMorph(Morph)>>doLayoutIn: | | 1.9% {0ms} ProportionalLayout>>layout:in: | | 1.9% {0ms} PluggableTextMorph(Morph)>>layoutProportionallyIn: | | 1.6% {0ms} PluggableTextMorph(Morph)>>layoutInBounds: |7.3% {0ms} SpecInterpreter class>>private_buildWidgetFor:withSpec: | 7.3% {0ms} SpecInterpreter class>>private_interpretASpec:model: | 7.3% {0ms} SpecInterpreter>>interpretASpec:model: | 7.3% {0ms} SpecInterpreter>>interpretASpec:model:superSpec: | 7.3% {0ms} SpecInterpreter>>interpretASpec: | 7.3% {0ms} SpecInterpreter>>actionToPerformWithSelector:arguments: | 7.3% {0ms} WindowSpec(AbstractSpec)>>instance | 7.3% {0ms} WindowSpec>>initializeInstance | 7.3% {0ms} StandardWindow class(Behavior)>>new | 7.3% {0ms} StandardWindow>>initialize | 3.8% {0ms} StandardWindow(SystemWindow)>>initialize | |3.5% {0ms} StandardWindow(SystemWindow)>>extent: | | 3.5% {0ms} StandardWindow(Morph)>>extent: | | 3.5% {0ms} StandardWindow(Morph)>>changed | | 3.5% {0ms} StandardWindow(Morph)>>privateFullBounds | | 3.5% {0ms} StandardWindow(Morph)>>submorphBounds | | 3.5% {0ms} AlignmentMorph(Morph)>>fullBounds | | 3.2% {0ms} AlignmentMorph(Morph)>>doLayoutIn: | | 3.2% {0ms} RowLayout>>layout:in: | | 3.0% {0ms} Point>>extent: | | 3.0% {0ms} Rectangle class>>origin:extent: | | 3.0% {0ms} Rectangle>>setOrigin:corner: | 3.5% {0ms} StandardWindow(SystemWindow)>>setWindowColor: | 3.5% {0ms} StandardWindow(SystemWindow)>>setStripeColorsFrom: | 3.5% {0ms} StandardWindow(Morph)>>fillStyle: | 3.5% {0ms} StandardWindow(Morph)>>changed | 3.5% {0ms} StandardWindow(Morph)>>privateFullBounds | 3.5% {0ms} StandardWindow(Morph)>>submorphBounds | 3.5% {0ms} AlignmentMorph(Morph)>>fullBounds | 3.2% {0ms} AlignmentMorph(Morph)>>doLayoutIn: | 3.2% {0ms} RowLayout>>layout:in: | 3.0% {0ms} Point>>extent: | 3.0% {0ms} Rectangle class>>origin:extent: | 3.0% {0ms} Rectangle>>setOrigin:corner: 6.2% {0ms} StandardWindow(Morph)>>openInWorld 6.2% {0ms} StandardWindow(SystemWindow)>>openInWorld: 3.5% {0ms} StandardWindow(Morph)>>bounds: |3.5% {0ms} StandardWindow(SystemWindow)>>position: | 3.5% {0ms} StandardWindow(Morph)>>position: | 3.5% {0ms} StandardWindow(Morph)>>fullBounds | 3.5% {0ms} StandardWindow(Morph)>>doLayoutIn: | 3.5% {0ms} ProportionalLayout>>layout:in: | 3.5% {0ms} AlignmentMorph(Morph)>>layoutProportionallyIn: | 3.5% {0ms} AlignmentMorph(Morph)>>fullBounds | 3.2% {0ms} AlignmentMorph(Morph)>>doLayoutIn: | 3.2% {0ms} RowLayout>>layout:in: | 3.0% {0ms} Point>>extent: | 3.0% {0ms} Rectangle class>>origin:extent: | 3.0% {0ms} Rectangle>>setOrigin:corner: 2.7% {0ms} StandardWindow>>openAsIsIn: 2.7% {0ms} StandardWindow(SystemWindow)>>openAsIsIn: 2.7% {0ms} StandardWindow(SystemWindow)>>activate 2.7% {0ms} StandardWindow(SystemWindow)>>navigateFocusForward 2.7% {0ms} StandardWindow(Morph)>>navigateFocusForward 2.7% {0ms} PluggableTextMorph(Morph)>>takeKeyboardFocus 2.7% {0ms} HandMorph>>newKeyboardFocus: 2.7% {0ms} PluggableTextMorph>>keyboardFocusChange: 2.7% {0ms} TextMorphForEditView(Morph)>>takeKeyboardFocus 2.7% {0ms} HandMorph>>newKeyboardFocus: 2.7% {0ms} TextMorphForEditView>>keyboardFocusChange: 2.7% {0ms} SmalltalkEditor(TextEditor)>>focused: 2.7% {0ms} SmalltalkEditingState>>focused:from: 2.7% {0ms} SmalltalkEditingState(EditingState)>>focused:from: 2.7% {0ms} EditorFindReplaceDialogWindow class>>on: 2.7% {0ms} EditorFindReplaceDialogWindow>>on: 2.7% {0ms} EditorFindReplaceDialogWindow(StandardWindow)>>model: 2.7% {0ms} EditorFindReplaceDialogWindow(SystemWindow)>>model: 2.7% {0ms} EditorFindReplaceDialogWindow(Morph)>>fillStyle: 2.7% {0ms} EditorFindReplaceDialogWindow(Morph)>>changed 2.7% {0ms} EditorFindReplaceDialogWindow(Morph)>>privateFullBounds
2.7% {0ms} EditorFindReplaceDialogWindow(Morph)>>submorphBounds
2.7% {0ms} AlignmentMorph(Morph)>>fullBounds
2.4% {0ms} AlignmentMorph(Morph)>>doLayoutIn:
2.4% {0ms} RowLayout>>layout:in:
2.2% {0ms} Point>>extent:
2.2% {0ms} Rectangle class>>origin:extent:
2.2% {0ms} Rectangle>>setOrigin:corner: 38.3% {1ms} MethodToolbar>>versionMethod 38.3% {1ms} AbstractTool>>browseVersionsFrom: 38.3% {1ms} VersionsBrowser class>>browseVersionsOf:class:meta:category:selector: 38.3% {1ms} VersionsBrowser class>>browseVersionsOf:class:meta:category:selector:lostMethodPointer: 38.3% {1ms} VersionsBrowser class(ChangeList class)>>open:name:multiSelect: 38.3% {1ms} VersionsBrowser class(ChangeList class)>>openAsMorph:name:multiSelect: 38.3% {1ms} VersionsBrowser(ChangeList)>>openAsMorphName:multiSelect: 28.0% {1ms} SystemWindow(Morph)>>openInWorld |28.0% {1ms} SystemWindow>>openInWorld: | 15.1% {0ms} SystemWindow(Morph)>>bounds: | |15.1% {0ms} SystemWindow>>position: | | 15.1% {0ms} SystemWindow(Morph)>>position: | | 15.1% {0ms} SystemWindow(Morph)>>fullBounds | | 15.1% {0ms} SystemWindow(Morph)>>doLayoutIn: | | 14.8% {0ms} ProportionalLayout>>layout:in: | | 14.8% {0ms} AlignmentMorph(Morph)>>layoutProportionallyIn: | | 13.2% {0ms} AlignmentMorph(Morph)>>fullBounds | | |12.9% {0ms} AlignmentMorph(Morph)>>doLayoutIn: | | | 12.4% {0ms} ProportionalLayout>>layout:in: | | | 12.4% {0ms} PanelMorph(Morph)>>layoutProportionallyIn: | | | 11.9% {0ms} PanelMorph(Morph)>>layoutInBounds: | | | 10.2% {0ms} PanelMorph(Morph)>>bounds: | | | 8.1% {0ms} PanelMorph(Morph)>>position: | | | 6.5% {0ms} PanelMorph(Morph)>>fullBounds | | | 5.7% {0ms} PanelMorph(Morph)>>doLayoutIn: | | | 4.0% {0ms} TableLayout>>layout:in: | | | |3.2% {0ms} TableLayout>>placeCells:in:horizontal:target: | | | | 3.2% {0ms} PluggableTextMorph(Morph)>>layoutInBounds: | | | | 3.2% {0ms} PluggableTextMorph(Morph)>>bounds: | | | | 3.2% {0ms} PluggableTextMorph>>extent: | | | | 1.6% {0ms} TextMorphForEditView(TextMorph)>>extent: | | | | 1.3% {0ms} PluggableTextMorph(ScrollPane)>>extent: | | | 1.6% {0ms} PanelMorph(Morph)>>privateFullBounds | | 1.6% {0ms} AlignmentMorph(Morph)>>layoutInBounds: | | 1.6% {0ms} AlignmentMorph(Morph)>>bounds: | 12.9% {0ms} SystemWindow>>openAsIsIn: | 12.7% {0ms} SystemWindow>>activate | 12.7% {0ms} SystemWindow>>basicActivate | 7.8% {0ms} SystemWindow(Morph)>>changed | |7.8% {0ms} SystemWindow(Morph)>>privateFullBounds | | 7.8% {0ms} SystemWindow(Morph)>>submorphBounds | | 7.8% {0ms} AlignmentMorph(Morph)>>fullBounds | | 7.8% {0ms} AlignmentMorph(Morph)>>doLayoutIn: | | 7.8% {0ms} ProportionalLayout>>layout:in: | | 7.8% {0ms} PanelMorph(Morph)>>layoutProportionallyIn: | | 7.8% {0ms} PanelMorph(Morph)>>fullBounds | | 7.8% {0ms} PanelMorph(Morph)>>doLayoutIn: | | 7.8% {0ms} TableLayout>>layout:in: | | 6.2% {0ms} TableLayout>>placeCells:in:horizontal:target: | | |6.2% {0ms} DiffMorph(Morph)>>layoutInBounds: | | | 6.2% {0ms} DiffMorph(Morph)>>bounds: | | | 5.7% {0ms} DiffMorph>>extent: | | | 5.7% {0ms} DiffMorph>>calibrateScrollbar | | | 5.7% {0ms} DiffMorph(Morph)>>fullBounds | | | 5.7% {0ms} DiffMorph(Morph)>>doLayoutIn: | | | 5.7% {0ms} ProportionalLayout>>layout:in: | | | 5.7% {0ms} PanelMorph(Morph)>>layoutProportionallyIn: | | | 5.4% {0ms} PanelMorph(Morph)>>layoutInBounds: | | | 4.6% {0ms} PanelMorph(Morph)>>bounds: | | | 3.5% {0ms} PanelMorph(Morph)>>position: | | | 2.7% {0ms} PanelMorph(Morph)>>fullBounds | | | 2.2% {0ms} PanelMorph(Morph)>>doLayoutIn: | | | 1.3% {0ms} PanelMorph(Morph)>>privateFullBounds | | 1.6% {0ms} TableLayout>>computeCellSizes:in:horizontal: | | 1.6% {0ms} DiffMorph(Morph)>>minExtent | | 1.6% {0ms} ProportionalLayout>>minExtentOf:in: | | 1.6% {0ms} PanelMorph(Morph)>>minExtent | | 1.6% {0ms} PanelMorph(Morph)>>layoutBounds | 4.9% {0ms} VersionsBrowser(CodeHolder)>>modelWakeUpIn: | 4.9% {0ms} VersionsBrowser>>updateListsAndCodeIn: | 4.9% {0ms} VersionsBrowser>>reformulateList | 4.9% {0ms} VersionsBrowser>>contentsChanged | 4.9% {0ms} VersionsBrowser>>buildDiffCodePane | 4.9% {0ms} VersionsBrowser>>buildDiffMorphFromOldString:toNewString:contextClass: | 4.6% {0ms} DiffMorph class(Behavior)>>new | 4.6% {0ms} DiffMorph>>initialize | 4.6% {0ms} DiffMorph>>extent: | 4.6% {0ms} DiffMorph>>calibrateScrollbar | 4.6% {0ms} DiffMorph(Morph)>>fullBounds | 4.6% {0ms} DiffMorph(Morph)>>doLayoutIn: | 2.7% {0ms} DiffMorph(Morph)>>privateFullBounds | |2.7% {0ms} DiffMorph(Morph)>>submorphBounds | | 2.7% {0ms} PanelMorph(Morph)>>fullBounds | | 2.2% {0ms} PanelMorph(Morph)>>doLayoutIn: | | 1.3% {0ms} PanelMorph(Morph)>>privateFullBounds | 1.9% {0ms} ProportionalLayout>>layout:in: | 1.9% {0ms} PanelMorph(Morph)>>layoutProportionallyIn: | 1.6% {0ms} PanelMorph(Morph)>>layoutInBounds: 3.8% {0ms} SystemWindow class>>labelled: |3.8% {0ms} SystemWindow class(Behavior)>>new | 3.8% {0ms} SystemWindow>>initialize | 3.5% {0ms} SystemWindow>>extent: | 3.5% {0ms} SystemWindow(Morph)>>extent: | 3.5% {0ms} SystemWindow(Morph)>>changed | 3.5% {0ms} SystemWindow(Morph)>>privateFullBounds | 3.5% {0ms} SystemWindow(Morph)>>submorphBounds | 3.5% {0ms} AlignmentMorph(Morph)>>fullBounds | 3.2% {0ms} AlignmentMorph(Morph)>>doLayoutIn: | 3.2% {0ms} RowLayout>>layout:in: | 3.0% {0ms} Point>>extent: | 3.0% {0ms} Rectangle class>>origin:extent: | 3.0% {0ms} Rectangle>>setOrigin:corner: 3.5% {0ms} SystemWindow>>model: |3.5% {0ms} SystemWindow(Morph)>>fillStyle: | 3.5% {0ms} SystemWindow(Morph)>>changed | 3.5% {0ms} SystemWindow(Morph)>>privateFullBounds | 3.5% {0ms} SystemWindow(Morph)>>submorphBounds | 3.5% {0ms} AlignmentMorph(Morph)>>fullBounds | 3.2% {0ms} AlignmentMorph(Morph)>>doLayoutIn: | 3.2% {0ms} RowLayout>>layout:in: | 3.0% {0ms} Point>>extent: | 3.0% {0ms} Rectangle class>>origin:extent: | 3.0% {0ms} Rectangle>>setOrigin:corner: 1.9% {0ms} VersionsBrowser(CodeHolder)>>addLowerPanesTo:at:with: 1.9% {0ms} VersionsBrowser(CodeHolder)>>addOptionalButtonsTo:at:plus: 17.5% {0ms} ToolRegistry>>openClassBrowser 17.5% {0ms} Nautilus class>>open 17.5% {0ms} Nautilus class>>openInEnvironment: 17.5% {0ms} Nautilus>>open 17.5% {0ms} NautilusUI>>open 17.5% {0ms} NautilusUI(AbstractNautilusUI)>>open 7.3% {0ms} NautilusWindow class(Behavior)>>new |7.3% {0ms} NautilusWindow(StandardWindow)>>initialize | 3.8% {0ms} NautilusWindow(SystemWindow)>>initialize | |3.5% {0ms} NautilusWindow(SystemWindow)>>extent: | | 3.5% {0ms} NautilusWindow(Morph)>>extent: | | 3.5% {0ms} NautilusWindow(Morph)>>changed | | 3.5% {0ms} NautilusWindow(Morph)>>privateFullBounds | | 3.5% {0ms} NautilusWindow(Morph)>>submorphBounds | | 3.5% {0ms} AlignmentMorph(Morph)>>fullBounds | | 3.2% {0ms} AlignmentMorph(Morph)>>doLayoutIn: | | 3.2% {0ms} RowLayout>>layout:in: | | 3.0% {0ms} Point>>extent: | | 3.0% {0ms} Rectangle class>>origin:extent: | | 3.0% {0ms} Rectangle>>setOrigin:corner: | 3.5% {0ms} NautilusWindow(SystemWindow)>>setWindowColor: | 3.5% {0ms} NautilusWindow(SystemWindow)>>setStripeColorsFrom: | 3.5% {0ms} NautilusWindow(Morph)>>fillStyle: | 3.5% {0ms} NautilusWindow(Morph)>>changed | 3.5% {0ms} NautilusWindow(Morph)>>privateFullBounds | 3.5% {0ms} NautilusWindow(Morph)>>submorphBounds | 3.5% {0ms} AlignmentMorph(Morph)>>fullBounds | 3.2% {0ms} AlignmentMorph(Morph)>>doLayoutIn: | 3.2% {0ms} RowLayout>>layout:in: | 3.0% {0ms} Point>>extent: | 3.0% {0ms} Rectangle class>>origin:extent: | 3.0% {0ms} Rectangle>>setOrigin:corner: 6.7% {0ms} NautilusUI>>addAll: |5.7% {0ms} NautilusUI>>buildColumns:height: | 1.3% {0ms} NautilusUI>>buildNavigationList | 1.3% {0ms} DropListMorph class>>on:list:selected:changeSelected: | 1.3% {0ms} DropListMorph class(Behavior)>>new | 1.3% {0ms} DropListMorph>>initialize 3.5% {0ms} NautilusWindow(Morph)>>openInWorld 3.5% {0ms} NautilusWindow(SystemWindow)>>openInWorld: 3.5% {0ms} NautilusWindow(Morph)>>bounds: 3.5% {0ms} NautilusWindow(SystemWindow)>>position: 3.5% {0ms} NautilusWindow(Morph)>>position: 3.5% {0ms} NautilusWindow(Morph)>>fullBounds 3.5% {0ms} NautilusWindow(Morph)>>doLayoutIn: 3.5% {0ms} ProportionalLayout>>layout:in: 3.5% {0ms} AlignmentMorph(Morph)>>layoutProportionallyIn: 3.5% {0ms} AlignmentMorph(Morph)>>fullBounds 3.2% {0ms} AlignmentMorph(Morph)>>doLayoutIn: 3.2% {0ms} RowLayout>>layout:in: 3.0% {0ms} Point>>extent: 3.0% {0ms} Rectangle class>>origin:extent: 3.0% {0ms} Rectangle>>setOrigin:corner: 3.2% {0ms} WorldState>>doOneCycleNowFor: 3.2% {0ms} HandMorph>>processEvents 3.2% {0ms} HandMorph>>handleEvent: 3.2% {0ms} HandMorph>>sendMouseEvent: 3.2% {0ms} HandMorph>>sendEvent:focus:clear: 3.2% {0ms} PasteUpMorph(Morph)>>processEvent: 3.2% {0ms} PasteUpMorph>>processEvent:using: 3.2% {0ms} PasteUpMorph(Morph)>>processEvent:using: 3.2% {0ms} MorphicEventDispatcher>>dispatchEvent:with: 3.2% {0ms} MorphicEventDispatcher>>dispatchMouseDown:with: 3.2% {0ms} PasteUpMorph(Morph)>>handleEvent: 3.2% {0ms} MouseButtonEvent>>sentTo: 3.2% {0ms} PasteUpMorph(Morph)>>handleMouseDown: 3.2% {0ms} PasteUpMorph>>mouseDown: 3.2% {0ms} PasteUpMorph>>invokeWorldMenu: 3.2% {0ms} MenuMorph>>popUpEvent:in: 3.2% {0ms} MenuMorph>>popUpAt:forHand:in: 3.2% {0ms} MenuMorph>>popUpAt:forHand:in:allowKeyboard: 3.2% {0ms} MenuMorph>>positionAt:relativeTo:inWorld: 3.2% {0ms} MenuMorph(Morph)>>fullBounds 3.2% {0ms} MenuMorph(Morph)>>doLayoutIn: 3.2% {0ms} TableLayout>>layout:in: 3.2% {0ms} TableLayout>>layoutTopToBottom:in: 2.4% {0ms} AlignmentMorph(Morph)>>layoutInBounds: 1.6% {0ms} AlignmentMorph(Morph)>>bounds: 1.6% {0ms} AlignmentMorph(Morph)>>position: 1.6% {0ms} AlignmentMorph(Morph)>>fullBounds 1.3% {0ms} AlignmentMorph(Morph)>>doLayoutIn: 2.7% {0ms} NautilusWindow(SystemWindow)>>closeBoxHit 2.7% {0ms} NautilusWindow>>delete 2.7% {0ms} NautilusWindow(StandardWindow)>>delete 2.7% {0ms} NautilusWindow(SystemWindow)>>delete 2.7% {0ms} SystemWindow class>>noteTopWindowIn: 2.7% {0ms} SystemWindow>>activate 2.7% {0ms} SystemWindow>>navigateFocusForward 2.7% {0ms} SystemWindow(Morph)>>navigateFocusForward 2.7% {0ms} PluggableTextMorph(Morph)>>takeKeyboardFocus 2.7% {0ms} HandMorph>>newKeyboardFocus: 2.7% {0ms} PluggableTextMorph>>keyboardFocusChange: 2.7% {0ms} TextMorphForEditView(Morph)>>takeKeyboardFocus 2.7% {0ms} HandMorph>>newKeyboardFocus: 2.7% {0ms} TextMorphForEditView>>keyboardFocusChange: 2.7% {0ms} SmalltalkEditor(TextEditor)>>focused: 2.7% {0ms} SmalltalkEditingState>>focused:from: 2.7% {0ms} SmalltalkEditingState(EditingState)>>focused:from: 2.7% {0ms} EditorFindReplaceDialogWindow class>>on: 2.7% {0ms} EditorFindReplaceDialogWindow>>on: 2.7% {0ms} EditorFindReplaceDialogWindow(StandardWindow)>>model: 2.7% {0ms} EditorFindReplaceDialogWindow(SystemWindow)>>model: 2.7% {0ms} EditorFindReplaceDialogWindow(Morph)>>fillStyle: 2.7% {0ms} EditorFindReplaceDialogWindow(Morph)>>changed 2.7% {0ms} EditorFindReplaceDialogWindow(Morph)>>privateFullBounds 2.7% {0ms} EditorFindReplaceDialogWindow(Morph)>>submorphBounds 2.7% {0ms} AlignmentMorph(Morph)>>fullBounds 2.4% {0ms} AlignmentMorph(Morph)>>doLayoutIn: 2.4% {0ms} RowLayout>>layout:in: 2.2% {0ms} Point>>extent: 2.2% {0ms} Rectangle class>>origin:extent: 2.2% {0ms} Rectangle>>setOrigin:corner:
**Leaves** 100.0% {2ms} Rectangle>>setOrigin:corner:
**Memory** old +0 bytes young +4,588 bytes used +4,588 bytes free -4,588 bytes
**GCs** full 0 totalling 0ms (0.0% uptime) incr 0 totalling 0ms (0.0% uptime) tenures 0 root table 0 overflows
My feeling is that you are not thru with degenerated rectangles :) You'd better enforce the invariant in http://code.google.com/p/pharo/issues/detail?id=2601 rathert than remove it as requested in http://code.google.com/p/pharo/issues/detail?id=2441
Nicolas
2013/2/13 Nicolas Cellier <nicolas.cellier.aka.nice@gmail.com>:
I tried to put a halt in Rectangle>>setOrigin: topLeft corner: bottomRight in latest Pharo (20543) if width < 0 or height < 0 and of course the image hung... which means that degenerated Rectangles are pretty much in use
I think I will juts raise a Notification, and catch it with a MessageTally hack to track the senders (as documented at http://bugs.squeak.org/bug_view_advanced_page.php?bug_id=6755 )
Nicolas
2013/2/13 Igor Stasenko <siguctua@gmail.com>:
yes.. and i'd like to add that in some places i replaced senders of
rect1 intersect: rect2
with:
rect1 intersect: rect2 ifNone: [ self error: 'should not happen'].
as it appears, it happens in some places... because of the above inconsistency.
-- Best regards, Igor Stasenko.
Hi Stephane, I added the exception just to instrument code and trace the usage of degenerated Rectangles. You must execute the MessageTally snippet in a workspace and then do some normal Pharo activity (since I presume you have some developer activity, open a MC browser or system browser, select a method, browse implementors, etc...) The snippet does emulate the World activity, but is catching the DegeneratedRectangle notification and tallying the call stack each time this notification is raised. You then get a nice report of each and every call stack that raised a DegeneratedRectangle... Inserting a halt in place of the notification in the hope to debug it is impossible (try it) Otherwise you can try and use haltOnce, but IMO it's too limited. Nicolas 2013/2/14 stephane ducasse <stephane.ducasse@free.fr>:
Nicolas
I did what you suggest
Notification subclass: #DegeneratedRectangle instanceVariableNames: '' classVariableNames: '' poolDictionaries: '' category: 'Kernel-BasicObjects'
Rectangle>>setOrigin: topLeft corner: bottomRight origin := topLeft. corner := bottomRight. (self width < 0 or: [ self height < 0 ]) ifTrue: [ DegeneratedRectangle signal ]
Then in a workspace:
tally := MessageTally new. tally spyEvery: 100 on: ['em ezilaitini ot si siht' reverse]. tally class: World class method: World class>>#doOneCycle. "middle lines begin" tallyEnd := false. [(Delay forSeconds: 300) wait. tallyEnd := true] fork. [[World doOneCycle. Processor yield.tallyEnd] whileFalse] on: DegeneratedRectangle do: [:exc | tally tally: exc signalerContext by: 1. exc resume]. (StringHolder new contents: (String streamContents: [:s | tally report: s])) openLabel: 'DegeneratedRectangle Spy Results'. "middle lines end" tally close.
But I get nothing 20531 Then I do not understand the trace you sent where is the information about the wrong rectangle in it.
and here we go:
- 371 tallies, 2 msec.
**Tree** -------------------------------- Process: other processes -------------------------------- 38.3% {1ms} NautilusUI(AbstractNautilusUI)>>browseMessages 38.3% {1ms} NautilusUI(AbstractTool)>>browseMessagesFrom: 38.3% {1ms} NautilusUI(AbstractTool)>>getSelectorAndSendQuery:to:with:selector: 38.3% {1ms} SystemNavigation>>browseAllImplementorsOf: 38.3% {1ms} SystemNavigation>>browseImplementorsOf:name:autoSelect: 38.3% {1ms} SystemNavigation>>browseMessageList:name:autoSelect: 38.3% {1ms} MessageBrowser class>>openMessageList:name:autoSelect: 38.3% {1ms} MessageBrowser>>openWithSpec 38.3% {1ms} MessageBrowser(ComposableModel)>>openWithSpec 38.3% {1ms} MessageBrowser(ComposableModel)>>openWithSpec: 38.3% {1ms} WindowModel>>openWithSpec: 32.1% {1ms} WindowModel>>buildWithSpec: |24.8% {0ms} WindowModel>>addModelIn:withSpec: | |22.9% {0ms} MessageBrowser(ComposableModel)>>buildWithSpec: | | |19.4% {0ms} SpecInterpreter class>>buildWidgetFor:withSpec: | | | |19.4% {0ms} SpecInterpreter class>>interpretASpec:model: | | | | 19.4% {0ms} SpecInterpreter class>>interpretASpec:model:superSpec: | | | | 19.4% {0ms} SpecInterpreter class>>private_interpretASpec:model:superSpec: | | | | 19.4% {0ms} SpecInterpreter>>interpretASpec:model:superSpec: | | | | 19.4% {0ms} SpecInterpreter>>interpretASpec: | | | | 19.4% {0ms} SpecInterpreter class>>private_interpretASpec:model:superSpec: | | | | 19.4% {0ms} SpecInterpreter>>interpretASpec:model:superSpec: | | | | 19.4% {0ms} SpecInterpreter>>interpretASpec: | | | | 19.4% {0ms} SpecInterpreter>>retreiveSpecFrom: | | | | 9.7% {0ms} SpecInterpreter class>>private_interpretASpec:model:superSpec: | | | | |9.7% {0ms} SpecInterpreter>>interpretASpec:model:superSpec: | | | | | 9.7% {0ms} SpecInterpreter>>interpretASpec: | | | | | 9.7% {0ms} SpecInterpreter class>>private_interpretASpec:model:superSpec: | | | | | 9.7% {0ms} SpecInterpreter>>interpretASpec:model:superSpec: | | | | | 9.7% {0ms} SpecInterpreter>>interpretASpec: | | | | | 9.7% {0ms} SpecInterpreter>>retreiveSpecFrom: | | | | | 4.9% {0ms} SpecInterpreter class>>private_interpretASpec:model:superSpec: | | | | | |4.9% {0ms} SpecInterpreter>>interpretASpec:model:superSpec: | | | | | | 4.9% {0ms} SpecInterpreter>>interpretASpec: | | | | | | 4.9% {0ms} MultiColumnListModel(ComposableModel)>>private_buildWithSpec | | | | | | 4.9% {0ms} MultiColumnListModel(ComposableModel)>>private_buildWithSpec: | | | | | | 4.9% {0ms} SpecInterpreter class>>private_buildWidgetFor:withSpec: | | | | | | 4.9% {0ms} SpecInterpreter class>>private_interpretASpec:model: | | | | | | 4.9% {0ms} SpecInterpreter>>interpretASpec:model: | | | | | | 4.9% {0ms} SpecInterpreter>>interpretASpec:model:superSpec: | | | | | | 4.9% {0ms} SpecInterpreter>>interpretASpec: | | | | | | 2.7% {0ms} SpecInterpreter class>>private_interpretASpec:model:superSpec: | | | | | | |2.7% {0ms} SpecInterpreter>>interpretASpec:model:superSpec: | | | | | | | 2.7% {0ms} SpecInterpreter>>interpretASpec: | | | | | | | 2.7% {0ms} DropListModel(ComposableModel)>>private_buildWithSpec | | | | | | | 2.7% {0ms} DropListModel(ComposableModel)>>private_buildWithSpec: | | | | | | | 2.7% {0ms} SpecInterpreter class>>private_buildWidgetFor:withSpec: | | | | | | | 2.7% {0ms} SpecInterpreter class>>private_interpretASpec:model: | | | | | | | 2.7% {0ms} SpecInterpreter>>interpretASpec:model: | | | | | | | 2.7% {0ms} SpecInterpreter>>interpretASpec:model:superSpec: | | | | | | | 2.7% {0ms} SpecInterpreter>>interpretASpec: | | | | | | | 2.7% {0ms} SpecInterpreter>>actionToPerformWithSelector:arguments: | | | | | | | 2.7% {0ms} DropListSpec(AbstractSpec)>>instance | | | | | | | 2.7% {0ms} DropListSpec(AbstractSpec)>>initializeInstance | | | | | | | 2.7% {0ms} SpecInterpreter class>>private_interpretASpec:model: | | | | | | | 2.7% {0ms} SpecInterpreter>>interpretASpec:model: | | | | | | | 2.7% {0ms} SpecInterpreter>>interpretASpec:model:superSpec: | | | | | | | 2.7% {0ms} SpecInterpreter>>interpretASpec: | | | | | | | 2.7% {0ms} SpecInterpreter>>retreiveSpecFrom: | | | | | | | 1.3% {0ms} SpecInterpreter class>>private_interpretASpec:model:superSpec: | | | | | | | |1.3% {0ms} SpecInterpreter>>interpretASpec:model:superSpec: | | | | | | | | 1.3% {0ms} SpecInterpreter>>interpretASpec: | | | | | | | | 1.3% {0ms} SpecInterpreter>>convertSymbolOfClassToInstance: | | | | | | | | 1.3% {0ms} DropListMorph class(Behavior)>>new | | | | | | | | 1.3% {0ms} DropListMorph>>initialize | | | | | | | 1.3% {0ms} RawSpec>>defaultReceiver:model: | | | | | | | 1.3% {0ms} SpecInterpreter class>>private_interpretASpec:model: | | | | | | | 1.3% {0ms} SpecInterpreter>>interpretASpec:model: | | | | | | | 1.3% {0ms} SpecInterpreter>>interpretASpec:model:superSpec: | | | | | | | 1.3% {0ms} SpecInterpreter>>interpretASpec: | | | | | | | 1.3% {0ms} SpecInterpreter>>convertSymbolOfClassToInstance: | | | | | | | 1.3% {0ms} DropListMorph class(Behavior)>>new | | | | | | | 1.3% {0ms} DropListMorph>>initialize | | | | | | 2.2% {0ms} SpecInterpreter>>actionToPerformWithSelector:arguments: | | | | | | 2.2% {0ms} MultiColumnListSpec(AbstractSpec)>>instance | | | | | | 2.2% {0ms} MultiColumnListSpec(AbstractSpec)>>initializeInstance | | | | | | 2.2% {0ms} SpecInterpreter class>>private_interpretASpec:model: | | | | | | 2.2% {0ms} SpecInterpreter>>interpretASpec:model: | | | | | | 2.2% {0ms} SpecInterpreter>>interpretASpec:model:superSpec: | | | | | | 2.2% {0ms} SpecInterpreter>>interpretASpec: | | | | | | 2.2% {0ms} SpecInterpreter>>retreiveSpecFrom: | | | | | 4.9% {0ms} RawSpec>>defaultReceiver:model: | | | | | 4.9% {0ms} SpecInterpreter class>>private_interpretASpec:model: | | | | | 4.9% {0ms} SpecInterpreter>>interpretASpec:model: | | | | | 4.9% {0ms} SpecInterpreter>>interpretASpec:model:superSpec: | | | | | 4.9% {0ms} SpecInterpreter>>interpretASpec: | | | | | 4.9% {0ms} MultiColumnListModel(ComposableModel)>>private_buildWithSpec | | | | | 4.9% {0ms} MultiColumnListModel(ComposableModel)>>private_buildWithSpec: | | | | | 4.9% {0ms} SpecInterpreter class>>private_buildWidgetFor:withSpec: | | | | | 4.9% {0ms} SpecInterpreter class>>private_interpretASpec:model: | | | | | 4.9% {0ms} SpecInterpreter>>interpretASpec:model: | | | | | 4.9% {0ms} SpecInterpreter>>interpretASpec:model:superSpec: | | | | | 4.9% {0ms} SpecInterpreter>>interpretASpec: | | | | | 2.7% {0ms} SpecInterpreter class>>private_interpretASpec:model:superSpec: | | | | | |2.7% {0ms} SpecInterpreter>>interpretASpec:model:superSpec: | | | | | | 2.7% {0ms} SpecInterpreter>>interpretASpec: | | | | | | 2.7% {0ms} DropListModel(ComposableModel)>>private_buildWithSpec | | | | | | 2.7% {0ms} DropListModel(ComposableModel)>>private_buildWithSpec: | | | | | | 2.7% {0ms} SpecInterpreter class>>private_buildWidgetFor:withSpec: | | | | | | 2.7% {0ms} SpecInterpreter class>>private_interpretASpec:model: | | | | | | 2.7% {0ms} SpecInterpreter>>interpretASpec:model: | | | | | | 2.7% {0ms} SpecInterpreter>>interpretASpec:model:superSpec: | | | | | | 2.7% {0ms} SpecInterpreter>>interpretASpec: | | | | | | 2.7% {0ms} SpecInterpreter>>actionToPerformWithSelector:arguments: | | | | | | 2.7% {0ms} DropListSpec(AbstractSpec)>>instance | | | | | | 2.7% {0ms} DropListSpec(AbstractSpec)>>initializeInstance | | | | | | 2.7% {0ms} SpecInterpreter class>>private_interpretASpec:model: | | | | | | 2.7% {0ms} SpecInterpreter>>interpretASpec:model: | | | | | | 2.7% {0ms} SpecInterpreter>>interpretASpec:model:superSpec: | | | | | | 2.7% {0ms} SpecInterpreter>>interpretASpec: | | | | | | 2.7% {0ms} SpecInterpreter>>retreiveSpecFrom: | | | | | | 1.3% {0ms} SpecInterpreter class>>private_interpretASpec:model:superSpec: | | | | | | |1.3% {0ms} SpecInterpreter>>interpretASpec:model:superSpec: | | | | | | | 1.3% {0ms} SpecInterpreter>>interpretASpec: | | | | | | | 1.3% {0ms} SpecInterpreter>>convertSymbolOfClassToInstance: | | | | | | | 1.3% {0ms} DropListMorph class(Behavior)>>new | | | | | | | 1.3% {0ms} DropListMorph>>initialize | | | | | | 1.3% {0ms} RawSpec>>defaultReceiver:model: | | | | | | 1.3% {0ms} SpecInterpreter class>>private_interpretASpec:model: | | | | | | 1.3% {0ms} SpecInterpreter>>interpretASpec:model: | | | | | | 1.3% {0ms} SpecInterpreter>>interpretASpec:model:superSpec: | | | | | | 1.3% {0ms} SpecInterpreter>>interpretASpec: | | | | | | 1.3% {0ms} SpecInterpreter>>convertSymbolOfClassToInstance: | | | | | | 1.3% {0ms} DropListMorph class(Behavior)>>new | | | | | | 1.3% {0ms} DropListMorph>>initialize | | | | | 2.2% {0ms} SpecInterpreter>>actionToPerformWithSelector:arguments: | | | | | 2.2% {0ms} MultiColumnListSpec(AbstractSpec)>>instance | | | | | 2.2% {0ms} MultiColumnListSpec(AbstractSpec)>>initializeInstance | | | | | 2.2% {0ms} SpecInterpreter class>>private_interpretASpec:model: | | | | | 2.2% {0ms} SpecInterpreter>>interpretASpec:model: | | | | | 2.2% {0ms} SpecInterpreter>>interpretASpec:model:superSpec: | | | | | 2.2% {0ms} SpecInterpreter>>interpretASpec: | | | | | 2.2% {0ms} SpecInterpreter>>retreiveSpecFrom: | | | | 9.7% {0ms} RawSpec>>defaultReceiver:model: | | | | 9.7% {0ms} SpecInterpreter class>>private_interpretASpec:model: | | | | 9.7% {0ms} SpecInterpreter>>interpretASpec:model: | | | | 9.7% {0ms} SpecInterpreter>>interpretASpec:model:superSpec: | | | | 9.7% {0ms} SpecInterpreter>>interpretASpec: | | | | 9.7% {0ms} SpecInterpreter class>>private_interpretASpec:model:superSpec: | | | | 9.7% {0ms} SpecInterpreter>>interpretASpec:model:superSpec: | | | | 9.7% {0ms} SpecInterpreter>>interpretASpec: | | | | 9.7% {0ms} SpecInterpreter>>retreiveSpecFrom: | | | | 4.9% {0ms} SpecInterpreter class>>private_interpretASpec:model:superSpec: | | | | |4.9% {0ms} SpecInterpreter>>interpretASpec:model:superSpec: | | | | | 4.9% {0ms} SpecInterpreter>>interpretASpec: | | | | | 4.9% {0ms} MultiColumnListModel(ComposableModel)>>private_buildWithSpec | | | | | 4.9% {0ms} MultiColumnListModel(ComposableModel)>>private_buildWithSpec: | | | | | 4.9% {0ms} SpecInterpreter class>>private_buildWidgetFor:withSpec: | | | | | 4.9% {0ms} SpecInterpreter class>>private_interpretASpec:model: | | | | | 4.9% {0ms} SpecInterpreter>>interpretASpec:model: | | | | | 4.9% {0ms} SpecInterpreter>>interpretASpec:model:superSpec: | | | | | 4.9% {0ms} SpecInterpreter>>interpretASpec: | | | | | 2.7% {0ms} SpecInterpreter class>>private_interpretASpec:model:superSpec: | | | | | |2.7% {0ms} SpecInterpreter>>interpretASpec:model:superSpec: | | | | | | 2.7% {0ms} SpecInterpreter>>interpretASpec: | | | | | | 2.7% {0ms} DropListModel(ComposableModel)>>private_buildWithSpec | | | | | | 2.7% {0ms} DropListModel(ComposableModel)>>private_buildWithSpec: | | | | | | 2.7% {0ms} SpecInterpreter class>>private_buildWidgetFor:withSpec: | | | | | | 2.7% {0ms} SpecInterpreter class>>private_interpretASpec:model: | | | | | | 2.7% {0ms} SpecInterpreter>>interpretASpec:model: | | | | | | 2.7% {0ms} SpecInterpreter>>interpretASpec:model:superSpec: | | | | | | 2.7% {0ms} SpecInterpreter>>interpretASpec: | | | | | | 2.7% {0ms} SpecInterpreter>>actionToPerformWithSelector:arguments: | | | | | | 2.7% {0ms} DropListSpec(AbstractSpec)>>instance | | | | | | 2.7% {0ms} DropListSpec(AbstractSpec)>>initializeInstance | | | | | | 2.7% {0ms} SpecInterpreter class>>private_interpretASpec:model: | | | | | | 2.7% {0ms} SpecInterpreter>>interpretASpec:model: | | | | | | 2.7% {0ms} SpecInterpreter>>interpretASpec:model:superSpec: | | | | | | 2.7% {0ms} SpecInterpreter>>interpretASpec: | | | | | | 2.7% {0ms} SpecInterpreter>>retreiveSpecFrom: | | | | | | 1.3% {0ms} SpecInterpreter class>>private_interpretASpec:model:superSpec: | | | | | | |1.3% {0ms} SpecInterpreter>>interpretASpec:model:superSpec: | | | | | | | 1.3% {0ms} SpecInterpreter>>interpretASpec: | | | | | | | 1.3% {0ms} SpecInterpreter>>convertSymbolOfClassToInstance: | | | | | | | 1.3% {0ms} DropListMorph class(Behavior)>>new | | | | | | | 1.3% {0ms} DropListMorph>>initialize | | | | | | 1.3% {0ms} RawSpec>>defaultReceiver:model: | | | | | | 1.3% {0ms} SpecInterpreter class>>private_interpretASpec:model: | | | | | | 1.3% {0ms} SpecInterpreter>>interpretASpec:model: | | | | | | 1.3% {0ms} SpecInterpreter>>interpretASpec:model:superSpec: | | | | | | 1.3% {0ms} SpecInterpreter>>interpretASpec: | | | | | | 1.3% {0ms} SpecInterpreter>>convertSymbolOfClassToInstance: | | | | | | 1.3% {0ms} DropListMorph class(Behavior)>>new | | | | | | 1.3% {0ms} DropListMorph>>initialize | | | | | 2.2% {0ms} SpecInterpreter>>actionToPerformWithSelector:arguments: | | | | | 2.2% {0ms} MultiColumnListSpec(AbstractSpec)>>instance | | | | | 2.2% {0ms} MultiColumnListSpec(AbstractSpec)>>initializeInstance | | | | | 2.2% {0ms} SpecInterpreter class>>private_interpretASpec:model: | | | | | 2.2% {0ms} SpecInterpreter>>interpretASpec:model: | | | | | 2.2% {0ms} SpecInterpreter>>interpretASpec:model:superSpec: | | | | | 2.2% {0ms} SpecInterpreter>>interpretASpec: | | | | | 2.2% {0ms} SpecInterpreter>>retreiveSpecFrom: | | | | 4.9% {0ms} RawSpec>>defaultReceiver:model: | | | | 4.9% {0ms} SpecInterpreter class>>private_interpretASpec:model: | | | | 4.9% {0ms} SpecInterpreter>>interpretASpec:model: | | | | 4.9% {0ms} SpecInterpreter>>interpretASpec:model:superSpec: | | | | 4.9% {0ms} SpecInterpreter>>interpretASpec: | | | | 4.9% {0ms} MultiColumnListModel(ComposableModel)>>private_buildWithSpec | | | | 4.9% {0ms} MultiColumnListModel(ComposableModel)>>private_buildWithSpec: | | | | 4.9% {0ms} SpecInterpreter class>>private_buildWidgetFor:withSpec: | | | | 4.9% {0ms} SpecInterpreter class>>private_interpretASpec:model: | | | | 4.9% {0ms} SpecInterpreter>>interpretASpec:model: | | | | 4.9% {0ms} SpecInterpreter>>interpretASpec:model:superSpec: | | | | 4.9% {0ms} SpecInterpreter>>interpretASpec: | | | | 2.7% {0ms} SpecInterpreter class>>private_interpretASpec:model:superSpec: | | | | |2.7% {0ms} SpecInterpreter>>interpretASpec:model:superSpec: | | | | | 2.7% {0ms} SpecInterpreter>>interpretASpec: | | | | | 2.7% {0ms} DropListModel(ComposableModel)>>private_buildWithSpec | | | | | 2.7% {0ms} DropListModel(ComposableModel)>>private_buildWithSpec: | | | | | 2.7% {0ms} SpecInterpreter class>>private_buildWidgetFor:withSpec: | | | | | 2.7% {0ms} SpecInterpreter class>>private_interpretASpec:model: | | | | | 2.7% {0ms} SpecInterpreter>>interpretASpec:model: | | | | | 2.7% {0ms} SpecInterpreter>>interpretASpec:model:superSpec: | | | | | 2.7% {0ms} SpecInterpreter>>interpretASpec: | | | | | 2.7% {0ms} SpecInterpreter>>actionToPerformWithSelector:arguments: | | | | | 2.7% {0ms} DropListSpec(AbstractSpec)>>instance | | | | | 2.7% {0ms} DropListSpec(AbstractSpec)>>initializeInstance | | | | | 2.7% {0ms} SpecInterpreter class>>private_interpretASpec:model: | | | | | 2.7% {0ms} SpecInterpreter>>interpretASpec:model: | | | | | 2.7% {0ms} SpecInterpreter>>interpretASpec:model:superSpec: | | | | | 2.7% {0ms} SpecInterpreter>>interpretASpec: | | | | | 2.7% {0ms} SpecInterpreter>>retreiveSpecFrom: | | | | | 1.3% {0ms} SpecInterpreter class>>private_interpretASpec:model:superSpec: | | | | | |1.3% {0ms} SpecInterpreter>>interpretASpec:model:superSpec: | | | | | | 1.3% {0ms} SpecInterpreter>>interpretASpec: | | | | | | 1.3% {0ms} SpecInterpreter>>convertSymbolOfClassToInstance: | | | | | | 1.3% {0ms} DropListMorph class(Behavior)>>new | | | | | | 1.3% {0ms} DropListMorph>>initialize | | | | | 1.3% {0ms} RawSpec>>defaultReceiver:model: | | | | | 1.3% {0ms} SpecInterpreter class>>private_interpretASpec:model: | | | | | 1.3% {0ms} SpecInterpreter>>interpretASpec:model: | | | | | 1.3% {0ms} SpecInterpreter>>interpretASpec:model:superSpec: | | | | | 1.3% {0ms} SpecInterpreter>>interpretASpec: | | | | | 1.3% {0ms} SpecInterpreter>>convertSymbolOfClassToInstance: | | | | | 1.3% {0ms} DropListMorph class(Behavior)>>new | | | | | 1.3% {0ms} DropListMorph>>initialize | | | | 2.2% {0ms} SpecInterpreter>>actionToPerformWithSelector:arguments: | | | | 2.2% {0ms} MultiColumnListSpec(AbstractSpec)>>instance | | | | 2.2% {0ms} MultiColumnListSpec(AbstractSpec)>>initializeInstance | | | | 2.2% {0ms} SpecInterpreter class>>private_interpretASpec:model: | | | | 2.2% {0ms} SpecInterpreter>>interpretASpec:model: | | | | 2.2% {0ms} SpecInterpreter>>interpretASpec:model:superSpec: | | | | 2.2% {0ms} SpecInterpreter>>interpretASpec: | | | | 2.2% {0ms} SpecInterpreter>>retreiveSpecFrom: | | |3.5% {0ms} MessageBrowser(ComposableModel)>>ensureExtentFor: | | | 3.5% {0ms} PanelMorph(Morph)>>extent: | | | 3.5% {0ms} PanelMorph(Morph)>>changed | | | 3.5% {0ms} PanelMorph(Morph)>>privateFullBounds | | | 3.5% {0ms} PanelMorph(Morph)>>submorphBounds | | | 3.5% {0ms} PanelMorph(Morph)>>fullBounds | | | 3.5% {0ms} PanelMorph(Morph)>>doLayoutIn: | | | 3.5% {0ms} ProportionalLayout>>layout:in: | | | 3.5% {0ms} PluggableTextMorph(Morph)>>layoutProportionallyIn: | | | 3.2% {0ms} PluggableTextMorph(Morph)>>layoutInBounds: | | | 2.7% {0ms} PluggableTextMorph(Morph)>>bounds: | | | 1.6% {0ms} PluggableTextMorph>>extent: | |1.9% {0ms} StandardWindow(SystemWindow)>>addMorph:frame: | | 1.9% {0ms} StandardWindow(SystemWindow)>>addMorph:fullFrame: | | 1.9% {0ms} PanelMorph>>adoptPaneColor: | | 1.9% {0ms} PanelMorph(Morph)>>color: | | 1.9% {0ms} PanelMorph(Morph)>>changed | | 1.9% {0ms} PanelMorph(Morph)>>privateFullBounds | | 1.9% {0ms} PanelMorph(Morph)>>submorphBounds | | 1.9% {0ms} PanelMorph(Morph)>>fullBounds | | 1.9% {0ms} PanelMorph(Morph)>>doLayoutIn: | | 1.9% {0ms} ProportionalLayout>>layout:in: | | 1.9% {0ms} PluggableTextMorph(Morph)>>layoutProportionallyIn: | | 1.6% {0ms} PluggableTextMorph(Morph)>>layoutInBounds: |7.3% {0ms} SpecInterpreter class>>private_buildWidgetFor:withSpec: | 7.3% {0ms} SpecInterpreter class>>private_interpretASpec:model: | 7.3% {0ms} SpecInterpreter>>interpretASpec:model: | 7.3% {0ms} SpecInterpreter>>interpretASpec:model:superSpec: | 7.3% {0ms} SpecInterpreter>>interpretASpec: | 7.3% {0ms} SpecInterpreter>>actionToPerformWithSelector:arguments: | 7.3% {0ms} WindowSpec(AbstractSpec)>>instance | 7.3% {0ms} WindowSpec>>initializeInstance | 7.3% {0ms} StandardWindow class(Behavior)>>new | 7.3% {0ms} StandardWindow>>initialize | 3.8% {0ms} StandardWindow(SystemWindow)>>initialize | |3.5% {0ms} StandardWindow(SystemWindow)>>extent: | | 3.5% {0ms} StandardWindow(Morph)>>extent: | | 3.5% {0ms} StandardWindow(Morph)>>changed | | 3.5% {0ms} StandardWindow(Morph)>>privateFullBounds | | 3.5% {0ms} StandardWindow(Morph)>>submorphBounds | | 3.5% {0ms} AlignmentMorph(Morph)>>fullBounds | | 3.2% {0ms} AlignmentMorph(Morph)>>doLayoutIn: | | 3.2% {0ms} RowLayout>>layout:in: | | 3.0% {0ms} Point>>extent: | | 3.0% {0ms} Rectangle class>>origin:extent: | | 3.0% {0ms} Rectangle>>setOrigin:corner: | 3.5% {0ms} StandardWindow(SystemWindow)>>setWindowColor: | 3.5% {0ms} StandardWindow(SystemWindow)>>setStripeColorsFrom: | 3.5% {0ms} StandardWindow(Morph)>>fillStyle: | 3.5% {0ms} StandardWindow(Morph)>>changed | 3.5% {0ms} StandardWindow(Morph)>>privateFullBounds | 3.5% {0ms} StandardWindow(Morph)>>submorphBounds | 3.5% {0ms} AlignmentMorph(Morph)>>fullBounds | 3.2% {0ms} AlignmentMorph(Morph)>>doLayoutIn: | 3.2% {0ms} RowLayout>>layout:in: | 3.0% {0ms} Point>>extent: | 3.0% {0ms} Rectangle class>>origin:extent: | 3.0% {0ms} Rectangle>>setOrigin:corner: 6.2% {0ms} StandardWindow(Morph)>>openInWorld 6.2% {0ms} StandardWindow(SystemWindow)>>openInWorld: 3.5% {0ms} StandardWindow(Morph)>>bounds: |3.5% {0ms} StandardWindow(SystemWindow)>>position: | 3.5% {0ms} StandardWindow(Morph)>>position: | 3.5% {0ms} StandardWindow(Morph)>>fullBounds | 3.5% {0ms} StandardWindow(Morph)>>doLayoutIn: | 3.5% {0ms} ProportionalLayout>>layout:in: | 3.5% {0ms} AlignmentMorph(Morph)>>layoutProportionallyIn: | 3.5% {0ms} AlignmentMorph(Morph)>>fullBounds | 3.2% {0ms} AlignmentMorph(Morph)>>doLayoutIn: | 3.2% {0ms} RowLayout>>layout:in: | 3.0% {0ms} Point>>extent: | 3.0% {0ms} Rectangle class>>origin:extent: | 3.0% {0ms} Rectangle>>setOrigin:corner: 2.7% {0ms} StandardWindow>>openAsIsIn: 2.7% {0ms} StandardWindow(SystemWindow)>>openAsIsIn: 2.7% {0ms} StandardWindow(SystemWindow)>>activate 2.7% {0ms} StandardWindow(SystemWindow)>>navigateFocusForward 2.7% {0ms} StandardWindow(Morph)>>navigateFocusForward 2.7% {0ms} PluggableTextMorph(Morph)>>takeKeyboardFocus 2.7% {0ms} HandMorph>>newKeyboardFocus: 2.7% {0ms} PluggableTextMorph>>keyboardFocusChange: 2.7% {0ms} TextMorphForEditView(Morph)>>takeKeyboardFocus 2.7% {0ms} HandMorph>>newKeyboardFocus: 2.7% {0ms} TextMorphForEditView>>keyboardFocusChange: 2.7% {0ms} SmalltalkEditor(TextEditor)>>focused: 2.7% {0ms} SmalltalkEditingState>>focused:from: 2.7% {0ms} SmalltalkEditingState(EditingState)>>focused:from: 2.7% {0ms} EditorFindReplaceDialogWindow class>>on: 2.7% {0ms} EditorFindReplaceDialogWindow>>on: 2.7% {0ms} EditorFindReplaceDialogWindow(StandardWindow)>>model: 2.7% {0ms} EditorFindReplaceDialogWindow(SystemWindow)>>model: 2.7% {0ms} EditorFindReplaceDialogWindow(Morph)>>fillStyle: 2.7% {0ms} EditorFindReplaceDialogWindow(Morph)>>changed 2.7% {0ms} EditorFindReplaceDialogWindow(Morph)>>privateFullBounds
2.7% {0ms} EditorFindReplaceDialogWindow(Morph)>>submorphBounds
2.7% {0ms} AlignmentMorph(Morph)>>fullBounds
2.4% {0ms} AlignmentMorph(Morph)>>doLayoutIn:
2.4% {0ms} RowLayout>>layout:in:
2.2% {0ms} Point>>extent:
2.2% {0ms} Rectangle class>>origin:extent:
2.2% {0ms} Rectangle>>setOrigin:corner: 38.3% {1ms} MethodToolbar>>versionMethod 38.3% {1ms} AbstractTool>>browseVersionsFrom: 38.3% {1ms} VersionsBrowser class>>browseVersionsOf:class:meta:category:selector: 38.3% {1ms} VersionsBrowser class>>browseVersionsOf:class:meta:category:selector:lostMethodPointer: 38.3% {1ms} VersionsBrowser class(ChangeList class)>>open:name:multiSelect: 38.3% {1ms} VersionsBrowser class(ChangeList class)>>openAsMorph:name:multiSelect: 38.3% {1ms} VersionsBrowser(ChangeList)>>openAsMorphName:multiSelect: 28.0% {1ms} SystemWindow(Morph)>>openInWorld |28.0% {1ms} SystemWindow>>openInWorld: | 15.1% {0ms} SystemWindow(Morph)>>bounds: | |15.1% {0ms} SystemWindow>>position: | | 15.1% {0ms} SystemWindow(Morph)>>position: | | 15.1% {0ms} SystemWindow(Morph)>>fullBounds | | 15.1% {0ms} SystemWindow(Morph)>>doLayoutIn: | | 14.8% {0ms} ProportionalLayout>>layout:in: | | 14.8% {0ms} AlignmentMorph(Morph)>>layoutProportionallyIn: | | 13.2% {0ms} AlignmentMorph(Morph)>>fullBounds | | |12.9% {0ms} AlignmentMorph(Morph)>>doLayoutIn: | | | 12.4% {0ms} ProportionalLayout>>layout:in: | | | 12.4% {0ms} PanelMorph(Morph)>>layoutProportionallyIn: | | | 11.9% {0ms} PanelMorph(Morph)>>layoutInBounds: | | | 10.2% {0ms} PanelMorph(Morph)>>bounds: | | | 8.1% {0ms} PanelMorph(Morph)>>position: | | | 6.5% {0ms} PanelMorph(Morph)>>fullBounds | | | 5.7% {0ms} PanelMorph(Morph)>>doLayoutIn: | | | 4.0% {0ms} TableLayout>>layout:in: | | | |3.2% {0ms} TableLayout>>placeCells:in:horizontal:target: | | | | 3.2% {0ms} PluggableTextMorph(Morph)>>layoutInBounds: | | | | 3.2% {0ms} PluggableTextMorph(Morph)>>bounds: | | | | 3.2% {0ms} PluggableTextMorph>>extent: | | | | 1.6% {0ms} TextMorphForEditView(TextMorph)>>extent: | | | | 1.3% {0ms} PluggableTextMorph(ScrollPane)>>extent: | | | 1.6% {0ms} PanelMorph(Morph)>>privateFullBounds | | 1.6% {0ms} AlignmentMorph(Morph)>>layoutInBounds: | | 1.6% {0ms} AlignmentMorph(Morph)>>bounds: | 12.9% {0ms} SystemWindow>>openAsIsIn: | 12.7% {0ms} SystemWindow>>activate | 12.7% {0ms} SystemWindow>>basicActivate | 7.8% {0ms} SystemWindow(Morph)>>changed | |7.8% {0ms} SystemWindow(Morph)>>privateFullBounds | | 7.8% {0ms} SystemWindow(Morph)>>submorphBounds | | 7.8% {0ms} AlignmentMorph(Morph)>>fullBounds | | 7.8% {0ms} AlignmentMorph(Morph)>>doLayoutIn: | | 7.8% {0ms} ProportionalLayout>>layout:in: | | 7.8% {0ms} PanelMorph(Morph)>>layoutProportionallyIn: | | 7.8% {0ms} PanelMorph(Morph)>>fullBounds | | 7.8% {0ms} PanelMorph(Morph)>>doLayoutIn: | | 7.8% {0ms} TableLayout>>layout:in: | | 6.2% {0ms} TableLayout>>placeCells:in:horizontal:target: | | |6.2% {0ms} DiffMorph(Morph)>>layoutInBounds: | | | 6.2% {0ms} DiffMorph(Morph)>>bounds: | | | 5.7% {0ms} DiffMorph>>extent: | | | 5.7% {0ms} DiffMorph>>calibrateScrollbar | | | 5.7% {0ms} DiffMorph(Morph)>>fullBounds | | | 5.7% {0ms} DiffMorph(Morph)>>doLayoutIn: | | | 5.7% {0ms} ProportionalLayout>>layout:in: | | | 5.7% {0ms} PanelMorph(Morph)>>layoutProportionallyIn: | | | 5.4% {0ms} PanelMorph(Morph)>>layoutInBounds: | | | 4.6% {0ms} PanelMorph(Morph)>>bounds: | | | 3.5% {0ms} PanelMorph(Morph)>>position: | | | 2.7% {0ms} PanelMorph(Morph)>>fullBounds | | | 2.2% {0ms} PanelMorph(Morph)>>doLayoutIn: | | | 1.3% {0ms} PanelMorph(Morph)>>privateFullBounds | | 1.6% {0ms} TableLayout>>computeCellSizes:in:horizontal: | | 1.6% {0ms} DiffMorph(Morph)>>minExtent | | 1.6% {0ms} ProportionalLayout>>minExtentOf:in: | | 1.6% {0ms} PanelMorph(Morph)>>minExtent | | 1.6% {0ms} PanelMorph(Morph)>>layoutBounds | 4.9% {0ms} VersionsBrowser(CodeHolder)>>modelWakeUpIn: | 4.9% {0ms} VersionsBrowser>>updateListsAndCodeIn: | 4.9% {0ms} VersionsBrowser>>reformulateList | 4.9% {0ms} VersionsBrowser>>contentsChanged | 4.9% {0ms} VersionsBrowser>>buildDiffCodePane | 4.9% {0ms} VersionsBrowser>>buildDiffMorphFromOldString:toNewString:contextClass: | 4.6% {0ms} DiffMorph class(Behavior)>>new | 4.6% {0ms} DiffMorph>>initialize | 4.6% {0ms} DiffMorph>>extent: | 4.6% {0ms} DiffMorph>>calibrateScrollbar | 4.6% {0ms} DiffMorph(Morph)>>fullBounds | 4.6% {0ms} DiffMorph(Morph)>>doLayoutIn: | 2.7% {0ms} DiffMorph(Morph)>>privateFullBounds | |2.7% {0ms} DiffMorph(Morph)>>submorphBounds | | 2.7% {0ms} PanelMorph(Morph)>>fullBounds | | 2.2% {0ms} PanelMorph(Morph)>>doLayoutIn: | | 1.3% {0ms} PanelMorph(Morph)>>privateFullBounds | 1.9% {0ms} ProportionalLayout>>layout:in: | 1.9% {0ms} PanelMorph(Morph)>>layoutProportionallyIn: | 1.6% {0ms} PanelMorph(Morph)>>layoutInBounds: 3.8% {0ms} SystemWindow class>>labelled: |3.8% {0ms} SystemWindow class(Behavior)>>new | 3.8% {0ms} SystemWindow>>initialize | 3.5% {0ms} SystemWindow>>extent: | 3.5% {0ms} SystemWindow(Morph)>>extent: | 3.5% {0ms} SystemWindow(Morph)>>changed | 3.5% {0ms} SystemWindow(Morph)>>privateFullBounds | 3.5% {0ms} SystemWindow(Morph)>>submorphBounds | 3.5% {0ms} AlignmentMorph(Morph)>>fullBounds | 3.2% {0ms} AlignmentMorph(Morph)>>doLayoutIn: | 3.2% {0ms} RowLayout>>layout:in: | 3.0% {0ms} Point>>extent: | 3.0% {0ms} Rectangle class>>origin:extent: | 3.0% {0ms} Rectangle>>setOrigin:corner: 3.5% {0ms} SystemWindow>>model: |3.5% {0ms} SystemWindow(Morph)>>fillStyle: | 3.5% {0ms} SystemWindow(Morph)>>changed | 3.5% {0ms} SystemWindow(Morph)>>privateFullBounds | 3.5% {0ms} SystemWindow(Morph)>>submorphBounds | 3.5% {0ms} AlignmentMorph(Morph)>>fullBounds | 3.2% {0ms} AlignmentMorph(Morph)>>doLayoutIn: | 3.2% {0ms} RowLayout>>layout:in: | 3.0% {0ms} Point>>extent: | 3.0% {0ms} Rectangle class>>origin:extent: | 3.0% {0ms} Rectangle>>setOrigin:corner: 1.9% {0ms} VersionsBrowser(CodeHolder)>>addLowerPanesTo:at:with: 1.9% {0ms} VersionsBrowser(CodeHolder)>>addOptionalButtonsTo:at:plus: 17.5% {0ms} ToolRegistry>>openClassBrowser 17.5% {0ms} Nautilus class>>open 17.5% {0ms} Nautilus class>>openInEnvironment: 17.5% {0ms} Nautilus>>open 17.5% {0ms} NautilusUI>>open 17.5% {0ms} NautilusUI(AbstractNautilusUI)>>open 7.3% {0ms} NautilusWindow class(Behavior)>>new |7.3% {0ms} NautilusWindow(StandardWindow)>>initialize | 3.8% {0ms} NautilusWindow(SystemWindow)>>initialize | |3.5% {0ms} NautilusWindow(SystemWindow)>>extent: | | 3.5% {0ms} NautilusWindow(Morph)>>extent: | | 3.5% {0ms} NautilusWindow(Morph)>>changed | | 3.5% {0ms} NautilusWindow(Morph)>>privateFullBounds | | 3.5% {0ms} NautilusWindow(Morph)>>submorphBounds | | 3.5% {0ms} AlignmentMorph(Morph)>>fullBounds | | 3.2% {0ms} AlignmentMorph(Morph)>>doLayoutIn: | | 3.2% {0ms} RowLayout>>layout:in: | | 3.0% {0ms} Point>>extent: | | 3.0% {0ms} Rectangle class>>origin:extent: | | 3.0% {0ms} Rectangle>>setOrigin:corner: | 3.5% {0ms} NautilusWindow(SystemWindow)>>setWindowColor: | 3.5% {0ms} NautilusWindow(SystemWindow)>>setStripeColorsFrom: | 3.5% {0ms} NautilusWindow(Morph)>>fillStyle: | 3.5% {0ms} NautilusWindow(Morph)>>changed | 3.5% {0ms} NautilusWindow(Morph)>>privateFullBounds | 3.5% {0ms} NautilusWindow(Morph)>>submorphBounds | 3.5% {0ms} AlignmentMorph(Morph)>>fullBounds | 3.2% {0ms} AlignmentMorph(Morph)>>doLayoutIn: | 3.2% {0ms} RowLayout>>layout:in: | 3.0% {0ms} Point>>extent: | 3.0% {0ms} Rectangle class>>origin:extent: | 3.0% {0ms} Rectangle>>setOrigin:corner: 6.7% {0ms} NautilusUI>>addAll: |5.7% {0ms} NautilusUI>>buildColumns:height: | 1.3% {0ms} NautilusUI>>buildNavigationList | 1.3% {0ms} DropListMorph class>>on:list:selected:changeSelected: | 1.3% {0ms} DropListMorph class(Behavior)>>new | 1.3% {0ms} DropListMorph>>initialize 3.5% {0ms} NautilusWindow(Morph)>>openInWorld 3.5% {0ms} NautilusWindow(SystemWindow)>>openInWorld: 3.5% {0ms} NautilusWindow(Morph)>>bounds: 3.5% {0ms} NautilusWindow(SystemWindow)>>position: 3.5% {0ms} NautilusWindow(Morph)>>position: 3.5% {0ms} NautilusWindow(Morph)>>fullBounds 3.5% {0ms} NautilusWindow(Morph)>>doLayoutIn: 3.5% {0ms} ProportionalLayout>>layout:in: 3.5% {0ms} AlignmentMorph(Morph)>>layoutProportionallyIn: 3.5% {0ms} AlignmentMorph(Morph)>>fullBounds 3.2% {0ms} AlignmentMorph(Morph)>>doLayoutIn: 3.2% {0ms} RowLayout>>layout:in: 3.0% {0ms} Point>>extent: 3.0% {0ms} Rectangle class>>origin:extent: 3.0% {0ms} Rectangle>>setOrigin:corner: 3.2% {0ms} WorldState>>doOneCycleNowFor: 3.2% {0ms} HandMorph>>processEvents 3.2% {0ms} HandMorph>>handleEvent: 3.2% {0ms} HandMorph>>sendMouseEvent: 3.2% {0ms} HandMorph>>sendEvent:focus:clear: 3.2% {0ms} PasteUpMorph(Morph)>>processEvent: 3.2% {0ms} PasteUpMorph>>processEvent:using: 3.2% {0ms} PasteUpMorph(Morph)>>processEvent:using: 3.2% {0ms} MorphicEventDispatcher>>dispatchEvent:with: 3.2% {0ms} MorphicEventDispatcher>>dispatchMouseDown:with: 3.2% {0ms} PasteUpMorph(Morph)>>handleEvent: 3.2% {0ms} MouseButtonEvent>>sentTo: 3.2% {0ms} PasteUpMorph(Morph)>>handleMouseDown: 3.2% {0ms} PasteUpMorph>>mouseDown: 3.2% {0ms} PasteUpMorph>>invokeWorldMenu: 3.2% {0ms} MenuMorph>>popUpEvent:in: 3.2% {0ms} MenuMorph>>popUpAt:forHand:in: 3.2% {0ms} MenuMorph>>popUpAt:forHand:in:allowKeyboard: 3.2% {0ms} MenuMorph>>positionAt:relativeTo:inWorld: 3.2% {0ms} MenuMorph(Morph)>>fullBounds 3.2% {0ms} MenuMorph(Morph)>>doLayoutIn: 3.2% {0ms} TableLayout>>layout:in: 3.2% {0ms} TableLayout>>layoutTopToBottom:in: 2.4% {0ms} AlignmentMorph(Morph)>>layoutInBounds: 1.6% {0ms} AlignmentMorph(Morph)>>bounds: 1.6% {0ms} AlignmentMorph(Morph)>>position: 1.6% {0ms} AlignmentMorph(Morph)>>fullBounds 1.3% {0ms} AlignmentMorph(Morph)>>doLayoutIn: 2.7% {0ms} NautilusWindow(SystemWindow)>>closeBoxHit 2.7% {0ms} NautilusWindow>>delete 2.7% {0ms} NautilusWindow(StandardWindow)>>delete 2.7% {0ms} NautilusWindow(SystemWindow)>>delete 2.7% {0ms} SystemWindow class>>noteTopWindowIn: 2.7% {0ms} SystemWindow>>activate 2.7% {0ms} SystemWindow>>navigateFocusForward 2.7% {0ms} SystemWindow(Morph)>>navigateFocusForward 2.7% {0ms} PluggableTextMorph(Morph)>>takeKeyboardFocus 2.7% {0ms} HandMorph>>newKeyboardFocus: 2.7% {0ms} PluggableTextMorph>>keyboardFocusChange: 2.7% {0ms} TextMorphForEditView(Morph)>>takeKeyboardFocus 2.7% {0ms} HandMorph>>newKeyboardFocus: 2.7% {0ms} TextMorphForEditView>>keyboardFocusChange: 2.7% {0ms} SmalltalkEditor(TextEditor)>>focused: 2.7% {0ms} SmalltalkEditingState>>focused:from: 2.7% {0ms} SmalltalkEditingState(EditingState)>>focused:from: 2.7% {0ms} EditorFindReplaceDialogWindow class>>on: 2.7% {0ms} EditorFindReplaceDialogWindow>>on: 2.7% {0ms} EditorFindReplaceDialogWindow(StandardWindow)>>model: 2.7% {0ms} EditorFindReplaceDialogWindow(SystemWindow)>>model: 2.7% {0ms} EditorFindReplaceDialogWindow(Morph)>>fillStyle: 2.7% {0ms} EditorFindReplaceDialogWindow(Morph)>>changed 2.7% {0ms} EditorFindReplaceDialogWindow(Morph)>>privateFullBounds 2.7% {0ms} EditorFindReplaceDialogWindow(Morph)>>submorphBounds 2.7% {0ms} AlignmentMorph(Morph)>>fullBounds 2.4% {0ms} AlignmentMorph(Morph)>>doLayoutIn: 2.4% {0ms} RowLayout>>layout:in: 2.2% {0ms} Point>>extent: 2.2% {0ms} Rectangle class>>origin:extent: 2.2% {0ms} Rectangle>>setOrigin:corner:
**Leaves** 100.0% {2ms} Rectangle>>setOrigin:corner:
**Memory** old +0 bytes young +4,588 bytes used +4,588 bytes free -4,588 bytes
**GCs** full 0 totalling 0ms (0.0% uptime) incr 0 totalling 0ms (0.0% uptime) tenures 0 root table 0 overflows
My feeling is that you are not thru with degenerated rectangles :) You'd better enforce the invariant in http://code.google.com/p/pharo/issues/detail?id=2601 rathert than remove it as requested in http://code.google.com/p/pharo/issues/detail?id=2441
Nicolas
2013/2/13 Nicolas Cellier <nicolas.cellier.aka.nice@gmail.com>:
I tried to put a halt in Rectangle>>setOrigin: topLeft corner: bottomRight in latest Pharo (20543) if width < 0 or height < 0 and of course the image hung... which means that degenerated Rectangles are pretty much in use
I think I will juts raise a Notification, and catch it with a MessageTally hack to track the senders (as documented at http://bugs.squeak.org/bug_view_advanced_page.php?bug_id=6755 )
Nicolas
2013/2/13 Igor Stasenko <siguctua@gmail.com>:
yes.. and i'd like to add that in some places i replaced senders of
rect1 intersect: rect2
with:
rect1 intersect: rect2 ifNone: [ self error: 'should not happen'].
as it appears, it happens in some places... because of the above inconsistency.
-- Best regards, Igor Stasenko.
2013/2/14 Nicolas Cellier <nicolas.cellier.aka.nice@gmail.com>:
Hi Stephane, I added the exception just to instrument code and trace the usage of degenerated Rectangles.
You must execute the MessageTally snippet in a workspace and then do some normal Pharo activity (since I presume you have some developer activity, open a MC browser or system browser, select a method, browse implementors, etc...)
The snippet does emulate the World activity, but is catching the DegeneratedRectangle notification and tallying the call stack each time this notification is raised.
You then get a nice report of each and every call stack that raised a DegeneratedRectangle...
I forgot to tell, the snippet contains a Timer that should stop World emulation after 5 minutes. But you can simply trigger it by hand by evaluating in the workspace: tallyEnd := true
Inserting a halt in place of the notification in the hope to debug it is impossible (try it) Otherwise you can try and use haltOnce, but IMO it's too limited.
Nicolas
2013/2/14 stephane ducasse <stephane.ducasse@free.fr>:
Nicolas
I did what you suggest
Notification subclass: #DegeneratedRectangle instanceVariableNames: '' classVariableNames: '' poolDictionaries: '' category: 'Kernel-BasicObjects'
Rectangle>>setOrigin: topLeft corner: bottomRight origin := topLeft. corner := bottomRight. (self width < 0 or: [ self height < 0 ]) ifTrue: [ DegeneratedRectangle signal ]
Then in a workspace:
tally := MessageTally new. tally spyEvery: 100 on: ['em ezilaitini ot si siht' reverse]. tally class: World class method: World class>>#doOneCycle. "middle lines begin" tallyEnd := false. [(Delay forSeconds: 300) wait. tallyEnd := true] fork. [[World doOneCycle. Processor yield.tallyEnd] whileFalse] on: DegeneratedRectangle do: [:exc | tally tally: exc signalerContext by: 1. exc resume]. (StringHolder new contents: (String streamContents: [:s | tally report: s])) openLabel: 'DegeneratedRectangle Spy Results'. "middle lines end" tally close.
But I get nothing 20531 Then I do not understand the trace you sent where is the information about the wrong rectangle in it.
and here we go:
- 371 tallies, 2 msec.
**Tree** -------------------------------- Process: other processes -------------------------------- 38.3% {1ms} NautilusUI(AbstractNautilusUI)>>browseMessages 38.3% {1ms} NautilusUI(AbstractTool)>>browseMessagesFrom: 38.3% {1ms} NautilusUI(AbstractTool)>>getSelectorAndSendQuery:to:with:selector: 38.3% {1ms} SystemNavigation>>browseAllImplementorsOf: 38.3% {1ms} SystemNavigation>>browseImplementorsOf:name:autoSelect: 38.3% {1ms} SystemNavigation>>browseMessageList:name:autoSelect: 38.3% {1ms} MessageBrowser class>>openMessageList:name:autoSelect: 38.3% {1ms} MessageBrowser>>openWithSpec 38.3% {1ms} MessageBrowser(ComposableModel)>>openWithSpec 38.3% {1ms} MessageBrowser(ComposableModel)>>openWithSpec: 38.3% {1ms} WindowModel>>openWithSpec: 32.1% {1ms} WindowModel>>buildWithSpec: |24.8% {0ms} WindowModel>>addModelIn:withSpec: | |22.9% {0ms} MessageBrowser(ComposableModel)>>buildWithSpec: | | |19.4% {0ms} SpecInterpreter class>>buildWidgetFor:withSpec: | | | |19.4% {0ms} SpecInterpreter class>>interpretASpec:model: | | | | 19.4% {0ms} SpecInterpreter class>>interpretASpec:model:superSpec: | | | | 19.4% {0ms} SpecInterpreter class>>private_interpretASpec:model:superSpec: | | | | 19.4% {0ms} SpecInterpreter>>interpretASpec:model:superSpec: | | | | 19.4% {0ms} SpecInterpreter>>interpretASpec: | | | | 19.4% {0ms} SpecInterpreter class>>private_interpretASpec:model:superSpec: | | | | 19.4% {0ms} SpecInterpreter>>interpretASpec:model:superSpec: | | | | 19.4% {0ms} SpecInterpreter>>interpretASpec: | | | | 19.4% {0ms} SpecInterpreter>>retreiveSpecFrom: | | | | 9.7% {0ms} SpecInterpreter class>>private_interpretASpec:model:superSpec: | | | | |9.7% {0ms} SpecInterpreter>>interpretASpec:model:superSpec: | | | | | 9.7% {0ms} SpecInterpreter>>interpretASpec: | | | | | 9.7% {0ms} SpecInterpreter class>>private_interpretASpec:model:superSpec: | | | | | 9.7% {0ms} SpecInterpreter>>interpretASpec:model:superSpec: | | | | | 9.7% {0ms} SpecInterpreter>>interpretASpec: | | | | | 9.7% {0ms} SpecInterpreter>>retreiveSpecFrom: | | | | | 4.9% {0ms} SpecInterpreter class>>private_interpretASpec:model:superSpec: | | | | | |4.9% {0ms} SpecInterpreter>>interpretASpec:model:superSpec: | | | | | | 4.9% {0ms} SpecInterpreter>>interpretASpec: | | | | | | 4.9% {0ms} MultiColumnListModel(ComposableModel)>>private_buildWithSpec | | | | | | 4.9% {0ms} MultiColumnListModel(ComposableModel)>>private_buildWithSpec: | | | | | | 4.9% {0ms} SpecInterpreter class>>private_buildWidgetFor:withSpec: | | | | | | 4.9% {0ms} SpecInterpreter class>>private_interpretASpec:model: | | | | | | 4.9% {0ms} SpecInterpreter>>interpretASpec:model: | | | | | | 4.9% {0ms} SpecInterpreter>>interpretASpec:model:superSpec: | | | | | | 4.9% {0ms} SpecInterpreter>>interpretASpec: | | | | | | 2.7% {0ms} SpecInterpreter class>>private_interpretASpec:model:superSpec: | | | | | | |2.7% {0ms} SpecInterpreter>>interpretASpec:model:superSpec: | | | | | | | 2.7% {0ms} SpecInterpreter>>interpretASpec: | | | | | | | 2.7% {0ms} DropListModel(ComposableModel)>>private_buildWithSpec | | | | | | | 2.7% {0ms} DropListModel(ComposableModel)>>private_buildWithSpec: | | | | | | | 2.7% {0ms} SpecInterpreter class>>private_buildWidgetFor:withSpec: | | | | | | | 2.7% {0ms} SpecInterpreter class>>private_interpretASpec:model: | | | | | | | 2.7% {0ms} SpecInterpreter>>interpretASpec:model: | | | | | | | 2.7% {0ms} SpecInterpreter>>interpretASpec:model:superSpec: | | | | | | | 2.7% {0ms} SpecInterpreter>>interpretASpec: | | | | | | | 2.7% {0ms} SpecInterpreter>>actionToPerformWithSelector:arguments: | | | | | | | 2.7% {0ms} DropListSpec(AbstractSpec)>>instance | | | | | | | 2.7% {0ms} DropListSpec(AbstractSpec)>>initializeInstance | | | | | | | 2.7% {0ms} SpecInterpreter class>>private_interpretASpec:model: | | | | | | | 2.7% {0ms} SpecInterpreter>>interpretASpec:model: | | | | | | | 2.7% {0ms} SpecInterpreter>>interpretASpec:model:superSpec: | | | | | | | 2.7% {0ms} SpecInterpreter>>interpretASpec: | | | | | | | 2.7% {0ms} SpecInterpreter>>retreiveSpecFrom: | | | | | | | 1.3% {0ms} SpecInterpreter class>>private_interpretASpec:model:superSpec: | | | | | | | |1.3% {0ms} SpecInterpreter>>interpretASpec:model:superSpec: | | | | | | | | 1.3% {0ms} SpecInterpreter>>interpretASpec: | | | | | | | | 1.3% {0ms} SpecInterpreter>>convertSymbolOfClassToInstance: | | | | | | | | 1.3% {0ms} DropListMorph class(Behavior)>>new | | | | | | | | 1.3% {0ms} DropListMorph>>initialize | | | | | | | 1.3% {0ms} RawSpec>>defaultReceiver:model: | | | | | | | 1.3% {0ms} SpecInterpreter class>>private_interpretASpec:model: | | | | | | | 1.3% {0ms} SpecInterpreter>>interpretASpec:model: | | | | | | | 1.3% {0ms} SpecInterpreter>>interpretASpec:model:superSpec: | | | | | | | 1.3% {0ms} SpecInterpreter>>interpretASpec: | | | | | | | 1.3% {0ms} SpecInterpreter>>convertSymbolOfClassToInstance: | | | | | | | 1.3% {0ms} DropListMorph class(Behavior)>>new | | | | | | | 1.3% {0ms} DropListMorph>>initialize | | | | | | 2.2% {0ms} SpecInterpreter>>actionToPerformWithSelector:arguments: | | | | | | 2.2% {0ms} MultiColumnListSpec(AbstractSpec)>>instance | | | | | | 2.2% {0ms} MultiColumnListSpec(AbstractSpec)>>initializeInstance | | | | | | 2.2% {0ms} SpecInterpreter class>>private_interpretASpec:model: | | | | | | 2.2% {0ms} SpecInterpreter>>interpretASpec:model: | | | | | | 2.2% {0ms} SpecInterpreter>>interpretASpec:model:superSpec: | | | | | | 2.2% {0ms} SpecInterpreter>>interpretASpec: | | | | | | 2.2% {0ms} SpecInterpreter>>retreiveSpecFrom: | | | | | 4.9% {0ms} RawSpec>>defaultReceiver:model: | | | | | 4.9% {0ms} SpecInterpreter class>>private_interpretASpec:model: | | | | | 4.9% {0ms} SpecInterpreter>>interpretASpec:model: | | | | | 4.9% {0ms} SpecInterpreter>>interpretASpec:model:superSpec: | | | | | 4.9% {0ms} SpecInterpreter>>interpretASpec: | | | | | 4.9% {0ms} MultiColumnListModel(ComposableModel)>>private_buildWithSpec | | | | | 4.9% {0ms} MultiColumnListModel(ComposableModel)>>private_buildWithSpec: | | | | | 4.9% {0ms} SpecInterpreter class>>private_buildWidgetFor:withSpec: | | | | | 4.9% {0ms} SpecInterpreter class>>private_interpretASpec:model: | | | | | 4.9% {0ms} SpecInterpreter>>interpretASpec:model: | | | | | 4.9% {0ms} SpecInterpreter>>interpretASpec:model:superSpec: | | | | | 4.9% {0ms} SpecInterpreter>>interpretASpec: | | | | | 2.7% {0ms} SpecInterpreter class>>private_interpretASpec:model:superSpec: | | | | | |2.7% {0ms} SpecInterpreter>>interpretASpec:model:superSpec: | | | | | | 2.7% {0ms} SpecInterpreter>>interpretASpec: | | | | | | 2.7% {0ms} DropListModel(ComposableModel)>>private_buildWithSpec | | | | | | 2.7% {0ms} DropListModel(ComposableModel)>>private_buildWithSpec: | | | | | | 2.7% {0ms} SpecInterpreter class>>private_buildWidgetFor:withSpec: | | | | | | 2.7% {0ms} SpecInterpreter class>>private_interpretASpec:model: | | | | | | 2.7% {0ms} SpecInterpreter>>interpretASpec:model: | | | | | | 2.7% {0ms} SpecInterpreter>>interpretASpec:model:superSpec: | | | | | | 2.7% {0ms} SpecInterpreter>>interpretASpec: | | | | | | 2.7% {0ms} SpecInterpreter>>actionToPerformWithSelector:arguments: | | | | | | 2.7% {0ms} DropListSpec(AbstractSpec)>>instance | | | | | | 2.7% {0ms} DropListSpec(AbstractSpec)>>initializeInstance | | | | | | 2.7% {0ms} SpecInterpreter class>>private_interpretASpec:model: | | | | | | 2.7% {0ms} SpecInterpreter>>interpretASpec:model: | | | | | | 2.7% {0ms} SpecInterpreter>>interpretASpec:model:superSpec: | | | | | | 2.7% {0ms} SpecInterpreter>>interpretASpec: | | | | | | 2.7% {0ms} SpecInterpreter>>retreiveSpecFrom: | | | | | | 1.3% {0ms} SpecInterpreter class>>private_interpretASpec:model:superSpec: | | | | | | |1.3% {0ms} SpecInterpreter>>interpretASpec:model:superSpec: | | | | | | | 1.3% {0ms} SpecInterpreter>>interpretASpec: | | | | | | | 1.3% {0ms} SpecInterpreter>>convertSymbolOfClassToInstance: | | | | | | | 1.3% {0ms} DropListMorph class(Behavior)>>new | | | | | | | 1.3% {0ms} DropListMorph>>initialize | | | | | | 1.3% {0ms} RawSpec>>defaultReceiver:model: | | | | | | 1.3% {0ms} SpecInterpreter class>>private_interpretASpec:model: | | | | | | 1.3% {0ms} SpecInterpreter>>interpretASpec:model: | | | | | | 1.3% {0ms} SpecInterpreter>>interpretASpec:model:superSpec: | | | | | | 1.3% {0ms} SpecInterpreter>>interpretASpec: | | | | | | 1.3% {0ms} SpecInterpreter>>convertSymbolOfClassToInstance: | | | | | | 1.3% {0ms} DropListMorph class(Behavior)>>new | | | | | | 1.3% {0ms} DropListMorph>>initialize | | | | | 2.2% {0ms} SpecInterpreter>>actionToPerformWithSelector:arguments: | | | | | 2.2% {0ms} MultiColumnListSpec(AbstractSpec)>>instance | | | | | 2.2% {0ms} MultiColumnListSpec(AbstractSpec)>>initializeInstance | | | | | 2.2% {0ms} SpecInterpreter class>>private_interpretASpec:model: | | | | | 2.2% {0ms} SpecInterpreter>>interpretASpec:model: | | | | | 2.2% {0ms} SpecInterpreter>>interpretASpec:model:superSpec: | | | | | 2.2% {0ms} SpecInterpreter>>interpretASpec: | | | | | 2.2% {0ms} SpecInterpreter>>retreiveSpecFrom: | | | | 9.7% {0ms} RawSpec>>defaultReceiver:model: | | | | 9.7% {0ms} SpecInterpreter class>>private_interpretASpec:model: | | | | 9.7% {0ms} SpecInterpreter>>interpretASpec:model: | | | | 9.7% {0ms} SpecInterpreter>>interpretASpec:model:superSpec: | | | | 9.7% {0ms} SpecInterpreter>>interpretASpec: | | | | 9.7% {0ms} SpecInterpreter class>>private_interpretASpec:model:superSpec: | | | | 9.7% {0ms} SpecInterpreter>>interpretASpec:model:superSpec: | | | | 9.7% {0ms} SpecInterpreter>>interpretASpec: | | | | 9.7% {0ms} SpecInterpreter>>retreiveSpecFrom: | | | | 4.9% {0ms} SpecInterpreter class>>private_interpretASpec:model:superSpec: | | | | |4.9% {0ms} SpecInterpreter>>interpretASpec:model:superSpec: | | | | | 4.9% {0ms} SpecInterpreter>>interpretASpec: | | | | | 4.9% {0ms} MultiColumnListModel(ComposableModel)>>private_buildWithSpec | | | | | 4.9% {0ms} MultiColumnListModel(ComposableModel)>>private_buildWithSpec: | | | | | 4.9% {0ms} SpecInterpreter class>>private_buildWidgetFor:withSpec: | | | | | 4.9% {0ms} SpecInterpreter class>>private_interpretASpec:model: | | | | | 4.9% {0ms} SpecInterpreter>>interpretASpec:model: | | | | | 4.9% {0ms} SpecInterpreter>>interpretASpec:model:superSpec: | | | | | 4.9% {0ms} SpecInterpreter>>interpretASpec: | | | | | 2.7% {0ms} SpecInterpreter class>>private_interpretASpec:model:superSpec: | | | | | |2.7% {0ms} SpecInterpreter>>interpretASpec:model:superSpec: | | | | | | 2.7% {0ms} SpecInterpreter>>interpretASpec: | | | | | | 2.7% {0ms} DropListModel(ComposableModel)>>private_buildWithSpec | | | | | | 2.7% {0ms} DropListModel(ComposableModel)>>private_buildWithSpec: | | | | | | 2.7% {0ms} SpecInterpreter class>>private_buildWidgetFor:withSpec: | | | | | | 2.7% {0ms} SpecInterpreter class>>private_interpretASpec:model: | | | | | | 2.7% {0ms} SpecInterpreter>>interpretASpec:model: | | | | | | 2.7% {0ms} SpecInterpreter>>interpretASpec:model:superSpec: | | | | | | 2.7% {0ms} SpecInterpreter>>interpretASpec: | | | | | | 2.7% {0ms} SpecInterpreter>>actionToPerformWithSelector:arguments: | | | | | | 2.7% {0ms} DropListSpec(AbstractSpec)>>instance | | | | | | 2.7% {0ms} DropListSpec(AbstractSpec)>>initializeInstance | | | | | | 2.7% {0ms} SpecInterpreter class>>private_interpretASpec:model: | | | | | | 2.7% {0ms} SpecInterpreter>>interpretASpec:model: | | | | | | 2.7% {0ms} SpecInterpreter>>interpretASpec:model:superSpec: | | | | | | 2.7% {0ms} SpecInterpreter>>interpretASpec: | | | | | | 2.7% {0ms} SpecInterpreter>>retreiveSpecFrom: | | | | | | 1.3% {0ms} SpecInterpreter class>>private_interpretASpec:model:superSpec: | | | | | | |1.3% {0ms} SpecInterpreter>>interpretASpec:model:superSpec: | | | | | | | 1.3% {0ms} SpecInterpreter>>interpretASpec: | | | | | | | 1.3% {0ms} SpecInterpreter>>convertSymbolOfClassToInstance: | | | | | | | 1.3% {0ms} DropListMorph class(Behavior)>>new | | | | | | | 1.3% {0ms} DropListMorph>>initialize | | | | | | 1.3% {0ms} RawSpec>>defaultReceiver:model: | | | | | | 1.3% {0ms} SpecInterpreter class>>private_interpretASpec:model: | | | | | | 1.3% {0ms} SpecInterpreter>>interpretASpec:model: | | | | | | 1.3% {0ms} SpecInterpreter>>interpretASpec:model:superSpec: | | | | | | 1.3% {0ms} SpecInterpreter>>interpretASpec: | | | | | | 1.3% {0ms} SpecInterpreter>>convertSymbolOfClassToInstance: | | | | | | 1.3% {0ms} DropListMorph class(Behavior)>>new | | | | | | 1.3% {0ms} DropListMorph>>initialize | | | | | 2.2% {0ms} SpecInterpreter>>actionToPerformWithSelector:arguments: | | | | | 2.2% {0ms} MultiColumnListSpec(AbstractSpec)>>instance | | | | | 2.2% {0ms} MultiColumnListSpec(AbstractSpec)>>initializeInstance | | | | | 2.2% {0ms} SpecInterpreter class>>private_interpretASpec:model: | | | | | 2.2% {0ms} SpecInterpreter>>interpretASpec:model: | | | | | 2.2% {0ms} SpecInterpreter>>interpretASpec:model:superSpec: | | | | | 2.2% {0ms} SpecInterpreter>>interpretASpec: | | | | | 2.2% {0ms} SpecInterpreter>>retreiveSpecFrom: | | | | 4.9% {0ms} RawSpec>>defaultReceiver:model: | | | | 4.9% {0ms} SpecInterpreter class>>private_interpretASpec:model: | | | | 4.9% {0ms} SpecInterpreter>>interpretASpec:model: | | | | 4.9% {0ms} SpecInterpreter>>interpretASpec:model:superSpec: | | | | 4.9% {0ms} SpecInterpreter>>interpretASpec: | | | | 4.9% {0ms} MultiColumnListModel(ComposableModel)>>private_buildWithSpec | | | | 4.9% {0ms} MultiColumnListModel(ComposableModel)>>private_buildWithSpec: | | | | 4.9% {0ms} SpecInterpreter class>>private_buildWidgetFor:withSpec: | | | | 4.9% {0ms} SpecInterpreter class>>private_interpretASpec:model: | | | | 4.9% {0ms} SpecInterpreter>>interpretASpec:model: | | | | 4.9% {0ms} SpecInterpreter>>interpretASpec:model:superSpec: | | | | 4.9% {0ms} SpecInterpreter>>interpretASpec: | | | | 2.7% {0ms} SpecInterpreter class>>private_interpretASpec:model:superSpec: | | | | |2.7% {0ms} SpecInterpreter>>interpretASpec:model:superSpec: | | | | | 2.7% {0ms} SpecInterpreter>>interpretASpec: | | | | | 2.7% {0ms} DropListModel(ComposableModel)>>private_buildWithSpec | | | | | 2.7% {0ms} DropListModel(ComposableModel)>>private_buildWithSpec: | | | | | 2.7% {0ms} SpecInterpreter class>>private_buildWidgetFor:withSpec: | | | | | 2.7% {0ms} SpecInterpreter class>>private_interpretASpec:model: | | | | | 2.7% {0ms} SpecInterpreter>>interpretASpec:model: | | | | | 2.7% {0ms} SpecInterpreter>>interpretASpec:model:superSpec: | | | | | 2.7% {0ms} SpecInterpreter>>interpretASpec: | | | | | 2.7% {0ms} SpecInterpreter>>actionToPerformWithSelector:arguments: | | | | | 2.7% {0ms} DropListSpec(AbstractSpec)>>instance | | | | | 2.7% {0ms} DropListSpec(AbstractSpec)>>initializeInstance | | | | | 2.7% {0ms} SpecInterpreter class>>private_interpretASpec:model: | | | | | 2.7% {0ms} SpecInterpreter>>interpretASpec:model: | | | | | 2.7% {0ms} SpecInterpreter>>interpretASpec:model:superSpec: | | | | | 2.7% {0ms} SpecInterpreter>>interpretASpec: | | | | | 2.7% {0ms} SpecInterpreter>>retreiveSpecFrom: | | | | | 1.3% {0ms} SpecInterpreter class>>private_interpretASpec:model:superSpec: | | | | | |1.3% {0ms} SpecInterpreter>>interpretASpec:model:superSpec: | | | | | | 1.3% {0ms} SpecInterpreter>>interpretASpec: | | | | | | 1.3% {0ms} SpecInterpreter>>convertSymbolOfClassToInstance: | | | | | | 1.3% {0ms} DropListMorph class(Behavior)>>new | | | | | | 1.3% {0ms} DropListMorph>>initialize | | | | | 1.3% {0ms} RawSpec>>defaultReceiver:model: | | | | | 1.3% {0ms} SpecInterpreter class>>private_interpretASpec:model: | | | | | 1.3% {0ms} SpecInterpreter>>interpretASpec:model: | | | | | 1.3% {0ms} SpecInterpreter>>interpretASpec:model:superSpec: | | | | | 1.3% {0ms} SpecInterpreter>>interpretASpec: | | | | | 1.3% {0ms} SpecInterpreter>>convertSymbolOfClassToInstance: | | | | | 1.3% {0ms} DropListMorph class(Behavior)>>new | | | | | 1.3% {0ms} DropListMorph>>initialize | | | | 2.2% {0ms} SpecInterpreter>>actionToPerformWithSelector:arguments: | | | | 2.2% {0ms} MultiColumnListSpec(AbstractSpec)>>instance | | | | 2.2% {0ms} MultiColumnListSpec(AbstractSpec)>>initializeInstance | | | | 2.2% {0ms} SpecInterpreter class>>private_interpretASpec:model: | | | | 2.2% {0ms} SpecInterpreter>>interpretASpec:model: | | | | 2.2% {0ms} SpecInterpreter>>interpretASpec:model:superSpec: | | | | 2.2% {0ms} SpecInterpreter>>interpretASpec: | | | | 2.2% {0ms} SpecInterpreter>>retreiveSpecFrom: | | |3.5% {0ms} MessageBrowser(ComposableModel)>>ensureExtentFor: | | | 3.5% {0ms} PanelMorph(Morph)>>extent: | | | 3.5% {0ms} PanelMorph(Morph)>>changed | | | 3.5% {0ms} PanelMorph(Morph)>>privateFullBounds | | | 3.5% {0ms} PanelMorph(Morph)>>submorphBounds | | | 3.5% {0ms} PanelMorph(Morph)>>fullBounds | | | 3.5% {0ms} PanelMorph(Morph)>>doLayoutIn: | | | 3.5% {0ms} ProportionalLayout>>layout:in: | | | 3.5% {0ms} PluggableTextMorph(Morph)>>layoutProportionallyIn: | | | 3.2% {0ms} PluggableTextMorph(Morph)>>layoutInBounds: | | | 2.7% {0ms} PluggableTextMorph(Morph)>>bounds: | | | 1.6% {0ms} PluggableTextMorph>>extent: | |1.9% {0ms} StandardWindow(SystemWindow)>>addMorph:frame: | | 1.9% {0ms} StandardWindow(SystemWindow)>>addMorph:fullFrame: | | 1.9% {0ms} PanelMorph>>adoptPaneColor: | | 1.9% {0ms} PanelMorph(Morph)>>color: | | 1.9% {0ms} PanelMorph(Morph)>>changed | | 1.9% {0ms} PanelMorph(Morph)>>privateFullBounds | | 1.9% {0ms} PanelMorph(Morph)>>submorphBounds | | 1.9% {0ms} PanelMorph(Morph)>>fullBounds | | 1.9% {0ms} PanelMorph(Morph)>>doLayoutIn: | | 1.9% {0ms} ProportionalLayout>>layout:in: | | 1.9% {0ms} PluggableTextMorph(Morph)>>layoutProportionallyIn: | | 1.6% {0ms} PluggableTextMorph(Morph)>>layoutInBounds: |7.3% {0ms} SpecInterpreter class>>private_buildWidgetFor:withSpec: | 7.3% {0ms} SpecInterpreter class>>private_interpretASpec:model: | 7.3% {0ms} SpecInterpreter>>interpretASpec:model: | 7.3% {0ms} SpecInterpreter>>interpretASpec:model:superSpec: | 7.3% {0ms} SpecInterpreter>>interpretASpec: | 7.3% {0ms} SpecInterpreter>>actionToPerformWithSelector:arguments: | 7.3% {0ms} WindowSpec(AbstractSpec)>>instance | 7.3% {0ms} WindowSpec>>initializeInstance | 7.3% {0ms} StandardWindow class(Behavior)>>new | 7.3% {0ms} StandardWindow>>initialize | 3.8% {0ms} StandardWindow(SystemWindow)>>initialize | |3.5% {0ms} StandardWindow(SystemWindow)>>extent: | | 3.5% {0ms} StandardWindow(Morph)>>extent: | | 3.5% {0ms} StandardWindow(Morph)>>changed | | 3.5% {0ms} StandardWindow(Morph)>>privateFullBounds | | 3.5% {0ms} StandardWindow(Morph)>>submorphBounds | | 3.5% {0ms} AlignmentMorph(Morph)>>fullBounds | | 3.2% {0ms} AlignmentMorph(Morph)>>doLayoutIn: | | 3.2% {0ms} RowLayout>>layout:in: | | 3.0% {0ms} Point>>extent: | | 3.0% {0ms} Rectangle class>>origin:extent: | | 3.0% {0ms} Rectangle>>setOrigin:corner: | 3.5% {0ms} StandardWindow(SystemWindow)>>setWindowColor: | 3.5% {0ms} StandardWindow(SystemWindow)>>setStripeColorsFrom: | 3.5% {0ms} StandardWindow(Morph)>>fillStyle: | 3.5% {0ms} StandardWindow(Morph)>>changed | 3.5% {0ms} StandardWindow(Morph)>>privateFullBounds | 3.5% {0ms} StandardWindow(Morph)>>submorphBounds | 3.5% {0ms} AlignmentMorph(Morph)>>fullBounds | 3.2% {0ms} AlignmentMorph(Morph)>>doLayoutIn: | 3.2% {0ms} RowLayout>>layout:in: | 3.0% {0ms} Point>>extent: | 3.0% {0ms} Rectangle class>>origin:extent: | 3.0% {0ms} Rectangle>>setOrigin:corner: 6.2% {0ms} StandardWindow(Morph)>>openInWorld 6.2% {0ms} StandardWindow(SystemWindow)>>openInWorld: 3.5% {0ms} StandardWindow(Morph)>>bounds: |3.5% {0ms} StandardWindow(SystemWindow)>>position: | 3.5% {0ms} StandardWindow(Morph)>>position: | 3.5% {0ms} StandardWindow(Morph)>>fullBounds | 3.5% {0ms} StandardWindow(Morph)>>doLayoutIn: | 3.5% {0ms} ProportionalLayout>>layout:in: | 3.5% {0ms} AlignmentMorph(Morph)>>layoutProportionallyIn: | 3.5% {0ms} AlignmentMorph(Morph)>>fullBounds | 3.2% {0ms} AlignmentMorph(Morph)>>doLayoutIn: | 3.2% {0ms} RowLayout>>layout:in: | 3.0% {0ms} Point>>extent: | 3.0% {0ms} Rectangle class>>origin:extent: | 3.0% {0ms} Rectangle>>setOrigin:corner: 2.7% {0ms} StandardWindow>>openAsIsIn: 2.7% {0ms} StandardWindow(SystemWindow)>>openAsIsIn: 2.7% {0ms} StandardWindow(SystemWindow)>>activate 2.7% {0ms} StandardWindow(SystemWindow)>>navigateFocusForward 2.7% {0ms} StandardWindow(Morph)>>navigateFocusForward 2.7% {0ms} PluggableTextMorph(Morph)>>takeKeyboardFocus 2.7% {0ms} HandMorph>>newKeyboardFocus: 2.7% {0ms} PluggableTextMorph>>keyboardFocusChange: 2.7% {0ms} TextMorphForEditView(Morph)>>takeKeyboardFocus 2.7% {0ms} HandMorph>>newKeyboardFocus: 2.7% {0ms} TextMorphForEditView>>keyboardFocusChange: 2.7% {0ms} SmalltalkEditor(TextEditor)>>focused: 2.7% {0ms} SmalltalkEditingState>>focused:from: 2.7% {0ms} SmalltalkEditingState(EditingState)>>focused:from: 2.7% {0ms} EditorFindReplaceDialogWindow class>>on: 2.7% {0ms} EditorFindReplaceDialogWindow>>on: 2.7% {0ms} EditorFindReplaceDialogWindow(StandardWindow)>>model: 2.7% {0ms} EditorFindReplaceDialogWindow(SystemWindow)>>model: 2.7% {0ms} EditorFindReplaceDialogWindow(Morph)>>fillStyle: 2.7% {0ms} EditorFindReplaceDialogWindow(Morph)>>changed 2.7% {0ms} EditorFindReplaceDialogWindow(Morph)>>privateFullBounds
2.7% {0ms} EditorFindReplaceDialogWindow(Morph)>>submorphBounds
2.7% {0ms} AlignmentMorph(Morph)>>fullBounds
2.4% {0ms} AlignmentMorph(Morph)>>doLayoutIn:
2.4% {0ms} RowLayout>>layout:in:
2.2% {0ms} Point>>extent:
2.2% {0ms} Rectangle class>>origin:extent:
2.2% {0ms} Rectangle>>setOrigin:corner: 38.3% {1ms} MethodToolbar>>versionMethod 38.3% {1ms} AbstractTool>>browseVersionsFrom: 38.3% {1ms} VersionsBrowser class>>browseVersionsOf:class:meta:category:selector: 38.3% {1ms} VersionsBrowser class>>browseVersionsOf:class:meta:category:selector:lostMethodPointer: 38.3% {1ms} VersionsBrowser class(ChangeList class)>>open:name:multiSelect: 38.3% {1ms} VersionsBrowser class(ChangeList class)>>openAsMorph:name:multiSelect: 38.3% {1ms} VersionsBrowser(ChangeList)>>openAsMorphName:multiSelect: 28.0% {1ms} SystemWindow(Morph)>>openInWorld |28.0% {1ms} SystemWindow>>openInWorld: | 15.1% {0ms} SystemWindow(Morph)>>bounds: | |15.1% {0ms} SystemWindow>>position: | | 15.1% {0ms} SystemWindow(Morph)>>position: | | 15.1% {0ms} SystemWindow(Morph)>>fullBounds | | 15.1% {0ms} SystemWindow(Morph)>>doLayoutIn: | | 14.8% {0ms} ProportionalLayout>>layout:in: | | 14.8% {0ms} AlignmentMorph(Morph)>>layoutProportionallyIn: | | 13.2% {0ms} AlignmentMorph(Morph)>>fullBounds | | |12.9% {0ms} AlignmentMorph(Morph)>>doLayoutIn: | | | 12.4% {0ms} ProportionalLayout>>layout:in: | | | 12.4% {0ms} PanelMorph(Morph)>>layoutProportionallyIn: | | | 11.9% {0ms} PanelMorph(Morph)>>layoutInBounds: | | | 10.2% {0ms} PanelMorph(Morph)>>bounds: | | | 8.1% {0ms} PanelMorph(Morph)>>position: | | | 6.5% {0ms} PanelMorph(Morph)>>fullBounds | | | 5.7% {0ms} PanelMorph(Morph)>>doLayoutIn: | | | 4.0% {0ms} TableLayout>>layout:in: | | | |3.2% {0ms} TableLayout>>placeCells:in:horizontal:target: | | | | 3.2% {0ms} PluggableTextMorph(Morph)>>layoutInBounds: | | | | 3.2% {0ms} PluggableTextMorph(Morph)>>bounds: | | | | 3.2% {0ms} PluggableTextMorph>>extent: | | | | 1.6% {0ms} TextMorphForEditView(TextMorph)>>extent: | | | | 1.3% {0ms} PluggableTextMorph(ScrollPane)>>extent: | | | 1.6% {0ms} PanelMorph(Morph)>>privateFullBounds | | 1.6% {0ms} AlignmentMorph(Morph)>>layoutInBounds: | | 1.6% {0ms} AlignmentMorph(Morph)>>bounds: | 12.9% {0ms} SystemWindow>>openAsIsIn: | 12.7% {0ms} SystemWindow>>activate | 12.7% {0ms} SystemWindow>>basicActivate | 7.8% {0ms} SystemWindow(Morph)>>changed | |7.8% {0ms} SystemWindow(Morph)>>privateFullBounds | | 7.8% {0ms} SystemWindow(Morph)>>submorphBounds | | 7.8% {0ms} AlignmentMorph(Morph)>>fullBounds | | 7.8% {0ms} AlignmentMorph(Morph)>>doLayoutIn: | | 7.8% {0ms} ProportionalLayout>>layout:in: | | 7.8% {0ms} PanelMorph(Morph)>>layoutProportionallyIn: | | 7.8% {0ms} PanelMorph(Morph)>>fullBounds | | 7.8% {0ms} PanelMorph(Morph)>>doLayoutIn: | | 7.8% {0ms} TableLayout>>layout:in: | | 6.2% {0ms} TableLayout>>placeCells:in:horizontal:target: | | |6.2% {0ms} DiffMorph(Morph)>>layoutInBounds: | | | 6.2% {0ms} DiffMorph(Morph)>>bounds: | | | 5.7% {0ms} DiffMorph>>extent: | | | 5.7% {0ms} DiffMorph>>calibrateScrollbar | | | 5.7% {0ms} DiffMorph(Morph)>>fullBounds | | | 5.7% {0ms} DiffMorph(Morph)>>doLayoutIn: | | | 5.7% {0ms} ProportionalLayout>>layout:in: | | | 5.7% {0ms} PanelMorph(Morph)>>layoutProportionallyIn: | | | 5.4% {0ms} PanelMorph(Morph)>>layoutInBounds: | | | 4.6% {0ms} PanelMorph(Morph)>>bounds: | | | 3.5% {0ms} PanelMorph(Morph)>>position: | | | 2.7% {0ms} PanelMorph(Morph)>>fullBounds | | | 2.2% {0ms} PanelMorph(Morph)>>doLayoutIn: | | | 1.3% {0ms} PanelMorph(Morph)>>privateFullBounds | | 1.6% {0ms} TableLayout>>computeCellSizes:in:horizontal: | | 1.6% {0ms} DiffMorph(Morph)>>minExtent | | 1.6% {0ms} ProportionalLayout>>minExtentOf:in: | | 1.6% {0ms} PanelMorph(Morph)>>minExtent | | 1.6% {0ms} PanelMorph(Morph)>>layoutBounds | 4.9% {0ms} VersionsBrowser(CodeHolder)>>modelWakeUpIn: | 4.9% {0ms} VersionsBrowser>>updateListsAndCodeIn: | 4.9% {0ms} VersionsBrowser>>reformulateList | 4.9% {0ms} VersionsBrowser>>contentsChanged | 4.9% {0ms} VersionsBrowser>>buildDiffCodePane | 4.9% {0ms} VersionsBrowser>>buildDiffMorphFromOldString:toNewString:contextClass: | 4.6% {0ms} DiffMorph class(Behavior)>>new | 4.6% {0ms} DiffMorph>>initialize | 4.6% {0ms} DiffMorph>>extent: | 4.6% {0ms} DiffMorph>>calibrateScrollbar | 4.6% {0ms} DiffMorph(Morph)>>fullBounds | 4.6% {0ms} DiffMorph(Morph)>>doLayoutIn: | 2.7% {0ms} DiffMorph(Morph)>>privateFullBounds | |2.7% {0ms} DiffMorph(Morph)>>submorphBounds | | 2.7% {0ms} PanelMorph(Morph)>>fullBounds | | 2.2% {0ms} PanelMorph(Morph)>>doLayoutIn: | | 1.3% {0ms} PanelMorph(Morph)>>privateFullBounds | 1.9% {0ms} ProportionalLayout>>layout:in: | 1.9% {0ms} PanelMorph(Morph)>>layoutProportionallyIn: | 1.6% {0ms} PanelMorph(Morph)>>layoutInBounds: 3.8% {0ms} SystemWindow class>>labelled: |3.8% {0ms} SystemWindow class(Behavior)>>new | 3.8% {0ms} SystemWindow>>initialize | 3.5% {0ms} SystemWindow>>extent: | 3.5% {0ms} SystemWindow(Morph)>>extent: | 3.5% {0ms} SystemWindow(Morph)>>changed | 3.5% {0ms} SystemWindow(Morph)>>privateFullBounds | 3.5% {0ms} SystemWindow(Morph)>>submorphBounds | 3.5% {0ms} AlignmentMorph(Morph)>>fullBounds | 3.2% {0ms} AlignmentMorph(Morph)>>doLayoutIn: | 3.2% {0ms} RowLayout>>layout:in: | 3.0% {0ms} Point>>extent: | 3.0% {0ms} Rectangle class>>origin:extent: | 3.0% {0ms} Rectangle>>setOrigin:corner: 3.5% {0ms} SystemWindow>>model: |3.5% {0ms} SystemWindow(Morph)>>fillStyle: | 3.5% {0ms} SystemWindow(Morph)>>changed | 3.5% {0ms} SystemWindow(Morph)>>privateFullBounds | 3.5% {0ms} SystemWindow(Morph)>>submorphBounds | 3.5% {0ms} AlignmentMorph(Morph)>>fullBounds | 3.2% {0ms} AlignmentMorph(Morph)>>doLayoutIn: | 3.2% {0ms} RowLayout>>layout:in: | 3.0% {0ms} Point>>extent: | 3.0% {0ms} Rectangle class>>origin:extent: | 3.0% {0ms} Rectangle>>setOrigin:corner: 1.9% {0ms} VersionsBrowser(CodeHolder)>>addLowerPanesTo:at:with: 1.9% {0ms} VersionsBrowser(CodeHolder)>>addOptionalButtonsTo:at:plus: 17.5% {0ms} ToolRegistry>>openClassBrowser 17.5% {0ms} Nautilus class>>open 17.5% {0ms} Nautilus class>>openInEnvironment: 17.5% {0ms} Nautilus>>open 17.5% {0ms} NautilusUI>>open 17.5% {0ms} NautilusUI(AbstractNautilusUI)>>open 7.3% {0ms} NautilusWindow class(Behavior)>>new |7.3% {0ms} NautilusWindow(StandardWindow)>>initialize | 3.8% {0ms} NautilusWindow(SystemWindow)>>initialize | |3.5% {0ms} NautilusWindow(SystemWindow)>>extent: | | 3.5% {0ms} NautilusWindow(Morph)>>extent: | | 3.5% {0ms} NautilusWindow(Morph)>>changed | | 3.5% {0ms} NautilusWindow(Morph)>>privateFullBounds | | 3.5% {0ms} NautilusWindow(Morph)>>submorphBounds | | 3.5% {0ms} AlignmentMorph(Morph)>>fullBounds | | 3.2% {0ms} AlignmentMorph(Morph)>>doLayoutIn: | | 3.2% {0ms} RowLayout>>layout:in: | | 3.0% {0ms} Point>>extent: | | 3.0% {0ms} Rectangle class>>origin:extent: | | 3.0% {0ms} Rectangle>>setOrigin:corner: | 3.5% {0ms} NautilusWindow(SystemWindow)>>setWindowColor: | 3.5% {0ms} NautilusWindow(SystemWindow)>>setStripeColorsFrom: | 3.5% {0ms} NautilusWindow(Morph)>>fillStyle: | 3.5% {0ms} NautilusWindow(Morph)>>changed | 3.5% {0ms} NautilusWindow(Morph)>>privateFullBounds | 3.5% {0ms} NautilusWindow(Morph)>>submorphBounds | 3.5% {0ms} AlignmentMorph(Morph)>>fullBounds | 3.2% {0ms} AlignmentMorph(Morph)>>doLayoutIn: | 3.2% {0ms} RowLayout>>layout:in: | 3.0% {0ms} Point>>extent: | 3.0% {0ms} Rectangle class>>origin:extent: | 3.0% {0ms} Rectangle>>setOrigin:corner: 6.7% {0ms} NautilusUI>>addAll: |5.7% {0ms} NautilusUI>>buildColumns:height: | 1.3% {0ms} NautilusUI>>buildNavigationList | 1.3% {0ms} DropListMorph class>>on:list:selected:changeSelected: | 1.3% {0ms} DropListMorph class(Behavior)>>new | 1.3% {0ms} DropListMorph>>initialize 3.5% {0ms} NautilusWindow(Morph)>>openInWorld 3.5% {0ms} NautilusWindow(SystemWindow)>>openInWorld: 3.5% {0ms} NautilusWindow(Morph)>>bounds: 3.5% {0ms} NautilusWindow(SystemWindow)>>position: 3.5% {0ms} NautilusWindow(Morph)>>position: 3.5% {0ms} NautilusWindow(Morph)>>fullBounds 3.5% {0ms} NautilusWindow(Morph)>>doLayoutIn: 3.5% {0ms} ProportionalLayout>>layout:in: 3.5% {0ms} AlignmentMorph(Morph)>>layoutProportionallyIn: 3.5% {0ms} AlignmentMorph(Morph)>>fullBounds 3.2% {0ms} AlignmentMorph(Morph)>>doLayoutIn: 3.2% {0ms} RowLayout>>layout:in: 3.0% {0ms} Point>>extent: 3.0% {0ms} Rectangle class>>origin:extent: 3.0% {0ms} Rectangle>>setOrigin:corner: 3.2% {0ms} WorldState>>doOneCycleNowFor: 3.2% {0ms} HandMorph>>processEvents 3.2% {0ms} HandMorph>>handleEvent: 3.2% {0ms} HandMorph>>sendMouseEvent: 3.2% {0ms} HandMorph>>sendEvent:focus:clear: 3.2% {0ms} PasteUpMorph(Morph)>>processEvent: 3.2% {0ms} PasteUpMorph>>processEvent:using: 3.2% {0ms} PasteUpMorph(Morph)>>processEvent:using: 3.2% {0ms} MorphicEventDispatcher>>dispatchEvent:with: 3.2% {0ms} MorphicEventDispatcher>>dispatchMouseDown:with: 3.2% {0ms} PasteUpMorph(Morph)>>handleEvent: 3.2% {0ms} MouseButtonEvent>>sentTo: 3.2% {0ms} PasteUpMorph(Morph)>>handleMouseDown: 3.2% {0ms} PasteUpMorph>>mouseDown: 3.2% {0ms} PasteUpMorph>>invokeWorldMenu: 3.2% {0ms} MenuMorph>>popUpEvent:in: 3.2% {0ms} MenuMorph>>popUpAt:forHand:in: 3.2% {0ms} MenuMorph>>popUpAt:forHand:in:allowKeyboard: 3.2% {0ms} MenuMorph>>positionAt:relativeTo:inWorld: 3.2% {0ms} MenuMorph(Morph)>>fullBounds 3.2% {0ms} MenuMorph(Morph)>>doLayoutIn: 3.2% {0ms} TableLayout>>layout:in: 3.2% {0ms} TableLayout>>layoutTopToBottom:in: 2.4% {0ms} AlignmentMorph(Morph)>>layoutInBounds: 1.6% {0ms} AlignmentMorph(Morph)>>bounds: 1.6% {0ms} AlignmentMorph(Morph)>>position: 1.6% {0ms} AlignmentMorph(Morph)>>fullBounds 1.3% {0ms} AlignmentMorph(Morph)>>doLayoutIn: 2.7% {0ms} NautilusWindow(SystemWindow)>>closeBoxHit 2.7% {0ms} NautilusWindow>>delete 2.7% {0ms} NautilusWindow(StandardWindow)>>delete 2.7% {0ms} NautilusWindow(SystemWindow)>>delete 2.7% {0ms} SystemWindow class>>noteTopWindowIn: 2.7% {0ms} SystemWindow>>activate 2.7% {0ms} SystemWindow>>navigateFocusForward 2.7% {0ms} SystemWindow(Morph)>>navigateFocusForward 2.7% {0ms} PluggableTextMorph(Morph)>>takeKeyboardFocus 2.7% {0ms} HandMorph>>newKeyboardFocus: 2.7% {0ms} PluggableTextMorph>>keyboardFocusChange: 2.7% {0ms} TextMorphForEditView(Morph)>>takeKeyboardFocus 2.7% {0ms} HandMorph>>newKeyboardFocus: 2.7% {0ms} TextMorphForEditView>>keyboardFocusChange: 2.7% {0ms} SmalltalkEditor(TextEditor)>>focused: 2.7% {0ms} SmalltalkEditingState>>focused:from: 2.7% {0ms} SmalltalkEditingState(EditingState)>>focused:from: 2.7% {0ms} EditorFindReplaceDialogWindow class>>on: 2.7% {0ms} EditorFindReplaceDialogWindow>>on: 2.7% {0ms} EditorFindReplaceDialogWindow(StandardWindow)>>model: 2.7% {0ms} EditorFindReplaceDialogWindow(SystemWindow)>>model: 2.7% {0ms} EditorFindReplaceDialogWindow(Morph)>>fillStyle: 2.7% {0ms} EditorFindReplaceDialogWindow(Morph)>>changed 2.7% {0ms} EditorFindReplaceDialogWindow(Morph)>>privateFullBounds 2.7% {0ms} EditorFindReplaceDialogWindow(Morph)>>submorphBounds 2.7% {0ms} AlignmentMorph(Morph)>>fullBounds 2.4% {0ms} AlignmentMorph(Morph)>>doLayoutIn: 2.4% {0ms} RowLayout>>layout:in: 2.2% {0ms} Point>>extent: 2.2% {0ms} Rectangle class>>origin:extent: 2.2% {0ms} Rectangle>>setOrigin:corner:
**Leaves** 100.0% {2ms} Rectangle>>setOrigin:corner:
**Memory** old +0 bytes young +4,588 bytes used +4,588 bytes free -4,588 bytes
**GCs** full 0 totalling 0ms (0.0% uptime) incr 0 totalling 0ms (0.0% uptime) tenures 0 root table 0 overflows
My feeling is that you are not thru with degenerated rectangles :) You'd better enforce the invariant in http://code.google.com/p/pharo/issues/detail?id=2601 rathert than remove it as requested in http://code.google.com/p/pharo/issues/detail?id=2441
Nicolas
2013/2/13 Nicolas Cellier <nicolas.cellier.aka.nice@gmail.com>:
I tried to put a halt in Rectangle>>setOrigin: topLeft corner: bottomRight in latest Pharo (20543) if width < 0 or height < 0 and of course the image hung... which means that degenerated Rectangles are pretty much in use
I think I will juts raise a Notification, and catch it with a MessageTally hack to track the senders (as documented at http://bugs.squeak.org/bug_view_advanced_page.php?bug_id=6755 )
Nicolas
2013/2/13 Igor Stasenko <siguctua@gmail.com>:
yes.. and i'd like to add that in some places i replaced senders of
rect1 intersect: rect2
with:
rect1 intersect: rect2 ifNone: [ self error: 'should not happen'].
as it appears, it happens in some places... because of the above inconsistency.
-- Best regards, Igor Stasenko.
On Feb 14, 2013, at 10:28 AM, Nicolas Cellier <nicolas.cellier.aka.nice@gmail.com> wrote:
Hi Stephane, I added the exception just to instrument code and trace the usage of degenerated Rectangles.
You must execute the MessageTally snippet in a workspace and then do some normal Pharo activity (since I presume you have some developer activity, open a MC browser or system browser, select a method, browse implementors, etcâ¦)
Ok I was nicely waiting :)
The snippet does emulate the World activity, but is catching the DegeneratedRectangle notification and tallying the call stack each time this notification is raised.
You then get a nice report of each and every call stack that raised a DegeneratedRectangle...
Inserting a halt in place of the notification in the hope to debug it is impossible (try it) Otherwise you can try and use haltOnce, but IMO it's too limited.
Nicolas
2013/2/14 stephane ducasse <stephane.ducasse@free.fr>:
Nicolas
I did what you suggest
Notification subclass: #DegeneratedRectangle instanceVariableNames: '' classVariableNames: '' poolDictionaries: '' category: 'Kernel-BasicObjects'
Rectangle>>setOrigin: topLeft corner: bottomRight origin := topLeft. corner := bottomRight. (self width < 0 or: [ self height < 0 ]) ifTrue: [ DegeneratedRectangle signal ]
Then in a workspace:
tally := MessageTally new. tally spyEvery: 100 on: ['em ezilaitini ot si siht' reverse]. tally class: World class method: World class>>#doOneCycle. "middle lines begin" tallyEnd := false. [(Delay forSeconds: 300) wait. tallyEnd := true] fork. [[World doOneCycle. Processor yield.tallyEnd] whileFalse] on: DegeneratedRectangle do: [:exc | tally tally: exc signalerContext by: 1. exc resume]. (StringHolder new contents: (String streamContents: [:s | tally report: s])) openLabel: 'DegeneratedRectangle Spy Results'. "middle lines end" tally close.
But I get nothing 20531 Then I do not understand the trace you sent where is the information about the wrong rectangle in it.
and here we go:
- 371 tallies, 2 msec.
**Tree** -------------------------------- Process: other processes -------------------------------- 38.3% {1ms} NautilusUI(AbstractNautilusUI)>>browseMessages 38.3% {1ms} NautilusUI(AbstractTool)>>browseMessagesFrom: 38.3% {1ms} NautilusUI(AbstractTool)>>getSelectorAndSendQuery:to:with:selector: 38.3% {1ms} SystemNavigation>>browseAllImplementorsOf: 38.3% {1ms} SystemNavigation>>browseImplementorsOf:name:autoSelect: 38.3% {1ms} SystemNavigation>>browseMessageList:name:autoSelect: 38.3% {1ms} MessageBrowser class>>openMessageList:name:autoSelect: 38.3% {1ms} MessageBrowser>>openWithSpec 38.3% {1ms} MessageBrowser(ComposableModel)>>openWithSpec 38.3% {1ms} MessageBrowser(ComposableModel)>>openWithSpec: 38.3% {1ms} WindowModel>>openWithSpec: 32.1% {1ms} WindowModel>>buildWithSpec: |24.8% {0ms} WindowModel>>addModelIn:withSpec: | |22.9% {0ms} MessageBrowser(ComposableModel)>>buildWithSpec: | | |19.4% {0ms} SpecInterpreter class>>buildWidgetFor:withSpec: | | | |19.4% {0ms} SpecInterpreter class>>interpretASpec:model: | | | | 19.4% {0ms} SpecInterpreter class>>interpretASpec:model:superSpec: | | | | 19.4% {0ms} SpecInterpreter class>>private_interpretASpec:model:superSpec: | | | | 19.4% {0ms} SpecInterpreter>>interpretASpec:model:superSpec: | | | | 19.4% {0ms} SpecInterpreter>>interpretASpec: | | | | 19.4% {0ms} SpecInterpreter class>>private_interpretASpec:model:superSpec: | | | | 19.4% {0ms} SpecInterpreter>>interpretASpec:model:superSpec: | | | | 19.4% {0ms} SpecInterpreter>>interpretASpec: | | | | 19.4% {0ms} SpecInterpreter>>retreiveSpecFrom: | | | | 9.7% {0ms} SpecInterpreter class>>private_interpretASpec:model:superSpec: | | | | |9.7% {0ms} SpecInterpreter>>interpretASpec:model:superSpec: | | | | | 9.7% {0ms} SpecInterpreter>>interpretASpec: | | | | | 9.7% {0ms} SpecInterpreter class>>private_interpretASpec:model:superSpec: | | | | | 9.7% {0ms} SpecInterpreter>>interpretASpec:model:superSpec: | | | | | 9.7% {0ms} SpecInterpreter>>interpretASpec: | | | | | 9.7% {0ms} SpecInterpreter>>retreiveSpecFrom: | | | | | 4.9% {0ms} SpecInterpreter class>>private_interpretASpec:model:superSpec: | | | | | |4.9% {0ms} SpecInterpreter>>interpretASpec:model:superSpec: | | | | | | 4.9% {0ms} SpecInterpreter>>interpretASpec: | | | | | | 4.9% {0ms} MultiColumnListModel(ComposableModel)>>private_buildWithSpec | | | | | | 4.9% {0ms} MultiColumnListModel(ComposableModel)>>private_buildWithSpec: | | | | | | 4.9% {0ms} SpecInterpreter class>>private_buildWidgetFor:withSpec: | | | | | | 4.9% {0ms} SpecInterpreter class>>private_interpretASpec:model: | | | | | | 4.9% {0ms} SpecInterpreter>>interpretASpec:model: | | | | | | 4.9% {0ms} SpecInterpreter>>interpretASpec:model:superSpec: | | | | | | 4.9% {0ms} SpecInterpreter>>interpretASpec: | | | | | | 2.7% {0ms} SpecInterpreter class>>private_interpretASpec:model:superSpec: | | | | | | |2.7% {0ms} SpecInterpreter>>interpretASpec:model:superSpec: | | | | | | | 2.7% {0ms} SpecInterpreter>>interpretASpec: | | | | | | | 2.7% {0ms} DropListModel(ComposableModel)>>private_buildWithSpec | | | | | | | 2.7% {0ms} DropListModel(ComposableModel)>>private_buildWithSpec: | | | | | | | 2.7% {0ms} SpecInterpreter class>>private_buildWidgetFor:withSpec: | | | | | | | 2.7% {0ms} SpecInterpreter class>>private_interpretASpec:model: | | | | | | | 2.7% {0ms} SpecInterpreter>>interpretASpec:model: | | | | | | | 2.7% {0ms} SpecInterpreter>>interpretASpec:model:superSpec: | | | | | | | 2.7% {0ms} SpecInterpreter>>interpretASpec: | | | | | | | 2.7% {0ms} SpecInterpreter>>actionToPerformWithSelector:arguments: | | | | | | | 2.7% {0ms} DropListSpec(AbstractSpec)>>instance | | | | | | | 2.7% {0ms} DropListSpec(AbstractSpec)>>initializeInstance | | | | | | | 2.7% {0ms} SpecInterpreter class>>private_interpretASpec:model: | | | | | | | 2.7% {0ms} SpecInterpreter>>interpretASpec:model: | | | | | | | 2.7% {0ms} SpecInterpreter>>interpretASpec:model:superSpec: | | | | | | | 2.7% {0ms} SpecInterpreter>>interpretASpec: | | | | | | | 2.7% {0ms} SpecInterpreter>>retreiveSpecFrom: | | | | | | | 1.3% {0ms} SpecInterpreter class>>private_interpretASpec:model:superSpec: | | | | | | | |1.3% {0ms} SpecInterpreter>>interpretASpec:model:superSpec: | | | | | | | | 1.3% {0ms} SpecInterpreter>>interpretASpec: | | | | | | | | 1.3% {0ms} SpecInterpreter>>convertSymbolOfClassToInstance: | | | | | | | | 1.3% {0ms} DropListMorph class(Behavior)>>new | | | | | | | | 1.3% {0ms} DropListMorph>>initialize | | | | | | | 1.3% {0ms} RawSpec>>defaultReceiver:model: | | | | | | | 1.3% {0ms} SpecInterpreter class>>private_interpretASpec:model: | | | | | | | 1.3% {0ms} SpecInterpreter>>interpretASpec:model: | | | | | | | 1.3% {0ms} SpecInterpreter>>interpretASpec:model:superSpec: | | | | | | | 1.3% {0ms} SpecInterpreter>>interpretASpec: | | | | | | | 1.3% {0ms} SpecInterpreter>>convertSymbolOfClassToInstance: | | | | | | | 1.3% {0ms} DropListMorph class(Behavior)>>new | | | | | | | 1.3% {0ms} DropListMorph>>initialize | | | | | | 2.2% {0ms} SpecInterpreter>>actionToPerformWithSelector:arguments: | | | | | | 2.2% {0ms} MultiColumnListSpec(AbstractSpec)>>instance | | | | | | 2.2% {0ms} MultiColumnListSpec(AbstractSpec)>>initializeInstance | | | | | | 2.2% {0ms} SpecInterpreter class>>private_interpretASpec:model: | | | | | | 2.2% {0ms} SpecInterpreter>>interpretASpec:model: | | | | | | 2.2% {0ms} SpecInterpreter>>interpretASpec:model:superSpec: | | | | | | 2.2% {0ms} SpecInterpreter>>interpretASpec: | | | | | | 2.2% {0ms} SpecInterpreter>>retreiveSpecFrom: | | | | | 4.9% {0ms} RawSpec>>defaultReceiver:model: | | | | | 4.9% {0ms} SpecInterpreter class>>private_interpretASpec:model: | | | | | 4.9% {0ms} SpecInterpreter>>interpretASpec:model: | | | | | 4.9% {0ms} SpecInterpreter>>interpretASpec:model:superSpec: | | | | | 4.9% {0ms} SpecInterpreter>>interpretASpec: | | | | | 4.9% {0ms} MultiColumnListModel(ComposableModel)>>private_buildWithSpec | | | | | 4.9% {0ms} MultiColumnListModel(ComposableModel)>>private_buildWithSpec: | | | | | 4.9% {0ms} SpecInterpreter class>>private_buildWidgetFor:withSpec: | | | | | 4.9% {0ms} SpecInterpreter class>>private_interpretASpec:model: | | | | | 4.9% {0ms} SpecInterpreter>>interpretASpec:model: | | | | | 4.9% {0ms} SpecInterpreter>>interpretASpec:model:superSpec: | | | | | 4.9% {0ms} SpecInterpreter>>interpretASpec: | | | | | 2.7% {0ms} SpecInterpreter class>>private_interpretASpec:model:superSpec: | | | | | |2.7% {0ms} SpecInterpreter>>interpretASpec:model:superSpec: | | | | | | 2.7% {0ms} SpecInterpreter>>interpretASpec: | | | | | | 2.7% {0ms} DropListModel(ComposableModel)>>private_buildWithSpec | | | | | | 2.7% {0ms} DropListModel(ComposableModel)>>private_buildWithSpec: | | | | | | 2.7% {0ms} SpecInterpreter class>>private_buildWidgetFor:withSpec: | | | | | | 2.7% {0ms} SpecInterpreter class>>private_interpretASpec:model: | | | | | | 2.7% {0ms} SpecInterpreter>>interpretASpec:model: | | | | | | 2.7% {0ms} SpecInterpreter>>interpretASpec:model:superSpec: | | | | | | 2.7% {0ms} SpecInterpreter>>interpretASpec: | | | | | | 2.7% {0ms} SpecInterpreter>>actionToPerformWithSelector:arguments: | | | | | | 2.7% {0ms} DropListSpec(AbstractSpec)>>instance | | | | | | 2.7% {0ms} DropListSpec(AbstractSpec)>>initializeInstance | | | | | | 2.7% {0ms} SpecInterpreter class>>private_interpretASpec:model: | | | | | | 2.7% {0ms} SpecInterpreter>>interpretASpec:model: | | | | | | 2.7% {0ms} SpecInterpreter>>interpretASpec:model:superSpec: | | | | | | 2.7% {0ms} SpecInterpreter>>interpretASpec: | | | | | | 2.7% {0ms} SpecInterpreter>>retreiveSpecFrom: | | | | | | 1.3% {0ms} SpecInterpreter class>>private_interpretASpec:model:superSpec: | | | | | | |1.3% {0ms} SpecInterpreter>>interpretASpec:model:superSpec: | | | | | | | 1.3% {0ms} SpecInterpreter>>interpretASpec: | | | | | | | 1.3% {0ms} SpecInterpreter>>convertSymbolOfClassToInstance: | | | | | | | 1.3% {0ms} DropListMorph class(Behavior)>>new | | | | | | | 1.3% {0ms} DropListMorph>>initialize | | | | | | 1.3% {0ms} RawSpec>>defaultReceiver:model: | | | | | | 1.3% {0ms} SpecInterpreter class>>private_interpretASpec:model: | | | | | | 1.3% {0ms} SpecInterpreter>>interpretASpec:model: | | | | | | 1.3% {0ms} SpecInterpreter>>interpretASpec:model:superSpec: | | | | | | 1.3% {0ms} SpecInterpreter>>interpretASpec: | | | | | | 1.3% {0ms} SpecInterpreter>>convertSymbolOfClassToInstance: | | | | | | 1.3% {0ms} DropListMorph class(Behavior)>>new | | | | | | 1.3% {0ms} DropListMorph>>initialize | | | | | 2.2% {0ms} SpecInterpreter>>actionToPerformWithSelector:arguments: | | | | | 2.2% {0ms} MultiColumnListSpec(AbstractSpec)>>instance | | | | | 2.2% {0ms} MultiColumnListSpec(AbstractSpec)>>initializeInstance | | | | | 2.2% {0ms} SpecInterpreter class>>private_interpretASpec:model: | | | | | 2.2% {0ms} SpecInterpreter>>interpretASpec:model: | | | | | 2.2% {0ms} SpecInterpreter>>interpretASpec:model:superSpec: | | | | | 2.2% {0ms} SpecInterpreter>>interpretASpec: | | | | | 2.2% {0ms} SpecInterpreter>>retreiveSpecFrom: | | | | 9.7% {0ms} RawSpec>>defaultReceiver:model: | | | | 9.7% {0ms} SpecInterpreter class>>private_interpretASpec:model: | | | | 9.7% {0ms} SpecInterpreter>>interpretASpec:model: | | | | 9.7% {0ms} SpecInterpreter>>interpretASpec:model:superSpec: | | | | 9.7% {0ms} SpecInterpreter>>interpretASpec: | | | | 9.7% {0ms} SpecInterpreter class>>private_interpretASpec:model:superSpec: | | | | 9.7% {0ms} SpecInterpreter>>interpretASpec:model:superSpec: | | | | 9.7% {0ms} SpecInterpreter>>interpretASpec: | | | | 9.7% {0ms} SpecInterpreter>>retreiveSpecFrom: | | | | 4.9% {0ms} SpecInterpreter class>>private_interpretASpec:model:superSpec: | | | | |4.9% {0ms} SpecInterpreter>>interpretASpec:model:superSpec: | | | | | 4.9% {0ms} SpecInterpreter>>interpretASpec: | | | | | 4.9% {0ms} MultiColumnListModel(ComposableModel)>>private_buildWithSpec | | | | | 4.9% {0ms} MultiColumnListModel(ComposableModel)>>private_buildWithSpec: | | | | | 4.9% {0ms} SpecInterpreter class>>private_buildWidgetFor:withSpec: | | | | | 4.9% {0ms} SpecInterpreter class>>private_interpretASpec:model: | | | | | 4.9% {0ms} SpecInterpreter>>interpretASpec:model: | | | | | 4.9% {0ms} SpecInterpreter>>interpretASpec:model:superSpec: | | | | | 4.9% {0ms} SpecInterpreter>>interpretASpec: | | | | | 2.7% {0ms} SpecInterpreter class>>private_interpretASpec:model:superSpec: | | | | | |2.7% {0ms} SpecInterpreter>>interpretASpec:model:superSpec: | | | | | | 2.7% {0ms} SpecInterpreter>>interpretASpec: | | | | | | 2.7% {0ms} DropListModel(ComposableModel)>>private_buildWithSpec | | | | | | 2.7% {0ms} DropListModel(ComposableModel)>>private_buildWithSpec: | | | | | | 2.7% {0ms} SpecInterpreter class>>private_buildWidgetFor:withSpec: | | | | | | 2.7% {0ms} SpecInterpreter class>>private_interpretASpec:model: | | | | | | 2.7% {0ms} SpecInterpreter>>interpretASpec:model: | | | | | | 2.7% {0ms} SpecInterpreter>>interpretASpec:model:superSpec: | | | | | | 2.7% {0ms} SpecInterpreter>>interpretASpec: | | | | | | 2.7% {0ms} SpecInterpreter>>actionToPerformWithSelector:arguments: | | | | | | 2.7% {0ms} DropListSpec(AbstractSpec)>>instance | | | | | | 2.7% {0ms} DropListSpec(AbstractSpec)>>initializeInstance | | | | | | 2.7% {0ms} SpecInterpreter class>>private_interpretASpec:model: | | | | | | 2.7% {0ms} SpecInterpreter>>interpretASpec:model: | | | | | | 2.7% {0ms} SpecInterpreter>>interpretASpec:model:superSpec: | | | | | | 2.7% {0ms} SpecInterpreter>>interpretASpec: | | | | | | 2.7% {0ms} SpecInterpreter>>retreiveSpecFrom: | | | | | | 1.3% {0ms} SpecInterpreter class>>private_interpretASpec:model:superSpec: | | | | | | |1.3% {0ms} SpecInterpreter>>interpretASpec:model:superSpec: | | | | | | | 1.3% {0ms} SpecInterpreter>>interpretASpec: | | | | | | | 1.3% {0ms} SpecInterpreter>>convertSymbolOfClassToInstance: | | | | | | | 1.3% {0ms} DropListMorph class(Behavior)>>new | | | | | | | 1.3% {0ms} DropListMorph>>initialize | | | | | | 1.3% {0ms} RawSpec>>defaultReceiver:model: | | | | | | 1.3% {0ms} SpecInterpreter class>>private_interpretASpec:model: | | | | | | 1.3% {0ms} SpecInterpreter>>interpretASpec:model: | | | | | | 1.3% {0ms} SpecInterpreter>>interpretASpec:model:superSpec: | | | | | | 1.3% {0ms} SpecInterpreter>>interpretASpec: | | | | | | 1.3% {0ms} SpecInterpreter>>convertSymbolOfClassToInstance: | | | | | | 1.3% {0ms} DropListMorph class(Behavior)>>new | | | | | | 1.3% {0ms} DropListMorph>>initialize | | | | | 2.2% {0ms} SpecInterpreter>>actionToPerformWithSelector:arguments: | | | | | 2.2% {0ms} MultiColumnListSpec(AbstractSpec)>>instance | | | | | 2.2% {0ms} MultiColumnListSpec(AbstractSpec)>>initializeInstance | | | | | 2.2% {0ms} SpecInterpreter class>>private_interpretASpec:model: | | | | | 2.2% {0ms} SpecInterpreter>>interpretASpec:model: | | | | | 2.2% {0ms} SpecInterpreter>>interpretASpec:model:superSpec: | | | | | 2.2% {0ms} SpecInterpreter>>interpretASpec: | | | | | 2.2% {0ms} SpecInterpreter>>retreiveSpecFrom: | | | | 4.9% {0ms} RawSpec>>defaultReceiver:model: | | | | 4.9% {0ms} SpecInterpreter class>>private_interpretASpec:model: | | | | 4.9% {0ms} SpecInterpreter>>interpretASpec:model: | | | | 4.9% {0ms} SpecInterpreter>>interpretASpec:model:superSpec: | | | | 4.9% {0ms} SpecInterpreter>>interpretASpec: | | | | 4.9% {0ms} MultiColumnListModel(ComposableModel)>>private_buildWithSpec | | | | 4.9% {0ms} MultiColumnListModel(ComposableModel)>>private_buildWithSpec: | | | | 4.9% {0ms} SpecInterpreter class>>private_buildWidgetFor:withSpec: | | | | 4.9% {0ms} SpecInterpreter class>>private_interpretASpec:model: | | | | 4.9% {0ms} SpecInterpreter>>interpretASpec:model: | | | | 4.9% {0ms} SpecInterpreter>>interpretASpec:model:superSpec: | | | | 4.9% {0ms} SpecInterpreter>>interpretASpec: | | | | 2.7% {0ms} SpecInterpreter class>>private_interpretASpec:model:superSpec: | | | | |2.7% {0ms} SpecInterpreter>>interpretASpec:model:superSpec: | | | | | 2.7% {0ms} SpecInterpreter>>interpretASpec: | | | | | 2.7% {0ms} DropListModel(ComposableModel)>>private_buildWithSpec | | | | | 2.7% {0ms} DropListModel(ComposableModel)>>private_buildWithSpec: | | | | | 2.7% {0ms} SpecInterpreter class>>private_buildWidgetFor:withSpec: | | | | | 2.7% {0ms} SpecInterpreter class>>private_interpretASpec:model: | | | | | 2.7% {0ms} SpecInterpreter>>interpretASpec:model: | | | | | 2.7% {0ms} SpecInterpreter>>interpretASpec:model:superSpec: | | | | | 2.7% {0ms} SpecInterpreter>>interpretASpec: | | | | | 2.7% {0ms} SpecInterpreter>>actionToPerformWithSelector:arguments: | | | | | 2.7% {0ms} DropListSpec(AbstractSpec)>>instance | | | | | 2.7% {0ms} DropListSpec(AbstractSpec)>>initializeInstance | | | | | 2.7% {0ms} SpecInterpreter class>>private_interpretASpec:model: | | | | | 2.7% {0ms} SpecInterpreter>>interpretASpec:model: | | | | | 2.7% {0ms} SpecInterpreter>>interpretASpec:model:superSpec: | | | | | 2.7% {0ms} SpecInterpreter>>interpretASpec: | | | | | 2.7% {0ms} SpecInterpreter>>retreiveSpecFrom: | | | | | 1.3% {0ms} SpecInterpreter class>>private_interpretASpec:model:superSpec: | | | | | |1.3% {0ms} SpecInterpreter>>interpretASpec:model:superSpec: | | | | | | 1.3% {0ms} SpecInterpreter>>interpretASpec: | | | | | | 1.3% {0ms} SpecInterpreter>>convertSymbolOfClassToInstance: | | | | | | 1.3% {0ms} DropListMorph class(Behavior)>>new | | | | | | 1.3% {0ms} DropListMorph>>initialize | | | | | 1.3% {0ms} RawSpec>>defaultReceiver:model: | | | | | 1.3% {0ms} SpecInterpreter class>>private_interpretASpec:model: | | | | | 1.3% {0ms} SpecInterpreter>>interpretASpec:model: | | | | | 1.3% {0ms} SpecInterpreter>>interpretASpec:model:superSpec: | | | | | 1.3% {0ms} SpecInterpreter>>interpretASpec: | | | | | 1.3% {0ms} SpecInterpreter>>convertSymbolOfClassToInstance: | | | | | 1.3% {0ms} DropListMorph class(Behavior)>>new | | | | | 1.3% {0ms} DropListMorph>>initialize | | | | 2.2% {0ms} SpecInterpreter>>actionToPerformWithSelector:arguments: | | | | 2.2% {0ms} MultiColumnListSpec(AbstractSpec)>>instance | | | | 2.2% {0ms} MultiColumnListSpec(AbstractSpec)>>initializeInstance | | | | 2.2% {0ms} SpecInterpreter class>>private_interpretASpec:model: | | | | 2.2% {0ms} SpecInterpreter>>interpretASpec:model: | | | | 2.2% {0ms} SpecInterpreter>>interpretASpec:model:superSpec: | | | | 2.2% {0ms} SpecInterpreter>>interpretASpec: | | | | 2.2% {0ms} SpecInterpreter>>retreiveSpecFrom: | | |3.5% {0ms} MessageBrowser(ComposableModel)>>ensureExtentFor: | | | 3.5% {0ms} PanelMorph(Morph)>>extent: | | | 3.5% {0ms} PanelMorph(Morph)>>changed | | | 3.5% {0ms} PanelMorph(Morph)>>privateFullBounds | | | 3.5% {0ms} PanelMorph(Morph)>>submorphBounds | | | 3.5% {0ms} PanelMorph(Morph)>>fullBounds | | | 3.5% {0ms} PanelMorph(Morph)>>doLayoutIn: | | | 3.5% {0ms} ProportionalLayout>>layout:in: | | | 3.5% {0ms} PluggableTextMorph(Morph)>>layoutProportionallyIn: | | | 3.2% {0ms} PluggableTextMorph(Morph)>>layoutInBounds: | | | 2.7% {0ms} PluggableTextMorph(Morph)>>bounds: | | | 1.6% {0ms} PluggableTextMorph>>extent: | |1.9% {0ms} StandardWindow(SystemWindow)>>addMorph:frame: | | 1.9% {0ms} StandardWindow(SystemWindow)>>addMorph:fullFrame: | | 1.9% {0ms} PanelMorph>>adoptPaneColor: | | 1.9% {0ms} PanelMorph(Morph)>>color: | | 1.9% {0ms} PanelMorph(Morph)>>changed | | 1.9% {0ms} PanelMorph(Morph)>>privateFullBounds | | 1.9% {0ms} PanelMorph(Morph)>>submorphBounds | | 1.9% {0ms} PanelMorph(Morph)>>fullBounds | | 1.9% {0ms} PanelMorph(Morph)>>doLayoutIn: | | 1.9% {0ms} ProportionalLayout>>layout:in: | | 1.9% {0ms} PluggableTextMorph(Morph)>>layoutProportionallyIn: | | 1.6% {0ms} PluggableTextMorph(Morph)>>layoutInBounds: |7.3% {0ms} SpecInterpreter class>>private_buildWidgetFor:withSpec: | 7.3% {0ms} SpecInterpreter class>>private_interpretASpec:model: | 7.3% {0ms} SpecInterpreter>>interpretASpec:model: | 7.3% {0ms} SpecInterpreter>>interpretASpec:model:superSpec: | 7.3% {0ms} SpecInterpreter>>interpretASpec: | 7.3% {0ms} SpecInterpreter>>actionToPerformWithSelector:arguments: | 7.3% {0ms} WindowSpec(AbstractSpec)>>instance | 7.3% {0ms} WindowSpec>>initializeInstance | 7.3% {0ms} StandardWindow class(Behavior)>>new | 7.3% {0ms} StandardWindow>>initialize | 3.8% {0ms} StandardWindow(SystemWindow)>>initialize | |3.5% {0ms} StandardWindow(SystemWindow)>>extent: | | 3.5% {0ms} StandardWindow(Morph)>>extent: | | 3.5% {0ms} StandardWindow(Morph)>>changed | | 3.5% {0ms} StandardWindow(Morph)>>privateFullBounds | | 3.5% {0ms} StandardWindow(Morph)>>submorphBounds | | 3.5% {0ms} AlignmentMorph(Morph)>>fullBounds | | 3.2% {0ms} AlignmentMorph(Morph)>>doLayoutIn: | | 3.2% {0ms} RowLayout>>layout:in: | | 3.0% {0ms} Point>>extent: | | 3.0% {0ms} Rectangle class>>origin:extent: | | 3.0% {0ms} Rectangle>>setOrigin:corner: | 3.5% {0ms} StandardWindow(SystemWindow)>>setWindowColor: | 3.5% {0ms} StandardWindow(SystemWindow)>>setStripeColorsFrom: | 3.5% {0ms} StandardWindow(Morph)>>fillStyle: | 3.5% {0ms} StandardWindow(Morph)>>changed | 3.5% {0ms} StandardWindow(Morph)>>privateFullBounds | 3.5% {0ms} StandardWindow(Morph)>>submorphBounds | 3.5% {0ms} AlignmentMorph(Morph)>>fullBounds | 3.2% {0ms} AlignmentMorph(Morph)>>doLayoutIn: | 3.2% {0ms} RowLayout>>layout:in: | 3.0% {0ms} Point>>extent: | 3.0% {0ms} Rectangle class>>origin:extent: | 3.0% {0ms} Rectangle>>setOrigin:corner: 6.2% {0ms} StandardWindow(Morph)>>openInWorld 6.2% {0ms} StandardWindow(SystemWindow)>>openInWorld: 3.5% {0ms} StandardWindow(Morph)>>bounds: |3.5% {0ms} StandardWindow(SystemWindow)>>position: | 3.5% {0ms} StandardWindow(Morph)>>position: | 3.5% {0ms} StandardWindow(Morph)>>fullBounds | 3.5% {0ms} StandardWindow(Morph)>>doLayoutIn: | 3.5% {0ms} ProportionalLayout>>layout:in: | 3.5% {0ms} AlignmentMorph(Morph)>>layoutProportionallyIn: | 3.5% {0ms} AlignmentMorph(Morph)>>fullBounds | 3.2% {0ms} AlignmentMorph(Morph)>>doLayoutIn: | 3.2% {0ms} RowLayout>>layout:in: | 3.0% {0ms} Point>>extent: | 3.0% {0ms} Rectangle class>>origin:extent: | 3.0% {0ms} Rectangle>>setOrigin:corner: 2.7% {0ms} StandardWindow>>openAsIsIn: 2.7% {0ms} StandardWindow(SystemWindow)>>openAsIsIn: 2.7% {0ms} StandardWindow(SystemWindow)>>activate 2.7% {0ms} StandardWindow(SystemWindow)>>navigateFocusForward 2.7% {0ms} StandardWindow(Morph)>>navigateFocusForward 2.7% {0ms} PluggableTextMorph(Morph)>>takeKeyboardFocus 2.7% {0ms} HandMorph>>newKeyboardFocus: 2.7% {0ms} PluggableTextMorph>>keyboardFocusChange: 2.7% {0ms} TextMorphForEditView(Morph)>>takeKeyboardFocus 2.7% {0ms} HandMorph>>newKeyboardFocus: 2.7% {0ms} TextMorphForEditView>>keyboardFocusChange: 2.7% {0ms} SmalltalkEditor(TextEditor)>>focused: 2.7% {0ms} SmalltalkEditingState>>focused:from: 2.7% {0ms} SmalltalkEditingState(EditingState)>>focused:from: 2.7% {0ms} EditorFindReplaceDialogWindow class>>on: 2.7% {0ms} EditorFindReplaceDialogWindow>>on: 2.7% {0ms} EditorFindReplaceDialogWindow(StandardWindow)>>model: 2.7% {0ms} EditorFindReplaceDialogWindow(SystemWindow)>>model: 2.7% {0ms} EditorFindReplaceDialogWindow(Morph)>>fillStyle: 2.7% {0ms} EditorFindReplaceDialogWindow(Morph)>>changed 2.7% {0ms} EditorFindReplaceDialogWindow(Morph)>>privateFullBounds
2.7% {0ms} EditorFindReplaceDialogWindow(Morph)>>submorphBounds
2.7% {0ms} AlignmentMorph(Morph)>>fullBounds
2.4% {0ms} AlignmentMorph(Morph)>>doLayoutIn:
2.4% {0ms} RowLayout>>layout:in:
2.2% {0ms} Point>>extent:
2.2% {0ms} Rectangle class>>origin:extent:
2.2% {0ms} Rectangle>>setOrigin:corner: 38.3% {1ms} MethodToolbar>>versionMethod 38.3% {1ms} AbstractTool>>browseVersionsFrom: 38.3% {1ms} VersionsBrowser class>>browseVersionsOf:class:meta:category:selector: 38.3% {1ms} VersionsBrowser class>>browseVersionsOf:class:meta:category:selector:lostMethodPointer: 38.3% {1ms} VersionsBrowser class(ChangeList class)>>open:name:multiSelect: 38.3% {1ms} VersionsBrowser class(ChangeList class)>>openAsMorph:name:multiSelect: 38.3% {1ms} VersionsBrowser(ChangeList)>>openAsMorphName:multiSelect: 28.0% {1ms} SystemWindow(Morph)>>openInWorld |28.0% {1ms} SystemWindow>>openInWorld: | 15.1% {0ms} SystemWindow(Morph)>>bounds: | |15.1% {0ms} SystemWindow>>position: | | 15.1% {0ms} SystemWindow(Morph)>>position: | | 15.1% {0ms} SystemWindow(Morph)>>fullBounds | | 15.1% {0ms} SystemWindow(Morph)>>doLayoutIn: | | 14.8% {0ms} ProportionalLayout>>layout:in: | | 14.8% {0ms} AlignmentMorph(Morph)>>layoutProportionallyIn: | | 13.2% {0ms} AlignmentMorph(Morph)>>fullBounds | | |12.9% {0ms} AlignmentMorph(Morph)>>doLayoutIn: | | | 12.4% {0ms} ProportionalLayout>>layout:in: | | | 12.4% {0ms} PanelMorph(Morph)>>layoutProportionallyIn: | | | 11.9% {0ms} PanelMorph(Morph)>>layoutInBounds: | | | 10.2% {0ms} PanelMorph(Morph)>>bounds: | | | 8.1% {0ms} PanelMorph(Morph)>>position: | | | 6.5% {0ms} PanelMorph(Morph)>>fullBounds | | | 5.7% {0ms} PanelMorph(Morph)>>doLayoutIn: | | | 4.0% {0ms} TableLayout>>layout:in: | | | |3.2% {0ms} TableLayout>>placeCells:in:horizontal:target: | | | | 3.2% {0ms} PluggableTextMorph(Morph)>>layoutInBounds: | | | | 3.2% {0ms} PluggableTextMorph(Morph)>>bounds: | | | | 3.2% {0ms} PluggableTextMorph>>extent: | | | | 1.6% {0ms} TextMorphForEditView(TextMorph)>>extent: | | | | 1.3% {0ms} PluggableTextMorph(ScrollPane)>>extent: | | | 1.6% {0ms} PanelMorph(Morph)>>privateFullBounds | | 1.6% {0ms} AlignmentMorph(Morph)>>layoutInBounds: | | 1.6% {0ms} AlignmentMorph(Morph)>>bounds: | 12.9% {0ms} SystemWindow>>openAsIsIn: | 12.7% {0ms} SystemWindow>>activate | 12.7% {0ms} SystemWindow>>basicActivate | 7.8% {0ms} SystemWindow(Morph)>>changed | |7.8% {0ms} SystemWindow(Morph)>>privateFullBounds | | 7.8% {0ms} SystemWindow(Morph)>>submorphBounds | | 7.8% {0ms} AlignmentMorph(Morph)>>fullBounds | | 7.8% {0ms} AlignmentMorph(Morph)>>doLayoutIn: | | 7.8% {0ms} ProportionalLayout>>layout:in: | | 7.8% {0ms} PanelMorph(Morph)>>layoutProportionallyIn: | | 7.8% {0ms} PanelMorph(Morph)>>fullBounds | | 7.8% {0ms} PanelMorph(Morph)>>doLayoutIn: | | 7.8% {0ms} TableLayout>>layout:in: | | 6.2% {0ms} TableLayout>>placeCells:in:horizontal:target: | | |6.2% {0ms} DiffMorph(Morph)>>layoutInBounds: | | | 6.2% {0ms} DiffMorph(Morph)>>bounds: | | | 5.7% {0ms} DiffMorph>>extent: | | | 5.7% {0ms} DiffMorph>>calibrateScrollbar | | | 5.7% {0ms} DiffMorph(Morph)>>fullBounds | | | 5.7% {0ms} DiffMorph(Morph)>>doLayoutIn: | | | 5.7% {0ms} ProportionalLayout>>layout:in: | | | 5.7% {0ms} PanelMorph(Morph)>>layoutProportionallyIn: | | | 5.4% {0ms} PanelMorph(Morph)>>layoutInBounds: | | | 4.6% {0ms} PanelMorph(Morph)>>bounds: | | | 3.5% {0ms} PanelMorph(Morph)>>position: | | | 2.7% {0ms} PanelMorph(Morph)>>fullBounds | | | 2.2% {0ms} PanelMorph(Morph)>>doLayoutIn: | | | 1.3% {0ms} PanelMorph(Morph)>>privateFullBounds | | 1.6% {0ms} TableLayout>>computeCellSizes:in:horizontal: | | 1.6% {0ms} DiffMorph(Morph)>>minExtent | | 1.6% {0ms} ProportionalLayout>>minExtentOf:in: | | 1.6% {0ms} PanelMorph(Morph)>>minExtent | | 1.6% {0ms} PanelMorph(Morph)>>layoutBounds | 4.9% {0ms} VersionsBrowser(CodeHolder)>>modelWakeUpIn: | 4.9% {0ms} VersionsBrowser>>updateListsAndCodeIn: | 4.9% {0ms} VersionsBrowser>>reformulateList | 4.9% {0ms} VersionsBrowser>>contentsChanged | 4.9% {0ms} VersionsBrowser>>buildDiffCodePane | 4.9% {0ms} VersionsBrowser>>buildDiffMorphFromOldString:toNewString:contextClass: | 4.6% {0ms} DiffMorph class(Behavior)>>new | 4.6% {0ms} DiffMorph>>initialize | 4.6% {0ms} DiffMorph>>extent: | 4.6% {0ms} DiffMorph>>calibrateScrollbar | 4.6% {0ms} DiffMorph(Morph)>>fullBounds | 4.6% {0ms} DiffMorph(Morph)>>doLayoutIn: | 2.7% {0ms} DiffMorph(Morph)>>privateFullBounds | |2.7% {0ms} DiffMorph(Morph)>>submorphBounds | | 2.7% {0ms} PanelMorph(Morph)>>fullBounds | | 2.2% {0ms} PanelMorph(Morph)>>doLayoutIn: | | 1.3% {0ms} PanelMorph(Morph)>>privateFullBounds | 1.9% {0ms} ProportionalLayout>>layout:in: | 1.9% {0ms} PanelMorph(Morph)>>layoutProportionallyIn: | 1.6% {0ms} PanelMorph(Morph)>>layoutInBounds: 3.8% {0ms} SystemWindow class>>labelled: |3.8% {0ms} SystemWindow class(Behavior)>>new | 3.8% {0ms} SystemWindow>>initialize | 3.5% {0ms} SystemWindow>>extent: | 3.5% {0ms} SystemWindow(Morph)>>extent: | 3.5% {0ms} SystemWindow(Morph)>>changed | 3.5% {0ms} SystemWindow(Morph)>>privateFullBounds | 3.5% {0ms} SystemWindow(Morph)>>submorphBounds | 3.5% {0ms} AlignmentMorph(Morph)>>fullBounds | 3.2% {0ms} AlignmentMorph(Morph)>>doLayoutIn: | 3.2% {0ms} RowLayout>>layout:in: | 3.0% {0ms} Point>>extent: | 3.0% {0ms} Rectangle class>>origin:extent: | 3.0% {0ms} Rectangle>>setOrigin:corner: 3.5% {0ms} SystemWindow>>model: |3.5% {0ms} SystemWindow(Morph)>>fillStyle: | 3.5% {0ms} SystemWindow(Morph)>>changed | 3.5% {0ms} SystemWindow(Morph)>>privateFullBounds | 3.5% {0ms} SystemWindow(Morph)>>submorphBounds | 3.5% {0ms} AlignmentMorph(Morph)>>fullBounds | 3.2% {0ms} AlignmentMorph(Morph)>>doLayoutIn: | 3.2% {0ms} RowLayout>>layout:in: | 3.0% {0ms} Point>>extent: | 3.0% {0ms} Rectangle class>>origin:extent: | 3.0% {0ms} Rectangle>>setOrigin:corner: 1.9% {0ms} VersionsBrowser(CodeHolder)>>addLowerPanesTo:at:with: 1.9% {0ms} VersionsBrowser(CodeHolder)>>addOptionalButtonsTo:at:plus: 17.5% {0ms} ToolRegistry>>openClassBrowser 17.5% {0ms} Nautilus class>>open 17.5% {0ms} Nautilus class>>openInEnvironment: 17.5% {0ms} Nautilus>>open 17.5% {0ms} NautilusUI>>open 17.5% {0ms} NautilusUI(AbstractNautilusUI)>>open 7.3% {0ms} NautilusWindow class(Behavior)>>new |7.3% {0ms} NautilusWindow(StandardWindow)>>initialize | 3.8% {0ms} NautilusWindow(SystemWindow)>>initialize | |3.5% {0ms} NautilusWindow(SystemWindow)>>extent: | | 3.5% {0ms} NautilusWindow(Morph)>>extent: | | 3.5% {0ms} NautilusWindow(Morph)>>changed | | 3.5% {0ms} NautilusWindow(Morph)>>privateFullBounds | | 3.5% {0ms} NautilusWindow(Morph)>>submorphBounds | | 3.5% {0ms} AlignmentMorph(Morph)>>fullBounds | | 3.2% {0ms} AlignmentMorph(Morph)>>doLayoutIn: | | 3.2% {0ms} RowLayout>>layout:in: | | 3.0% {0ms} Point>>extent: | | 3.0% {0ms} Rectangle class>>origin:extent: | | 3.0% {0ms} Rectangle>>setOrigin:corner: | 3.5% {0ms} NautilusWindow(SystemWindow)>>setWindowColor: | 3.5% {0ms} NautilusWindow(SystemWindow)>>setStripeColorsFrom: | 3.5% {0ms} NautilusWindow(Morph)>>fillStyle: | 3.5% {0ms} NautilusWindow(Morph)>>changed | 3.5% {0ms} NautilusWindow(Morph)>>privateFullBounds | 3.5% {0ms} NautilusWindow(Morph)>>submorphBounds | 3.5% {0ms} AlignmentMorph(Morph)>>fullBounds | 3.2% {0ms} AlignmentMorph(Morph)>>doLayoutIn: | 3.2% {0ms} RowLayout>>layout:in: | 3.0% {0ms} Point>>extent: | 3.0% {0ms} Rectangle class>>origin:extent: | 3.0% {0ms} Rectangle>>setOrigin:corner: 6.7% {0ms} NautilusUI>>addAll: |5.7% {0ms} NautilusUI>>buildColumns:height: | 1.3% {0ms} NautilusUI>>buildNavigationList | 1.3% {0ms} DropListMorph class>>on:list:selected:changeSelected: | 1.3% {0ms} DropListMorph class(Behavior)>>new | 1.3% {0ms} DropListMorph>>initialize 3.5% {0ms} NautilusWindow(Morph)>>openInWorld 3.5% {0ms} NautilusWindow(SystemWindow)>>openInWorld: 3.5% {0ms} NautilusWindow(Morph)>>bounds: 3.5% {0ms} NautilusWindow(SystemWindow)>>position: 3.5% {0ms} NautilusWindow(Morph)>>position: 3.5% {0ms} NautilusWindow(Morph)>>fullBounds 3.5% {0ms} NautilusWindow(Morph)>>doLayoutIn: 3.5% {0ms} ProportionalLayout>>layout:in: 3.5% {0ms} AlignmentMorph(Morph)>>layoutProportionallyIn: 3.5% {0ms} AlignmentMorph(Morph)>>fullBounds 3.2% {0ms} AlignmentMorph(Morph)>>doLayoutIn: 3.2% {0ms} RowLayout>>layout:in: 3.0% {0ms} Point>>extent: 3.0% {0ms} Rectangle class>>origin:extent: 3.0% {0ms} Rectangle>>setOrigin:corner: 3.2% {0ms} WorldState>>doOneCycleNowFor: 3.2% {0ms} HandMorph>>processEvents 3.2% {0ms} HandMorph>>handleEvent: 3.2% {0ms} HandMorph>>sendMouseEvent: 3.2% {0ms} HandMorph>>sendEvent:focus:clear: 3.2% {0ms} PasteUpMorph(Morph)>>processEvent: 3.2% {0ms} PasteUpMorph>>processEvent:using: 3.2% {0ms} PasteUpMorph(Morph)>>processEvent:using: 3.2% {0ms} MorphicEventDispatcher>>dispatchEvent:with: 3.2% {0ms} MorphicEventDispatcher>>dispatchMouseDown:with: 3.2% {0ms} PasteUpMorph(Morph)>>handleEvent: 3.2% {0ms} MouseButtonEvent>>sentTo: 3.2% {0ms} PasteUpMorph(Morph)>>handleMouseDown: 3.2% {0ms} PasteUpMorph>>mouseDown: 3.2% {0ms} PasteUpMorph>>invokeWorldMenu: 3.2% {0ms} MenuMorph>>popUpEvent:in: 3.2% {0ms} MenuMorph>>popUpAt:forHand:in: 3.2% {0ms} MenuMorph>>popUpAt:forHand:in:allowKeyboard: 3.2% {0ms} MenuMorph>>positionAt:relativeTo:inWorld: 3.2% {0ms} MenuMorph(Morph)>>fullBounds 3.2% {0ms} MenuMorph(Morph)>>doLayoutIn: 3.2% {0ms} TableLayout>>layout:in: 3.2% {0ms} TableLayout>>layoutTopToBottom:in: 2.4% {0ms} AlignmentMorph(Morph)>>layoutInBounds: 1.6% {0ms} AlignmentMorph(Morph)>>bounds: 1.6% {0ms} AlignmentMorph(Morph)>>position: 1.6% {0ms} AlignmentMorph(Morph)>>fullBounds 1.3% {0ms} AlignmentMorph(Morph)>>doLayoutIn: 2.7% {0ms} NautilusWindow(SystemWindow)>>closeBoxHit 2.7% {0ms} NautilusWindow>>delete 2.7% {0ms} NautilusWindow(StandardWindow)>>delete 2.7% {0ms} NautilusWindow(SystemWindow)>>delete 2.7% {0ms} SystemWindow class>>noteTopWindowIn: 2.7% {0ms} SystemWindow>>activate 2.7% {0ms} SystemWindow>>navigateFocusForward 2.7% {0ms} SystemWindow(Morph)>>navigateFocusForward 2.7% {0ms} PluggableTextMorph(Morph)>>takeKeyboardFocus 2.7% {0ms} HandMorph>>newKeyboardFocus: 2.7% {0ms} PluggableTextMorph>>keyboardFocusChange: 2.7% {0ms} TextMorphForEditView(Morph)>>takeKeyboardFocus 2.7% {0ms} HandMorph>>newKeyboardFocus: 2.7% {0ms} TextMorphForEditView>>keyboardFocusChange: 2.7% {0ms} SmalltalkEditor(TextEditor)>>focused: 2.7% {0ms} SmalltalkEditingState>>focused:from: 2.7% {0ms} SmalltalkEditingState(EditingState)>>focused:from: 2.7% {0ms} EditorFindReplaceDialogWindow class>>on: 2.7% {0ms} EditorFindReplaceDialogWindow>>on: 2.7% {0ms} EditorFindReplaceDialogWindow(StandardWindow)>>model: 2.7% {0ms} EditorFindReplaceDialogWindow(SystemWindow)>>model: 2.7% {0ms} EditorFindReplaceDialogWindow(Morph)>>fillStyle: 2.7% {0ms} EditorFindReplaceDialogWindow(Morph)>>changed 2.7% {0ms} EditorFindReplaceDialogWindow(Morph)>>privateFullBounds 2.7% {0ms} EditorFindReplaceDialogWindow(Morph)>>submorphBounds 2.7% {0ms} AlignmentMorph(Morph)>>fullBounds 2.4% {0ms} AlignmentMorph(Morph)>>doLayoutIn: 2.4% {0ms} RowLayout>>layout:in: 2.2% {0ms} Point>>extent: 2.2% {0ms} Rectangle class>>origin:extent: 2.2% {0ms} Rectangle>>setOrigin:corner:
**Leaves** 100.0% {2ms} Rectangle>>setOrigin:corner:
**Memory** old +0 bytes young +4,588 bytes used +4,588 bytes free -4,588 bytes
**GCs** full 0 totalling 0ms (0.0% uptime) incr 0 totalling 0ms (0.0% uptime) tenures 0 root table 0 overflows
My feeling is that you are not thru with degenerated rectangles :) You'd better enforce the invariant in http://code.google.com/p/pharo/issues/detail?id=2601 rathert than remove it as requested in http://code.google.com/p/pharo/issues/detail?id=2441
Nicolas
2013/2/13 Nicolas Cellier <nicolas.cellier.aka.nice@gmail.com>:
I tried to put a halt in Rectangle>>setOrigin: topLeft corner: bottomRight in latest Pharo (20543) if width < 0 or height < 0 and of course the image hung... which means that degenerated Rectangles are pretty much in use
I think I will juts raise a Notification, and catch it with a MessageTally hack to track the senders (as documented at http://bugs.squeak.org/bug_view_advanced_page.php?bug_id=6755 )
Nicolas
2013/2/13 Igor Stasenko <siguctua@gmail.com>:
yes.. and i'd like to add that in some places i replaced senders of
rect1 intersect: rect2
with:
rect1 intersect: rect2 ifNone: [ self error: 'should not happen'].
as it appears, it happens in some places... because of the above inconsistency.
-- Best regards, Igor Stasenko.
Ah, and the change is the other way around, <= was replaced with <... I ask because we had a request in squeak-dev after I changed Rectangle>>intersects: and was wondering if this should be in Squeak too http://lists.squeakfoundation.org/pipermail/squeak-dev/2013-January/167855.h... 2013/2/13 stephane ducasse <stephane.ducasse@free.fr>:
Nicolas
what I know is that with igor we fixed all the senders of fractions:offset: and after igor introduced intersect:ifNone: to avoid generating "wrong" rectangles with negative values.
I thought that intersect: was deprecated. or the precondition should be clearer.
Stef
On Feb 13, 2013, at 9:55 PM, Nicolas Cellier <nicolas.cellier.aka.nice@gmail.com> wrote:
Rectangle>>intersects: has been changed recently (GuillermoPolito 2/8/2013) rCorner x < origin x ifTrue: [ ^ false ]. rCorner y < origin y ifTrue: [ ^ false ]. rOrigin x > corner x ifTrue: [ ^ false ]. rOrigin y > corner y ifTrue: [ ^ false ].
these inequalities have been transformed into <= and >= Can someone point me to the issue number documenting this change?
Nicolas
On 13 February 2013 23:41, Nicolas Cellier <nicolas.cellier.aka.nice@gmail.com> wrote:
Ah, and the change is the other way around, <= was replaced with <... I ask because we had a request in squeak-dev after I changed Rectangle>>intersects: and was wondering if this should be in Squeak too
http://lists.squeakfoundation.org/pipermail/squeak-dev/2013-January/167855.h...
yes, imo : "The right question is: do the two rectangles have points in common?"
2013/2/13 stephane ducasse <stephane.ducasse@free.fr>:
Nicolas
what I know is that with igor we fixed all the senders of fractions:offset: and after igor introduced intersect:ifNone: to avoid generating "wrong" rectangles with negative values.
I thought that intersect: was deprecated. or the precondition should be clearer.
Stef
On Feb 13, 2013, at 9:55 PM, Nicolas Cellier <nicolas.cellier.aka.nice@gmail.com> wrote:
Rectangle>>intersects: has been changed recently (GuillermoPolito 2/8/2013) rCorner x < origin x ifTrue: [ ^ false ]. rCorner y < origin y ifTrue: [ ^ false ]. rOrigin x > corner x ifTrue: [ ^ false ]. rOrigin y > corner y ifTrue: [ ^ false ].
these inequalities have been transformed into <= and >= Can someone point me to the issue number documenting this change?
Nicolas
-- Best regards, Igor Stasenko.
participants (5)
-
Frank Shearar -
Goubier Thierry -
Igor Stasenko -
Nicolas Cellier -
stephane ducasse