[oe-commits] [bitbake] 16/26: runqueue: Simplify scenequeue unskippable calculation

git at git.openembedded.org git at git.openembedded.org
Thu Jul 11 00:09:36 UTC 2019


This is an automated email from the git hooks/post-receive script.

rpurdie pushed a commit to branch master-next
in repository bitbake.

commit 83d03498f3a45d0acee051ee71e9ab28b45d018b
Author: Richard Purdie <richard.purdie at linuxfoundation.org>
AuthorDate: Sat Jul 6 14:18:23 2019 +0100

    runqueue: Simplify scenequeue unskippable calculation
    
    The existing code to compute the 'unskippable' setscene task list is overcomlicated,
    so replace it with something functionally equivalent but simpler and more efficient.
    
    We don't need to process all chains, just the 'top' ones to the first setscene tasks.
    
    This also makes the code more readable.
    
    Signed-off-by: Richard Purdie <richard.purdie at linuxfoundation.org>
---
 lib/bb/runqueue.py | 45 +++++++++++++--------------------------------
 1 file changed, 13 insertions(+), 32 deletions(-)

diff --git a/lib/bb/runqueue.py b/lib/bb/runqueue.py
index 1d7706a..1f41340 100644
--- a/lib/bb/runqueue.py
+++ b/lib/bb/runqueue.py
@@ -2271,7 +2271,7 @@ class SQData(object):
     def __init__(self):
         self.sq_harddeps = {}
         self.stamps = {}
-        self.unskippable = []
+        self.unskippable = set()
 
 def build_scenequeue_data(sqdata, rqdata, rq, cooker, stampcache, sqrq):
 
@@ -2344,38 +2344,19 @@ def build_scenequeue_data(sqdata, rqdata, rq, cooker, stampcache, sqrq):
 
     # Build a list of setscene tasks which are "unskippable"
     # These are direct endpoints referenced by the build
-    endpoints2 = {}
-    sq_revdeps2 = {}
-    sq_revdeps_new2 = {}
-    def process_endpoints2(endpoints):
-        newendpoints = {}
-        for point, task in endpoints.items():
-            tasks = set([point])
-            if task:
-                tasks |= task
-            if sq_revdeps_new2[point]:
-                tasks |= sq_revdeps_new2[point]
-            sq_revdeps_new2[point] = set()
-            if point in rqdata.runq_setscene_tids:
-                sq_revdeps_new2[point] = tasks
-            for dep in rqdata.runtaskentries[point].depends:
-                if point in sq_revdeps2[dep]:
-                    sq_revdeps2[dep].remove(point)
-                if tasks:
-                    sq_revdeps_new2[dep] |= tasks
-                if (len(sq_revdeps2[dep]) == 0 or len(sq_revdeps_new2[dep]) != 0) and dep not in rqdata.runq_setscene_tids:
-                    newendpoints[dep] = tasks
-        if len(newendpoints) != 0:
-            process_endpoints2(newendpoints)
+    # Take the build endpoints (no revdeps) and find the sstate tasks they depend upon
+    new = True
     for tid in rqdata.runtaskentries:
-        sq_revdeps2[tid] = copy.copy(rqdata.runtaskentries[tid].revdeps)
-        sq_revdeps_new2[tid] = set()
-        if (len(sq_revdeps2[tid]) == 0) and tid not in rqdata.runq_setscene_tids:
-            endpoints2[tid] = set()
-    process_endpoints2(endpoints2)
-    for tid in rqdata.runq_setscene_tids:
-        if sq_revdeps_new2[tid]:
-            sqdata.unskippable.append(tid)
+        if len(rqdata.runtaskentries[tid].revdeps) == 0:
+            sqdata.unskippable.add(tid)
+    while new:
+        new = False
+        for tid in sqdata.unskippable.copy():
+            if tid in rqdata.runq_setscene_tids:
+                continue
+            sqdata.unskippable.remove(tid)
+            sqdata.unskippable |= rqdata.runtaskentries[tid].depends
+            new = True
 
     rqdata.init_progress_reporter.next_stage(len(rqdata.runtaskentries))
 

-- 
To stop receiving notification emails like this one, please contact
the administrator of this repository.


More information about the Openembedded-commits mailing list