bitbake: 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.

(Bitbake rev: 4ad281224e92b5f94e3a9c17e8898ec8f1086cdc)

Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
This commit is contained in:
Richard Purdie
2018-01-26 11:50:55 +00:00
parent 38fd8bbb7f
commit 2ae62f0d2b

View File

@@ -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: