diff options
author | Richard Purdie <rpurdie@linux.intel.com> | 2007-08-17 23:28:57 +0000 |
---|---|---|
committer | Richard Purdie <rpurdie@linux.intel.com> | 2007-08-17 23:28:57 +0000 |
commit | a562112049d0a4fe725a0958c5b91d3028422822 (patch) | |
tree | d589371b54a9c6512b38cc4453283807c279ffc7 | |
parent | 85296f4f69fe8812816b346c5b0a85655403d92b (diff) | |
download | bitbake-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.py | 54 | ||||
-rw-r--r-- | lib/bb/parse/parse_py/BBHandler.py | 18 |
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: |