Ben,

Nice work !

So the conclusion is that only #addressForName:[timeout:] is used a lot and its 
counterpart #nameForAddress:[timeout:] just a little bit. Right ?

What was your goal in doing this analysis ?

Sven

> On 27 Feb 2017, at 15:40, Ben Coman <b...@openinworld.com> wrote:
> 
> Following up discussion on the Catalog sometimes delaying Spotter in 
> locations with poor network
> http://forum.world.st/Catalog-loading-in-Spotter-td4934969.html#a4935842
> 
> Just sharing a poke I had at understanding the name resolution call chain 
> down to the primitives. 
> Attached is a Roassal/Artefact generated PDF based on "methods" and "links" 
> from this...
> 
> methods := NetNameResolver class methods select: [:m | m selector beginsWith: 
> 'prim']. "start with primitives"
> methods := methods asSet.
> prevMethods := #() asSet.
> links := Set new.
> 3 timesRepeat: [      
>       |newMethods todo|
>       newMethods := methods difference: prevMethods. 
>       prevMethods := methods copy.
>       todo := newMethods collect: [:m|
>               |senders| 
>               ((((m methodClass inheritsFrom: TestAsserter) 
>                       or: [m selector = #new])
>                       or: [m methodClass printString beginsWith: 'SmaCC'])
>                       or: [m selector printString beginsWith: '#init'])
>                       ifTrue: [m -> #()] 
>                       ifFalse: [m -> (m senders collect: [:rgmd| rgmd 
> compiledMethod])].
>               ].
>       todo := todo select: [:sendersOf| sendersOf value size > 0]. "remove 
> fluff"
>       todo := todo sorted: [:sendersOf1 :sendersOf2| sendersOf1 value size > 
> sendersOf2 value size]. "helps debugging"
>       todo do: [:sendersOf| 
>               sendersOf value do: [:sender| 
>                       methods add: sender.
>                       links add: (sender->sendersOf key).  
>                       ] 
>               ].
> ].
> methods copy do: [:m| links detect: [:l| (m = l key) or: [ m = l value] ] 
> ifNone: [ methods remove: m]]. "remove fluff"
> 
> 
> 
> After loading Roassal from the Catalog into 60411 
> I started with Mondrian to graph like this...
> 
>       b := RTMondrian new.
>       b shape box.
>       b nodes: methods forEach: [:each|
>               b shape 
>                       withText: [:m| m methodClass printString, String cr, m 
> selector printString];
>                       withTextColor: Color black.
>               b nodes: { each }.
>               b layout 
>               ]. 
>       b shape arrowedLine withShorterDistanceAttachPoint.
>       links do: [:l| b edges connectFrom: l value to: l key].
>       b layout horizontalDominanceTree horizontalGap: 100.
>       b build.
>       b view inspect 
> 
> But I wanted to fine tune the layout by moving around a few subtrees
> and couldn't work out how to add RTDraggableChildren to the Mondrian edges.
> 
> So I tried Roassal direct like this...
>     v := RTView new.
>     v @ RTDraggableView.
>     labelTemplate := (RTLabel new text: [:m | m methodClass printString, 
> String cr, m selector printString]). 
> 
>     els := labelTemplate elementsOn: methods. "also see alternative below"
>     v addAll: els.
>     eb := RTEdgeBuilder new
>                   view: v;
>                   elements: els.
> 
>     links do: [:l| eb connectFrom: l value to: l key].
>     RTHorizontalDominanceTreeLayout  on: els.
>     els @ RTDraggableChildren.
>     v inspect.
> 
> But couldn't work out how to put a border around the RTLabel, nor change its 
> background colour. 
> I saw RTShape>>#fillColor: and #fillColorElement: but couldn't determine how 
> to make use of them. 
> 
> The best I could come up with is the following alternative that replaces 
> the code in the middle that assigns "els" and "eb" with...
>    els := RTBox elementsOn: methods.
>    v addAll: els.
>    RTNest new
>               for: els
>               add: [ :group :method | 
>                       group
>                               addAll: (labelTemplate elementsOn: {method})].
>    eb := RTEdgeBuilder new
>       view: v;
>       elements: els.
>  
> cheers -ben
> <NetNameResolver-3level-primitive-senders.pdf>


Reply via email to