]> git.ipfire.org Git - thirdparty/openembedded/openembedded-core-contrib.git/commitdiff
bitbake: runqueue: Further optimise holdoff tasks
authorRichard Purdie <richard.purdie@linuxfoundation.org>
Fri, 16 Aug 2019 12:32:04 +0000 (13:32 +0100)
committerRichard Purdie <richard.purdie@linuxfoundation.org>
Wed, 21 Aug 2019 14:30:13 +0000 (15:30 +0100)
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>
bitbake/lib/bb/runqueue.py

index 0c17a23bdc31d24de67bf00a051d9972696bb947..a98ccddd090d87c50fdb19f7da00c99d9fcd6492 100644 (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):