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
> <NetNameResolver-3level-
> On 27 Feb 2017, at 15:40, Ben Coman <btc@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
primitive-senders.pdf>