kumquat-buildroot/support
Thomas Petazzoni 5ed60cee1e graph-depends: optimize remove_transitive_deps()
For large configurations, the execution time of
remove_transitive_deps() becomes really high, due to the number of
nested loops + the is_dep() function being recursive.

For an allyespackageconfig, the remove_extra_deps() function takes 334
seconds to execute, and the overall time to generate the .dot file is
6 minutes and 39 seconds. Here is a timing of the different
graph-depends steps and the overall execution time:

  Getting dependencies:   42.5735 seconds
  Turn deps into a dict:   0.0023 seconds
  Remove extra deps:     334.1542 seconds
  Get version:            22.4919 seconds
  Generate .dot:           0.0197 seconds

  real	6m39.289s
  user	6m16.644s
  sys	0m8.792s

By adding a very simple cache for the results of is_dep(), we bring
down the execution time of the "Remove extra deps" step from 334
seconds to just 4 seconds, reducing the overall execution time to 1
minutes and 10 seconds:

  Getting dependencies:  42.9546 seconds
  Turn deps into a dict:  0.0025 seconds
  Remove extra deps:      4.9643 seconds
  Get version:           22.1865 seconds
  Generate .dot:          0.0207 seconds

  real	1m10.201s
  user	0m47.716s
  sys	0m7.948s

Signed-off-by: Thomas Petazzoni <thomas.petazzoni@free-electrons.com>
Tested-by: Gustavo Zacarias <gustavo.zacarias@free-electrons.com>
[yann.morin.1998@free.fr:
  - rename is_dep() to is_dep_uncached(), keep existig code as-is
  - add is_dep() as a cached-version of is_dep_uncached()
  - use constructs more conform with 2to3
  - use exceptions (EAFP) rather than check-before-use (LBYL) to be more
    pythonist; that even decreases the duration yet a little bit more!
]
Signed-off-by: Yann E. MORIN <yann.morin.1998@free.fr>
2015-12-29 23:26:22 +01:00
..
dependencies dependencies.sh: improve the missing perl modules detection 2015-10-15 22:51:50 +02:00
download support/download: protect from custom commands with spaces in args 2015-12-12 17:00:46 +01:00
dummy-external core: allow external Config.in/makefile code to be integrated 2013-12-08 22:39:42 +01:00
gnuconfig Update config.guess and config.sub scripts to latest versions. 2013-10-27 15:29:38 +01:00
kconfig kconfig/lxdialog: get ncurses CFLAGS with pkg-config 2015-01-07 22:26:53 +01:00
legal-info legal-info: infrastructure to collect legally-relevant material 2012-07-17 19:05:49 +02:00
libtool support/libtool: add patch for newer versions 2014-12-21 13:21:56 +01:00
misc package-cmake: remove now-redundant target ccache support 2015-10-04 18:22:20 +02:00
scripts graph-depends: optimize remove_transitive_deps() 2015-12-29 23:26:22 +01:00