path: root/classes
diff options
authorRichard Purdie <rpurdie@linux.intel.com>2009-07-23 17:58:56 +0100
committerRichard Purdie <rpurdie@linux.intel.com>2009-07-23 17:58:56 +0100
commitd715da0ab6fecb85d1bd4722dbc315a6ec079599 (patch)
tree0961563f90372b9e02fa696484e462afe8251e86 /classes
parentbbe3ee4b62b887f408ef7e43ebc1b7b54a238f9a (diff)
runqueue: Improve recursive task dependency calculation speed (from Poky)
At present there is a bottleneck in runqueue in the get_recursive_tdepends() function which bothers me as we never used to have it. It appeared when we fixed some correctness issues with the dependency tree and the code in this area has grown adhoc for too long. As an example the above function was getting called 500,000 times in my main test case of building an image. Its particularly problematic in builds with many recursive dependencies such as 'bitbake world'. This commit rewrites the problematic function entirely with the following benefits: * Replaces the most illegible code in that function with code thats easier to understand * Builds the dependency tree per filename, not per task since we don't need it per task which is a performance win * Improves the documentation in places * Much faster execution * Reuses the main dependency tree data, doesn't make its own. The code functions very differently to the original. Previously the recursive dependency tree and the main dependency tree were separate. In this implementation we use the main tree to build the recursive tree after the main tree has been completed, then inject the dependencies. Compared with the original this actually inserts small numbers (4 in my test cases) of additional dependencies into the task graph such as image_recipe:do_rootfs -> image_recipe:do_package_write_ipk which is arguably an bug in the existing implementation. I've checked into this, understand why its happening and believe none of the additional dependencies should cause any complications. Signed-off-by: Richard Purdie <rpurdie@linux.intel.com>
Diffstat (limited to 'classes')
0 files changed, 0 insertions, 0 deletions