diff options
author | Richard Purdie <richard.purdie@linuxfoundation.org> | 2011-06-10 17:23:33 +0100 |
---|---|---|
committer | Richard Purdie <richard.purdie@linuxfoundation.org> | 2011-06-28 15:27:40 +0100 |
commit | cc2a8ff5225e9fe987d8036970b2bf4293a13611 (patch) | |
tree | 61728fb75a8c92e9653e756abdbc82392efc8ebd /bitbake/lib | |
parent | fb3800178947e21899227e4ba4db4670b29231c7 (diff) | |
download | 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.py | 22 |
1 files changed, 12 insertions, 10 deletions
diff --git a/bitbake/lib/bb/data_smart.py b/bitbake/lib/bb/data_smart.py index 93c1b81aee..1fede8f01e 100644 --- a/bitbake/lib/bb/data_smart.py +++ b/bitbake/lib/bb/data_smart.py | |||
@@ -401,18 +401,20 @@ class DataSmart(MutableMapping): | |||
401 | yield key | 401 | yield key |
402 | 402 | ||
403 | def __iter__(self): | 403 | def __iter__(self): |
404 | seen = set() | 404 | def keylist(d): |
405 | def _keys(d): | 405 | klist = set() |
406 | for key in d: | ||
407 | if key == "_data": | ||
408 | continue | ||
409 | klist.add(key) | ||
410 | |||
406 | if "_data" in d: | 411 | if "_data" in d: |
407 | for key in _keys(d["_data"]): | 412 | klist |= keylist(d["_data"]) |
408 | yield key | ||
409 | 413 | ||
410 | for key in d: | 414 | return klist |
411 | if key != "_data": | 415 | |
412 | if not key in seen: | 416 | for k in keylist(self.dict): |
413 | seen.add(key) | 417 | yield k |
414 | yield key | ||
415 | return _keys(self.dict) | ||
416 | 418 | ||
417 | def __len__(self): | 419 | def __len__(self): |
418 | return len(frozenset(self)) | 420 | return len(frozenset(self)) |