summaryrefslogtreecommitdiffstats
path: root/lib/bb/runqueue.py
diff options
context:
space:
mode:
authorRichard Purdie <rpurdie@linux.intel.com>2010-10-05 22:21:34 +0100
committerChris Larson <chris_larson@mentor.com>2010-12-29 23:51:07 -0700
commit189a5f29c7c775c0988eed2dad860b1f790ca409 (patch)
treeeedc63e30b12858c8f6210d27bd391017b08e4d3 /lib/bb/runqueue.py
parent1d318acb06a80c635dc2b4a935cb2fafb603f40c (diff)
downloadbitbake-189a5f29c7c775c0988eed2dad860b1f790ca409.tar.gz
runqueue: implement cache checking from metadata
This lets us speed up setscene processing, by letting the function from the metadata inform us about the necessity of running the setscene functions. Signed-off-by: Richard Purdie <rpurdie@linux.intel.com>
Diffstat (limited to 'lib/bb/runqueue.py')
-rw-r--r--lib/bb/runqueue.py25
1 files changed, 24 insertions, 1 deletions
diff --git a/lib/bb/runqueue.py b/lib/bb/runqueue.py
index 13ce3a8ee..4d36d09f6 100644
--- a/lib/bb/runqueue.py
+++ b/lib/bb/runqueue.py
@@ -754,7 +754,8 @@ class RunQueue:
self.cfgData = cfgData
self.rqdata = RunQueueData(self, cooker, cfgData, dataCache, taskData, targets)
- self.stamppolicy = bb.data.getVar("BB_STAMP_POLICY", cfgData, 1) or "perfile"
+ self.stamppolicy = bb.data.getVar("BB_STAMP_POLICY", cfgData, True) or "perfile"
+ self.hashvalidate = bb.data.getVar("BB_HASHCHECK_FUNCTION", cfgData, True) or None
self.state = runQueuePrepare
@@ -1346,6 +1347,28 @@ class RunQueueExecuteScenequeue(RunQueueExecute):
if len(self.sq_revdeps[task]) == 0:
self.runq_buildable[task] = 1
+ if self.rq.hashvalidate:
+ sq_hash = []
+ sq_hashfn = []
+ sq_fn = []
+ sq_task = []
+ for task in range(len(self.sq_revdeps)):
+ realtask = self.rqdata.runq_setscene[task]
+ fn = self.rqdata.taskData.fn_index[self.rqdata.runq_fnid[realtask]]
+ sq_fn.append(fn)
+ sq_hashfn.append(self.rqdata.dataCache.hashfn[fn])
+ sq_hash.append(self.rqdata.runq_hash[realtask])
+ sq_task.append(self.rqdata.runq_task[realtask])
+
+ call = self.rq.hashvalidate + "(sq_fn, sq_task, sq_hash, sq_hashfn, d)"
+ locs = { "sq_fn" : sq_fn, "sq_task" : sq_task, "sq_hash" : sq_hash, "sq_hashfn" : sq_hashfn, "d" : self.cooker.configuration.data }
+ valid = bb.utils.better_eval(call, locs)
+ for task in range(len(self.sq_revdeps)):
+ if task not in valid:
+ logger.debug(2, 'No package found, so skipping setscene task %s',
+ self.rqdata.get_user_idstring(task))
+ self.task_failoutright(task)
+
logger.info('Executing setscene tasks')
self.rq.state = runQueueSceneRun