aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorRichard Purdie <richard.purdie@linuxfoundation.org>2018-01-26 11:50:55 +0000
committerRichard Purdie <richard.purdie@linuxfoundation.org>2018-01-29 14:37:59 +0000
commit4ad281224e92b5f94e3a9c17e8898ec8f1086cdc (patch)
treeae5050804e1b95a063b3e6f5222188e85a08447a
parent7e56c285f5ebae9b4b367514e60e3a6ba8cd5693 (diff)
downloadbitbake-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.py23
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: