diff options
author | Richard Purdie <richard.purdie@linuxfoundation.org> | 2018-01-26 11:50:55 +0000 |
---|---|---|
committer | Richard Purdie <richard.purdie@linuxfoundation.org> | 2018-01-29 14:37:59 +0000 |
commit | 4ad281224e92b5f94e3a9c17e8898ec8f1086cdc (patch) | |
tree | ae5050804e1b95a063b3e6f5222188e85a08447a | |
parent | 7e56c285f5ebae9b4b367514e60e3a6ba8cd5693 (diff) | |
download | bitbake-contrib-4ad281224e92b5f94e3a9c17e8898ec8f1086cdc.tar.gz |
runqueue: Optimize recrdepends handling
We can optimise the loops slightly so we only process given substrings
once rather than many times. This means expanding out add_resolved_dependencies.
Also add a function which allows replacement of the task element of a
task id, reducing the amount of string handling we're doing in a performance
critical loop.
Its also clear that later code adds to the tasks depends so we don't need
to add .depends() to extradeps at the start.
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
-rw-r--r-- | lib/bb/runqueue.py | 23 |
1 files changed, 13 insertions, 10 deletions
diff --git a/lib/bb/runqueue.py b/lib/bb/runqueue.py index 5f53fe79f..bbfe9eeee 100644 --- a/lib/bb/runqueue.py +++ b/lib/bb/runqueue.py @@ -74,6 +74,9 @@ def build_tid(mc, fn, taskname): return "multiconfig:" + mc + ":" + fn + ":" + taskname return fn + ":" + taskname +def tid_replacetask(tid, taskname): + return tid.rsplit(":", 1)[0] + ":" + taskname + class RunQueueStats: """ Holds statistics on the tasks handled by the associated runQueue @@ -581,12 +584,6 @@ class RunQueueData: if t in taskData[mc].taskentries: depends.add(t) - def add_resolved_dependencies(mc, fn, tasknames, depends): - for taskname in tasknames: - tid = build_tid(mc, fn, taskname) - if tid in self.runtaskentries: - depends.add(tid) - for mc in taskData: for tid in taskData[mc].taskentries: @@ -689,16 +686,22 @@ class RunQueueData: extradeps = {} for taskcounter, tid in enumerate(recursivetasks): - extradeps[tid] = set(self.runtaskentries[tid].depends) + extradeps[tid] = set() tasknames = recursivetasks[tid] seendeps = set() + seenbasedeps = set() def generate_recdeps(t): newdeps = set() - (mc, fn, taskname, _) = split_tid_mcfn(t) - add_resolved_dependencies(mc, fn, tasknames, newdeps) - extradeps[tid].update(newdeps) + basetid = fn_from_tid(t) + if basetid not in seenbasedeps: + for taskname in tasknames: + newtid = tid_replacetask(t, taskname) + if newtid in self.runtaskentries and newtid not in seendeps: + newdeps.add(newtid) + extradeps[tid].add(newtid) + seenbasedeps.add(basetid) seendeps.add(t) newdeps.add(t) for i in newdeps: |