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 <[email protected]> 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>
