summaryrefslogtreecommitdiffstats
path: root/bitbake/lib
diff options
context:
space:
mode:
authorRichard Purdie <richard.purdie@linuxfoundation.org>2011-06-10 17:23:33 +0100
committerRichard Purdie <richard.purdie@linuxfoundation.org>2011-06-28 15:27:40 +0100
commitcc2a8ff5225e9fe987d8036970b2bf4293a13611 (patch)
tree61728fb75a8c92e9653e756abdbc82392efc8ebd /bitbake/lib
parentfb3800178947e21899227e4ba4db4670b29231c7 (diff)
downloadast2050-yocto-poky-cc2a8ff5225e9fe987d8036970b2bf4293a13611.zip
ast2050-yocto-poky-cc2a8ff5225e9fe987d8036970b2bf4293a13611.tar.gz
bitbake/data_smart: Optimise the data store iterator
Since we're going to creat the seen set() anyway, we might as well use it directly. If we don't do this, we see thousands of function calls with associated overhead on profiles. (Bitbake rev: 9d43e3279895639ee4899df635f2546c7ee13737) Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
Diffstat (limited to 'bitbake/lib')
-rw-r--r--bitbake/lib/bb/data_smart.py22
1 files changed, 12 insertions, 10 deletions
diff --git a/bitbake/lib/bb/data_smart.py b/bitbake/lib/bb/data_smart.py
index 93c1b81..1fede8f 100644
--- a/bitbake/lib/bb/data_smart.py
+++ b/bitbake/lib/bb/data_smart.py
@@ -401,18 +401,20 @@ class DataSmart(MutableMapping):
yield key
def __iter__(self):
- seen = set()
- def _keys(d):
+ def keylist(d):
+ klist = set()
+ for key in d:
+ if key == "_data":
+ continue
+ klist.add(key)
+
if "_data" in d:
- for key in _keys(d["_data"]):
- yield key
+ klist |= keylist(d["_data"])
- for key in d:
- if key != "_data":
- if not key in seen:
- seen.add(key)
- yield key
- return _keys(self.dict)
+ return klist
+
+ for k in keylist(self.dict):
+ yield k
def __len__(self):
return len(frozenset(self))
OpenPOWER on IntegriCloud