bitbake: runqueue: Optimise task migration code slightly

Move the calls to difference_update out a code level which improves efficiency
significantly.

Also further combine the outer loop for efficiency too.

These two changes remove a bottleneck from the performance charts.

(Bitbake rev: 57df7f191755dd887827d51b125d246c1af3e1b6)

Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
(cherry picked from commit e28ec69356f1797de3e4e3fca0fef710bc4564de)
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
This commit is contained in:
Richard Purdie
2019-12-14 18:17:01 +00:00
parent db413b5050
commit 2425a927c7

View File

@@ -2268,15 +2268,16 @@ class RunQueueExecute:
# Work out all tasks which depend upon these
total = set()
next = set()
for p in toprocess:
next = set(self.rqdata.runtaskentries[p].revdeps)
while next:
current = next.copy()
total = total | next
next = set()
for ntid in current:
next |= self.rqdata.runtaskentries[ntid].revdeps
next.difference_update(total)
next |= self.rqdata.runtaskentries[p].revdeps
while next:
current = next.copy()
total = total | next
next = set()
for ntid in current:
next |= self.rqdata.runtaskentries[ntid].revdeps
next.difference_update(total)
# Now iterate those tasks in dependency order to regenerate their taskhash/unihash
next = set()