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
Description: Adobe PDF document
