summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorRichard Purdie <rpurdie@linux.intel.com>2007-08-17 23:28:57 +0000
committerRichard Purdie <rpurdie@linux.intel.com>2007-08-17 23:28:57 +0000
commita562112049d0a4fe725a0958c5b91d3028422822 (patch)
treed589371b54a9c6512b38cc4453283807c279ffc7
parent85296f4f69fe8812816b346c5b0a85655403d92b (diff)
downloadbitbake-a562112049d0a4fe725a0958c5b91d3028422822.tar.gz
BBHandler.py/build.py: Rework add_task to be more efficient (6% speedup, 7% number of function calls reduction)
-rw-r--r--lib/bb/build.py54
-rw-r--r--lib/bb/parse/parse_py/BBHandler.py18
2 files changed, 41 insertions, 31 deletions
diff --git a/lib/bb/build.py b/lib/bb/build.py
index b50cd3ed3..e9a6fc8c6 100644
--- a/lib/bb/build.py
+++ b/lib/bb/build.py
@@ -397,39 +397,41 @@ def del_stamp(task, d, file_name = None):
"""
stamp_internal(task, d, file_name)
-def add_task(task, deps, d):
+def add_tasks(tasklist, d):
task_graph = data.getVar('_task_graph', d)
+ task_deps = data.getVar('_task_deps', d)
if not task_graph:
task_graph = bb.digraph()
+ if not task_deps:
+ task_deps = {}
- task = data.expand(task, d)
+ for task in tasklist:
+ deps = tasklist[task]
+ task = data.expand(task, d)
+
+ data.setVarFlag(task, 'task', 1, d)
+ task_graph.addnode(task, None)
+ for dep in deps:
+ dep = data.expand(dep, d)
+ if not task_graph.hasnode(dep):
+ task_graph.addnode(dep, None)
+ task_graph.addnode(task, dep)
+
+ flags = data.getVarFlags(task, d)
+ def getTask(name):
+ if name in flags:
+ deptask = data.expand(flags[name], d)
+ if not name in task_deps:
+ task_deps[name] = {}
+ task_deps[name][task] = deptask
+ getTask('depends')
+ getTask('deptask')
+ getTask('rdeptask')
+ getTask('recrdeptask')
+ getTask('nostamp')
- data.setVarFlag(task, 'task', 1, d)
- task_graph.addnode(task, None)
- for dep in deps:
- dep = data.expand(dep, d)
- if not task_graph.hasnode(dep):
- task_graph.addnode(dep, None)
- task_graph.addnode(task, dep)
# don't assume holding a reference
data.setVar('_task_graph', task_graph, d)
-
- task_deps = data.getVar('_task_deps', d)
- if not task_deps:
- task_deps = {}
- def getTask(name):
- deptask = data.getVarFlag(task, name, d)
- if deptask:
- deptask = data.expand(deptask, d)
- if not name in task_deps:
- task_deps[name] = {}
- task_deps[name][task] = deptask
- getTask('depends')
- getTask('deptask')
- getTask('rdeptask')
- getTask('recrdeptask')
- getTask('nostamp')
-
data.setVar('_task_deps', task_deps, d)
def remove_task(task, kill, d):
diff --git a/lib/bb/parse/parse_py/BBHandler.py b/lib/bb/parse/parse_py/BBHandler.py
index aaa262d3e..0f19f9a5d 100644
--- a/lib/bb/parse/parse_py/BBHandler.py
+++ b/lib/bb/parse/parse_py/BBHandler.py
@@ -176,15 +176,23 @@ def handle(fn, d, include = 0):
if bb.event.register(var,handler) == bb.event.Registered:
all_handlers[var] = handler
+ tasklist = {}
for var in data.getVar('__BBTASKS', d) or []:
+ if var not in tasklist:
+ tasklist[var] = []
deps = data.getVarFlag(var, 'deps', d) or []
+ for p in deps:
+ if p not in tasklist[var]:
+ tasklist[var].append(p)
+
postdeps = data.getVarFlag(var, 'postdeps', d) or []
- bb.build.add_task(var, deps, d)
for p in postdeps:
- pdeps = data.getVarFlag(p, 'deps', d) or []
- pdeps.append(var)
- data.setVarFlag(p, 'deps', pdeps, d)
- bb.build.add_task(p, pdeps, d)
+ if p not in tasklist:
+ tasklist[p] = []
+ if var not in tasklist[p]:
+ tasklist[p].append(var)
+
+ bb.build.add_tasks(tasklist, d)
# now add the handlers
if not len(all_handlers) == 0: