[VTK ARB] Dependency generations and visualisation - take 2
Jeff Baumes
jeff.baumes at kitware.com
Tue Aug 24 08:56:26 EDT 2010
I like it. These should be good tools to have on hand as we figure out the
new kit boundaries.
Jeff
On Sun, Aug 22, 2010 at 6:28 PM, Andrew Maclean <a.maclean at cas.edu.au>wrote:
> Hi Jeff,
> This extends your idea of looking at the includes, by allowing the
> user to specify a particular class and (optionally) restrict the depth
> of the subsequent tree.
>
> You can select a particular class and view all the includes for that
> class. Optionally you can control the depth of the tree and create an
> output suitable for graphviz. To do this, use get_subgraph.py and run it
> using vtkdepends.py as input.
>
> python depends.py > vtkdepends.txt
>
> Here we select a particular class (vtkParametricTorus), the topmost two
> levels of the tree and format for subsequent use by graphviz.
> python get_subgraph.py -i vtkdepends.txt -c vtkParametricTorus -g -d 2 >
> x
> dot -Tps -O x
>
> Here we select a particular class (vtkParametricTorus), all levels of
> the tree and run it dependsview.py.
> python get_subgraph.py -i vtkdepends.txt -c vtkParametricTorus > x
> vtkpython dependsview.py x
>
>
>
> One issue I have is that I get a segfault if I restrich the depth of the
> tree output and run dependsview.py.
> e.g
> python get_subgraph.py -i vtkdepends.txt -c vtkParametricTorus -d 2 > x
> vtkpython dependsview.py x
>
> Produces this output:
> Total number of classes: 5
> Top Ten:
> 18
> vtkMath 7
> vtkObjectFactory 7
> vtkParametricTorus 3
> vtkParametricFunction 1
> 0
> Segmentation fault
>
>
> Regards
> Andrew
>
>
>
> On Thu, 2010-08-19 at 11:43 -0400, Jeff Baumes wrote:
> > I attempted some custom scripts to see the include structure of VTK.
> >
> >
> > python depends.py > vtkdepends.txt
> > vtkpython dependsview.py vtkdepends.txt
> >
> >
> > The first will create a two-column list of all includes from one class
> > to another in VTK and must be called from the root of VTK source. The
> > second visualizes the data with VTK itself and prints out the classes
> > with the highest number of connections. Since the network makes a
> > so-called "hairball", the second script optionally takes a maximum
> > linkage cutoff to simplify the graph, e.g.
> >
> >
> > vtkpython dependsview.py vtkdepends.txt 10
> >
> >
> > will remove any classes with more than 10 links. Nodes are colored by
> > number of connections.
> >
> >
> > Jeff
> >
> > On Wed, Aug 18, 2010 at 10:31 PM, Andrew Maclean
> > <a.maclean at cas.edu.au> wrote:
> > Hey Bill, need some python practice?
> >
> > This could be useful in looking at the examples.
> >
> > I attach a python script taken from
> > http://furius.ca/pubcode/pub/conf/common/bin/depends-dot.html
> > And modified so that just the executable and the VTK nodes of
> > the graph
> > are traversed.
> >
> > Run it as:
> > python depends-dot ./Executable_File > depends.dot
> > Then:
> > neato -Tps -O depends.dot
> > Or:
> > dot -Tps -O depends.dot
> >
> > As you know you can also run:
> > cmake --graphviz=g.dot ..
> > Assuming the source is in ..
> > Then:
> > neato -Tps -O g.dot
> > Or:
> > dot -Tps -O g.dot
> >
> > However the python script (as modified) displays a lot more
> > information.
> > My modifications are:
> > # Eliminate /usr or /lib libraries and keep the
> > first level
> > VTK links.
> > #if fn.find('/usr') == -1 and fn.find('/lib') == -1
> > and
> > dfn.find('VTK') != -1:
> > # Just the executable and the VTK nodes of the
> > graph are
> > traversed.
> > if dfn.find('VTK') != -1:
> > print '"%s" -> "%s";' % (fn, dfn)
> >
> > Just uncomment the first if statement to just get the
> > first-level
> > linkages to libraries.
> >
> > This might be a good start in visualising dependencies.
> >
> > I also found perl script called cinclude2dot that produces
> > an include
> > dependency graph see: http://www.flourish.org/cinclude2dot/ .
> > The
> > problem with this one is that it cannot follow links to
> > includes in
> > other directories. My perl is not good enough but it may be
> > possible to
> > parse CMakeCache.txt to pick up the include paths and traverse
> > those
> > directories too.
> > I ran this on the vtk directory and the output is ... well ...
> > spectacular and unreadable.
> > Try:
> > ./cinclude2dot --merge module > source.dot
> >
> >
> > The python script focuses on libraries and the perl one
> > focuses on
> > includes. So the approaches are different. However I feel the
> > perl one
> > could be more useful with the --merge module option since in
> > general vtk
> > include names reflect class names.
> >
> > Regards
> > Andrew
> >
> >
> > --
> > ___________________________________________
> > Andrew J. P. Maclean
> > Centre for Autonomous Systems
> > The Rose Street Building J04
> > The University of Sydney 2006 NSW
> > AUSTRALIA
> > Ph: +61 2 9351 3283
> > Fax: +61 2 9351 7474
> > URL: http://www.acfr.usyd.edu.au/
> > ___________________________________________
> >
> > _______________________________________________
> > Arb mailing list
> > Arb at vtk.org
> > http://public.kitware.com/cgi-bin/mailman/listinfo/arb
> >
> >
> >
> >
> > --
> > Jeff Baumes, Ph.D.
> > Technical Lead, Kitware Inc.
> > (518) 881-4932
> >
>
> --
> ___________________________________________
> Andrew J. P. Maclean
> Centre for Autonomous Systems
> The Rose Street Building J04
> The University of Sydney 2006 NSW
> AUSTRALIA
> Ph: +61 2 9351 3283
> Fax: +61 2 9351 7474
> URL: http://www.acfr.usyd.edu.au/
> ___________________________________________
>
>
--
Jeff Baumes, Ph.D.
Technical Lead, Kitware Inc.
(518) 881-4932
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://public.kitware.com/pipermail/arb/attachments/20100824/f368b134/attachment-0001.html>
More information about the Arb
mailing list