Hi Clément,

Thanks for your nice words.
Layouts provided by Roassal are well known generic algorithm. Creating a new 
layout is not complicated at all. Just subclass ROLayout and override the hook 
methods. Creating a layout for your need is not easy. Have you tried to google 
for a layout? If you find one, it should be rather easy to implement it.

Alexandre


On Jan 14, 2014, at 12:50 PM, Clément Bera <bera.clem...@gmail.com> wrote:

> Hello Roassal developers,
> 
> A few time ago Usman Bhatti showed me Roassal. Today I decided to use it for 
> my daily work on a project that aims to optimize Pharo's methods.
> 
> Firstly I am quite impressed by the quality of Roassal, I am currently using 
> the Roassal + Mondrian builder and I have a visual representation which is 
> very close to what I want after 1 hour of work with the help of Usman. Good 
> job guys.
> 
> Here are 2 examples of what I use:
> 
> exampleIfTrueIfFalse2
>       | a b |
>       a := true.
>       a 
>               ifTrue: [  
>                       false ifTrue: [ ^ b := 1 ] ifFalse: [ b := 2 ] ] 
>               ifFalse: [ 
>                       true ifTrue: [ b := 4 ] ifFalse: [ b := 5 ] ].
>       ^ b
> 
> <Screen Shot 2014-01-14 at 4.14.49 PM.png>
> 
> Here there's one rectangle for each basic block, entrance/exits are basic 
> blocks with bigger borders, and borders in red represents the "hot path", 
> which the path the execution flow most frequently uses (based on native code 
> counters added at some spots in the method by Cogit).
> 
> Another example:
> 
> exampleToDo
>       
>       1 to: 10 do: [ :i |
>               self kick: i ]
> 
> <Screen Shot 2014-01-14 at 4.36.47 PM.png>
> 
> Now I have a few issues with the layout. I am currently using the 
> narrowTreeLayout which seems to be the best for my visualisation.
> 
> issue 1: When branches merges, which is in a tree when a node has 2 or more 
> parents, or when I have a #ifTrue:ifFalse:, the child is not well aligned 
> horizontally. Here in the first visualisation I showed, BasicBlock 5 is below 
> but not in the middle of Basic block 8,7 and 4 (horizontally). I put a 
> minimal width for each basic block to make it better but it's still not 
> perfect.
> issue 2: (most important issue) I cannot display back jumps because then all 
> the graph is missdrawn, therefore I need to remember where they are instead 
> of visualizing them all the time (I cannot display the back jump from basic 
> block 3 to basic block 2 in the second representation. In addition, the back 
> jump edge, when well displayed, overlaps the basic blocks visualizations.
> 
> Here is an example of what I would like for the edges and basic block 
> positions:
> 
> <Screen Shot 2014-01-14 at 4.27.32 PM.png>
> 
> As you can see, here exit is in the middle of B2 and B5 horizontally, which 
> is not the case in my roassal visualization.
> In addition, there's a back jump from B6 to B4 that I cannot display (or all 
> the visual representation goes nuts). The edge for the back jump does not 
> overlap with the basic blocks. In this graph, arrows follow a grid. I don't 
> care that arrows are diagonals instead of a mix of horizontal and vertical 
> lines but I would like to be able to see nicely the back jumps as in this 
> graph.
> 
> Do you have an idea on what layout/view options I could use with Roassal 
> +Mondrian to have a better result ?
> 
> I tried to create my own layout but after 2 hours I understood this cost too 
> much time for my planning (or perhaps I'm just too dumb to do it fast :-( ).
> 
> Anyway, the representation I have now is good enough for me to use it. But a 
> better one would be better, especially for back jumps :-).
> 
> Thanks for any help.
> 
> Clement

-- 
_,.;:~^~:;._,.;:~^~:;._,.;:~^~:;._,.;:~^~:;._,.;:
Alexandre Bergel  http://www.bergel.eu
^~:;._,.;:~^~:;._,.;:~^~:;._,.;:~^~:;._,.;:~^~:;.




Reply via email to