From f5f6748b757b7480efcae4fe345615990f907f81 Mon Sep 17 00:00:00 2001 From: Richard Purdie Date: Fri, 24 Jul 2015 11:41:44 +0100 Subject: bitbake: data_smart: Improve override history logging Calling record() for each override alteration is slow. Since we now expand overrides dynamically we don't have to record the log data at each alteration, we can instead print it directly from the existing data stores at variable history print time using the exact same data stores. This massively improves performance of the data store when parsing with bitbake -e for example, it will improve memory overhead as well. The only downside is that VariableHistory has to poke into the datastore for some of its data but that seems an acceptable tradeoff rather than double caching. (Bitbake rev: 100b447a161ef20fa559e39516cd32fa78e38262) Signed-off-by: Richard Purdie --- bitbake/lib/bb/data_smart.py | 23 +++++++++++++---------- 1 file changed, 13 insertions(+), 10 deletions(-) (limited to 'bitbake/lib/bb/data_smart.py') diff --git a/bitbake/lib/bb/data_smart.py b/bitbake/lib/bb/data_smart.py index f0187b7a17..26f69d105a 100644 --- a/bitbake/lib/bb/data_smart.py +++ b/bitbake/lib/bb/data_smart.py @@ -252,8 +252,20 @@ class VariableHistory(object): else: return [] - def emit(self, var, oval, val, o): + def emit(self, var, oval, val, o, d): history = self.variable(var) + + # Append override history + if var in d.overridedata: + for (r, override) in d.overridedata[var]: + for event in self.variable(r): + loginfo = event.copy() + if 'flag' in loginfo and not loginfo['flag'].startswith("_"): + continue + loginfo['variable'] = var + loginfo['op'] = 'override[%s]:%s' % (override, loginfo['op']) + history.append(loginfo) + commentVal = re.sub('\n', '\n#', str(oval)) if history: if len(history) == 1: @@ -496,15 +508,6 @@ class DataSmart(MutableMapping): # Force CoW by recreating the list first self.overridedata[shortvar] = list(self.overridedata[shortvar]) self.overridedata[shortvar].append([var, override]) - for event in self.varhistory.variable(var): - if 'flag' in loginfo and not loginfo['flag'].startswith("_"): - continue - loginfo = event.copy() - loginfo['variable'] = shortvar - loginfo['op'] = 'override[%s]:%s' % (override, loginfo['op']) - loginfo['nodups'] = True - self.varhistory.record(**loginfo) - override = None if "_" in shortvar: override = var[shortvar.rfind('_')+1:] -- cgit v1.2.3-54-g00ecf