]> git.ipfire.org Git - thirdparty/openembedded/openembedded-core-contrib.git/commitdiff
Prefer xrange over range for small performance gain.
authorBob Foerster <robert@erafx.com>
Fri, 19 Nov 2010 20:39:22 +0000 (04:39 +0800)
committerChris Larson <chris_larson@mentor.com>
Sun, 21 Nov 2010 18:18:02 +0000 (11:18 -0700)
range() allocates an actual list when called.  xrange() is just an iterator
and creates the next range item on demand.  This provides a slight
performance increase.

In python 3, range will do what xrange does currently, but the upgrade will
be handled by the 2to3 tool.

Signed-off-by: Bob Foerster <robert@erafx.com>
lib/bb/cooker.py
lib/bb/runqueue.py
lib/bb/taskdata.py
lib/bb/utils.py

index 2281600d5adedd35aac3b19ddc679962507c82d6..355a54961df5bc8bc1b85e449ff6c38d4ded28e8 100644 (file)
@@ -288,7 +288,7 @@ class BBCooker:
         depend_tree["rdepends-pkg"] = {}
         depend_tree["rrecs-pkg"] = {}
 
-        for task in range(len(rq.runq_fnid)):
+        for task in xrange(len(rq.runq_fnid)):
             taskname = rq.runq_task[task]
             fnid = rq.runq_fnid[task]
             fn = taskdata.fn_index[fnid]
index dbbd55567ab2fbf0c6942b2e53703b7f7dc89283..3f527ad6a2308417898e42598f312b4b427c1218 100644 (file)
@@ -97,7 +97,7 @@ class RunQueueScheduler(object):
         """
         Return the id of the first task we find that is buildable
         """
-        for tasknum in range(len(self.rq.runq_fnid)):
+        for tasknum in xrange(len(self.rq.runq_fnid)):
             taskid = self.prio_map[tasknum]
             if self.rq.runq_running[taskid] == 1:
                 continue
@@ -229,7 +229,7 @@ class RunQueue:
         return "%s, %s" % (fn, taskname)
 
     def get_task_id(self, fnid, taskname):
-        for listid in range(len(self.runq_fnid)):
+        for listid in xrange(len(self.runq_fnid)):
             if self.runq_fnid[listid] == fnid and self.runq_task[listid] == taskname:
                 return listid
         return None
@@ -251,7 +251,7 @@ class RunQueue:
             """
             lowest = 0
             new_chain = []
-            for entry in range(len(chain)):
+            for entry in xrange(len(chain)):
                 if chain[entry] < chain[lowest]:
                     lowest = entry
             new_chain.extend(chain[lowest:])
@@ -264,7 +264,7 @@ class RunQueue:
             """
             if len(chain1) != len(chain2):
                 return False
-            for index in range(len(chain1)):
+            for index in xrange(len(chain1)):
                 if chain1[index] != chain2[index]:
                     return False
             return True
@@ -335,7 +335,7 @@ class RunQueue:
         deps_left = []
         task_done = []
 
-        for listid in range(numTasks):
+        for listid in xrange(numTasks):
             task_done.append(False)
             weight.append(0)
             deps_left.append(len(self.runq_revdeps[listid]))
@@ -359,7 +359,7 @@ class RunQueue:
 
         # Circular dependency sanity check
         problem_tasks = []
-        for task in range(numTasks):
+        for task in xrange(numTasks):
             if task_done[task] is False or deps_left[task] != 0:
                 problem_tasks.append(task)
                 logger.debug(2, "Task %s (%s) is not buildable\n", task, self.get_user_idstring(task))
@@ -437,7 +437,7 @@ class RunQueue:
                     if taskid is not None:
                         depends.append(taskid)
 
-        for task in range(len(taskData.tasks_name)):
+        for task in xrange(len(taskData.tasks_name)):
             depends = []
             recrdepends = []
             fnid = taskData.tasks_fnid[task]
@@ -527,7 +527,7 @@ class RunQueue:
         # Algorithm is O(tasks) + O(tasks)*O(fnids)
         #
         reccumdepends = {}
-        for task in range(len(self.runq_fnid)):
+        for task in xrange(len(self.runq_fnid)):
             fnid = self.runq_fnid[task]
             if fnid not in reccumdepends:
                 if fnid in tdepends_fnid:
@@ -535,7 +535,7 @@ class RunQueue:
                 else:
                     reccumdepends[fnid] = set()
             reccumdepends[fnid].update(self.runq_depends[task])
-        for task in range(len(self.runq_fnid)):
+        for task in xrange(len(self.runq_fnid)):
             taskfnid = self.runq_fnid[task]
             for fnid in reccumdepends:
                 if task in reccumdepends[fnid]:
@@ -548,7 +548,7 @@ class RunQueue:
         #
         # e.g. do_sometask[recrdeptask] = "do_someothertask"
         # (makes sure sometask runs after someothertask of all DEPENDS, RDEPENDS and intertask dependencies, recursively)
-        for task in range(len(self.runq_fnid)):
+        for task in xrange(len(self.runq_fnid)):
             if len(runq_recrdepends[task]) > 0:
                 taskfnid = self.runq_fnid[task]
                 for dep in reccumdepends[taskfnid]:
@@ -617,7 +617,7 @@ class RunQueue:
 
         maps = []
         delcount = 0
-        for listid in range(len(self.runq_fnid)):
+        for listid in xrange(len(self.runq_fnid)):
             if runq_build[listid-delcount] == 1:
                 maps.append(listid-delcount)
             else:
@@ -644,7 +644,7 @@ class RunQueue:
 
         # Remap the dependencies to account for the deleted tasks
         # Check we didn't delete a task we depend on
-        for listid in range(len(self.runq_fnid)):
+        for listid in xrange(len(self.runq_fnid)):
             newdeps = []
             origdeps = self.runq_depends[listid]
             for origdep in origdeps:
@@ -656,14 +656,14 @@ class RunQueue:
         logger.verbose("Assign Weightings")
 
         # Generate a list of reverse dependencies to ease future calculations
-        for listid in range(len(self.runq_fnid)):
+        for listid in xrange(len(self.runq_fnid)):
             for dep in self.runq_depends[listid]:
                 self.runq_revdeps[dep].add(listid)
 
         # Identify tasks at the end of dependency chains
         # Error on circular dependency loops (length two)
         endpoints = []
-        for listid in range(len(self.runq_fnid)):
+        for listid in xrange(len(self.runq_fnid)):
             revdeps = self.runq_revdeps[listid]
             if len(revdeps) == 0:
                 endpoints.append(listid)
@@ -690,7 +690,7 @@ class RunQueue:
         # Sanity Check - Check for multiple tasks building the same provider
         prov_list = {}
         seen_fn = []
-        for task in range(len(self.runq_fnid)):
+        for task in xrange(len(self.runq_fnid)):
             fn = taskData.fn_index[self.runq_fnid[task]]
             if fn in seen_fn:
                 continue
@@ -736,7 +736,7 @@ class RunQueue:
             if self.stamppolicy == "whitelist":
                 stampwhitelist = self.self.stampfnwhitelist
 
-        for task in range(len(self.runq_fnid)):
+        for task in xrange(len(self.runq_fnid)):
             unchecked[task] = ""
             if len(self.runq_depends[task]) == 0:
                 buildable.append(task)
@@ -751,7 +751,7 @@ class RunQueue:
                     if revdep in unchecked:
                         buildable.append(revdep)
 
-        for task in range(len(self.runq_fnid)):
+        for task in xrange(len(self.runq_fnid)):
             if task not in unchecked:
                 continue
             fn = self.taskData.fn_index[self.runq_fnid[task]]
@@ -910,7 +910,7 @@ class RunQueue:
         self.failed_fnids = []
 
         # Mark initial buildable tasks
-        for task in range(self.stats.total):
+        for task in xrange(self.stats.total):
             self.runq_running.append(0)
             self.runq_complete.append(0)
             if len(self.runq_depends[task]) == 0:
@@ -1010,7 +1010,7 @@ class RunQueue:
                 return
 
             # Sanity Checks
-            for task in range(self.stats.total):
+            for task in xrange(self.stats.total):
                 if self.runq_buildable[task] == 0:
                     logger.error("Task %s never buildable!", task)
                 if self.runq_running[task] == 0:
@@ -1130,7 +1130,7 @@ class RunQueue:
         Dump some debug information on the internal data structures
         """
         logger.debug(3, "run_tasks:")
-        for task in range(len(self.runq_task)):
+        for task in xrange(len(self.runq_task)):
             logger.debug(3, " (%s)%s - %s: %s   Deps %s RevDeps %s", task,
                        taskQueue.fn_index[self.runq_fnid[task]],
                        self.runq_task[task],
@@ -1139,7 +1139,7 @@ class RunQueue:
                        self.runq_revdeps[task])
 
         logger.debug(3, "sorted_tasks:")
-        for task1 in range(len(self.runq_task)):
+        for task1 in xrange(len(self.runq_task)):
             if task1 in self.prio_map:
                 task = self.prio_map[task1]
                 logger.debug(3, " (%s)%s - %s: %s   Deps %s RevDeps %s", task,
index dc8d0668c12edf516fa573dc31c81e5060d65ddd..fdd55ee83e686efe688ce05a3fa4b86e2cf4d27f 100644 (file)
@@ -493,7 +493,7 @@ class TaskData:
         dependees = self.get_dependees(targetid)
         for fnid in dependees:
             self.fail_fnid(fnid, missing_list)
-        for taskid in range(len(self.tasks_idepends)):
+        for taskid in xrange(len(self.tasks_idepends)):
             idepends = self.tasks_idepends[taskid]
             for (idependid, idependtask) in idepends:
                 if idependid == targetid:
@@ -558,7 +558,7 @@ class TaskData:
         logger.debug(3, ", ".join(self.run_names_index))
 
         logger.debug(3, "build_targets:")
-        for buildid in range(len(self.build_names_index)):
+        for buildid in xrange(len(self.build_names_index)):
             target = self.build_names_index[buildid]
             targets = "None"
             if buildid in self.build_targets:
@@ -566,7 +566,7 @@ class TaskData:
             logger.debug(3, " (%s)%s: %s", buildid, target, targets)
 
         logger.debug(3, "run_targets:")
-        for runid in range(len(self.run_names_index)):
+        for runid in xrange(len(self.run_names_index)):
             target = self.run_names_index[runid]
             targets = "None"
             if runid in self.run_targets:
@@ -574,7 +574,7 @@ class TaskData:
             logger.debug(3, " (%s)%s: %s", runid, target, targets)
 
         logger.debug(3, "tasks:")
-        for task in range(len(self.tasks_name)):
+        for task in xrange(len(self.tasks_name)):
             logger.debug(3, " (%s)%s - %s: %s",
                        task,
                        self.fn_index[self.tasks_fnid[task]],
index 0c2cccbc6e1de6f0e6dc4e67a73df93fd0849e6f..19ca45d809d637b0c4f35c493e4ecc76b2972238 100644 (file)
@@ -194,10 +194,10 @@ def vercmp_string(val1, val2):
     val2 = val2[0].split('.')
 
     # add back decimal point so that .03 does not become "3" !
-    for x in range(1, len(val1)):
+    for x in xrange(1, len(val1)):
         if val1[x][0] == '0' :
             val1[x] = '.' + val1[x]
-    for x in range(1, len(val2)):
+    for x in xrange(1, len(val2)):
         if val2[x][0] == '0' :
             val2[x] = '.' + val2[x]
 
@@ -214,10 +214,10 @@ def vercmp_string(val1, val2):
         val2[-1] += '_' + val2_prepart
     # The above code will extend version numbers out so they
     # have the same number of digits.
-    for x in range(0, len(val1)):
+    for x in xrange(0, len(val1)):
         cmp1 = relparse(val1[x])
         cmp2 = relparse(val2[x])
-        for y in range(0, 3):
+        for y in xrange(0, 3):
             myret = cmp1[y] - cmp2[y]
             if myret != 0:
                 __vercmp_cache__[valkey] = myret
@@ -298,7 +298,7 @@ def _print_trace(body, line):
     logger.error("Printing the environment of the function")
     min_line = max(1, line-4)
     max_line = min(line + 4, len(body)-1)
-    for i in range(min_line, max_line + 1):
+    for i in xrange(min_line, max_line + 1):
         logger.error("\t%.4d:%s", i, body[i-1])