[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Aggregating/annotating call graphs



Hi!

Yesterday I generated one of the really poor "Application classes only" call
graphs and was surprised to see, that if I had methods with multiple calls
to another method these edges appeared also multiple times. I always thought
that this woud already be optimized away in CHA. But actually that's not a
bad thing because what I really would like to get are aggreagated edges,
labeled with an intereg, that tells me how many ancestors (before
aggregation) existed. So if I have n such "redundant" edges, this would fold
to one edge. labeled with n. That would in general tell one in a
straightforward way what the degree of coupling between two methods is.
So basically two questions: Does "real SPARK" usually optimize away such
redundant edges? If not, is it available as an option? Secondly: Is the
feature described above (labeling) alreay somehow implemented; if not, do
you think it would be worthwhile having such an operation  "on the call
graph" or should I probably better aggregate the output (by tweaking the
lists, the iterators provide me)? I guess the latter would be way easier,
though the former could probably have applications in other parts of SOOT.

An extension of that would probably be, to aggregate further over whole
classes and probably even packages (though that should not be done on the
call graph itself, I propose) to report, how tight classes respectively
packages are coupled. Of course this whole information is not very useful
for the actual purpose of SOOT, being an optimization framework. But for
what I am using SOOT - as base to a high level visualization tool - it would
be great to have such statistics.

Thank you very much,
Eric