bitbake: runqueue: Further optimise holdoff tasks

There are other data structures which can be reprocessed at the same
time as holdoff_tasks, further improving build efficiency in various
places.

(Bitbake rev: 02090b3456b7a2de12e72dfeaabfd3b631609924)

Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
This commit is contained in:
Richard Purdie
2019-08-16 13:32:04 +01:00
parent fece8f4737
commit 4cc3c0daed

View File

@@ -2040,6 +2040,8 @@ class RunQueueExecute:
if self.can_start_task():
return True
self.update_holdofftasks()
if not self.sq_live and not self.sqdone and not self.sq_deferred and not self.updated_taskhash_queue and not self.holdoff_tasks:
logger.info("Setscene tasks completed")
@@ -2058,8 +2060,6 @@ class RunQueueExecute:
self.rq.state = runQueueComplete
return True
self.update_holdofftasks()
if self.cooker.configuration.setsceneonly:
task = None
else:
@@ -2200,6 +2200,29 @@ class RunQueueExecute:
if not self.holdoff_need_update:
return
notcovered = set(self.scenequeue_notcovered)
notcovered |= self.cantskip
for tid in self.scenequeue_notcovered:
notcovered |= self.sqdata.sq_covered_tasks[tid]
notcovered |= self.sqdata.unskippable.difference(self.rqdata.runq_setscene_tids)
notcovered.intersection_update(self.tasks_scenequeue_done)
covered = set(self.scenequeue_covered)
for tid in self.scenequeue_covered:
covered |= self.sqdata.sq_covered_tasks[tid]
covered.difference_update(notcovered)
covered.intersection_update(self.tasks_scenequeue_done)
for tid in notcovered | covered:
if len(self.rqdata.runtaskentries[tid].depends) == 0:
self.setbuildable(tid)
elif self.rqdata.runtaskentries[tid].depends.issubset(self.runq_complete):
self.setbuildable(tid)
self.tasks_covered = covered
self.tasks_notcovered = notcovered
self.holdoff_tasks = set()
for tid in self.rqdata.runq_setscene_tids:
@@ -2359,28 +2382,6 @@ class RunQueueExecute:
new.add(dep)
next = new
notcovered = set(self.scenequeue_notcovered)
notcovered |= self.cantskip
for tid in self.scenequeue_notcovered:
notcovered |= self.sqdata.sq_covered_tasks[tid]
notcovered |= self.sqdata.unskippable.difference(self.rqdata.runq_setscene_tids)
notcovered.intersection_update(self.tasks_scenequeue_done)
covered = set(self.scenequeue_covered)
for tid in self.scenequeue_covered:
covered |= self.sqdata.sq_covered_tasks[tid]
covered.difference_update(notcovered)
covered.intersection_update(self.tasks_scenequeue_done)
for tid in notcovered | covered:
if len(self.rqdata.runtaskentries[tid].depends) == 0:
self.setbuildable(tid)
elif self.rqdata.runtaskentries[tid].depends.issubset(self.runq_complete):
self.setbuildable(tid)
self.tasks_covered = covered
self.tasks_notcovered = notcovered
self.holdoff_need_update = True
def sq_task_completeoutright(self, task):