diff options
author | Richard Purdie <richard.purdie@linuxfoundation.org> | 2019-08-16 13:32:04 +0100 |
---|---|---|
committer | Richard Purdie <richard.purdie@linuxfoundation.org> | 2019-08-21 15:30:13 +0100 |
commit | 4cc3c0daed392c2938abda523ec34400f852e819 (patch) | |
tree | a65a530458b9397e1bc5bc21d622126fbc7d6959 | |
parent | fece8f4737bb15db04b82b816822b1fe744d9be8 (diff) | |
download | poky-4cc3c0daed392c2938abda523ec34400f852e819.tar.gz |
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>
-rw-r--r-- | bitbake/lib/bb/runqueue.py | 49 |
1 files changed, 25 insertions, 24 deletions
diff --git a/bitbake/lib/bb/runqueue.py b/bitbake/lib/bb/runqueue.py index 0c17a23bdc..a98ccddd09 100644 --- a/bitbake/lib/bb/runqueue.py +++ b/bitbake/lib/bb/runqueue.py | |||
@@ -2040,6 +2040,8 @@ class RunQueueExecute: | |||
2040 | if self.can_start_task(): | 2040 | if self.can_start_task(): |
2041 | return True | 2041 | return True |
2042 | 2042 | ||
2043 | self.update_holdofftasks() | ||
2044 | |||
2043 | 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: | 2045 | 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: |
2044 | logger.info("Setscene tasks completed") | 2046 | logger.info("Setscene tasks completed") |
2045 | 2047 | ||
@@ -2058,8 +2060,6 @@ class RunQueueExecute: | |||
2058 | self.rq.state = runQueueComplete | 2060 | self.rq.state = runQueueComplete |
2059 | return True | 2061 | return True |
2060 | 2062 | ||
2061 | self.update_holdofftasks() | ||
2062 | |||
2063 | if self.cooker.configuration.setsceneonly: | 2063 | if self.cooker.configuration.setsceneonly: |
2064 | task = None | 2064 | task = None |
2065 | else: | 2065 | else: |
@@ -2200,6 +2200,29 @@ class RunQueueExecute: | |||
2200 | 2200 | ||
2201 | if not self.holdoff_need_update: | 2201 | if not self.holdoff_need_update: |
2202 | return | 2202 | return |
2203 | |||
2204 | notcovered = set(self.scenequeue_notcovered) | ||
2205 | notcovered |= self.cantskip | ||
2206 | for tid in self.scenequeue_notcovered: | ||
2207 | notcovered |= self.sqdata.sq_covered_tasks[tid] | ||
2208 | notcovered |= self.sqdata.unskippable.difference(self.rqdata.runq_setscene_tids) | ||
2209 | notcovered.intersection_update(self.tasks_scenequeue_done) | ||
2210 | |||
2211 | covered = set(self.scenequeue_covered) | ||
2212 | for tid in self.scenequeue_covered: | ||
2213 | covered |= self.sqdata.sq_covered_tasks[tid] | ||
2214 | covered.difference_update(notcovered) | ||
2215 | covered.intersection_update(self.tasks_scenequeue_done) | ||
2216 | |||
2217 | for tid in notcovered | covered: | ||
2218 | if len(self.rqdata.runtaskentries[tid].depends) == 0: | ||
2219 | self.setbuildable(tid) | ||
2220 | elif self.rqdata.runtaskentries[tid].depends.issubset(self.runq_complete): | ||
2221 | self.setbuildable(tid) | ||
2222 | |||
2223 | self.tasks_covered = covered | ||
2224 | self.tasks_notcovered = notcovered | ||
2225 | |||
2203 | self.holdoff_tasks = set() | 2226 | self.holdoff_tasks = set() |
2204 | 2227 | ||
2205 | for tid in self.rqdata.runq_setscene_tids: | 2228 | for tid in self.rqdata.runq_setscene_tids: |
@@ -2359,28 +2382,6 @@ class RunQueueExecute: | |||
2359 | new.add(dep) | 2382 | new.add(dep) |
2360 | next = new | 2383 | next = new |
2361 | 2384 | ||
2362 | notcovered = set(self.scenequeue_notcovered) | ||
2363 | notcovered |= self.cantskip | ||
2364 | for tid in self.scenequeue_notcovered: | ||
2365 | notcovered |= self.sqdata.sq_covered_tasks[tid] | ||
2366 | notcovered |= self.sqdata.unskippable.difference(self.rqdata.runq_setscene_tids) | ||
2367 | notcovered.intersection_update(self.tasks_scenequeue_done) | ||
2368 | |||
2369 | covered = set(self.scenequeue_covered) | ||
2370 | for tid in self.scenequeue_covered: | ||
2371 | covered |= self.sqdata.sq_covered_tasks[tid] | ||
2372 | covered.difference_update(notcovered) | ||
2373 | covered.intersection_update(self.tasks_scenequeue_done) | ||
2374 | |||
2375 | for tid in notcovered | covered: | ||
2376 | if len(self.rqdata.runtaskentries[tid].depends) == 0: | ||
2377 | self.setbuildable(tid) | ||
2378 | elif self.rqdata.runtaskentries[tid].depends.issubset(self.runq_complete): | ||
2379 | self.setbuildable(tid) | ||
2380 | |||
2381 | self.tasks_covered = covered | ||
2382 | self.tasks_notcovered = notcovered | ||
2383 | |||
2384 | self.holdoff_need_update = True | 2385 | self.holdoff_need_update = True |
2385 | 2386 | ||
2386 | def sq_task_completeoutright(self, task): | 2387 | def sq_task_completeoutright(self, task): |