diff options
author | Richard Purdie <richard.purdie@linuxfoundation.org> | 2021-03-11 13:43:12 +0000 |
---|---|---|
committer | Richard Purdie <richard.purdie@linuxfoundation.org> | 2021-03-11 14:04:45 +0000 |
commit | b1a5b4373540aadd30e4b5b4b31851ab8593ca05 (patch) | |
tree | a4d882f0bd4161b64ba0a8e63e912086baf62283 /bitbake/lib/bb/event.py | |
parent | e6ec2b4dcc21b89f9c0e80d50c3e0405fb3ecda2 (diff) | |
download | poky-b1a5b4373540aadd30e4b5b4b31851ab8593ca05.tar.gz |
bitbake: event: Fix multiconfig event handler change performance regressions
There were two issues in this code, firstly the code could stack duplicates
in the variable, secondly, calling "if data" caused the datastore to compute
len(data) which is comparitively expensive. Checking "if data is not None"
is much much faster/cheaper.
The issue was clear from "bitbake -p -P" output where the time in register()
showed large amounts of time in the __len__ function of the datastore.
(Bitbake rev: 9298d08b7dcf9d79f54536f87686d65c4ad7deb9)
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
Diffstat (limited to 'bitbake/lib/bb/event.py')
-rw-r--r-- | bitbake/lib/bb/event.py | 22 |
1 files changed, 11 insertions, 11 deletions
diff --git a/bitbake/lib/bb/event.py b/bitbake/lib/bb/event.py index 3e5718395b..22171a9ca5 100644 --- a/bitbake/lib/bb/event.py +++ b/bitbake/lib/bb/event.py | |||
@@ -118,7 +118,7 @@ def fire_class_handlers(event, d): | |||
118 | if _eventfilter: | 118 | if _eventfilter: |
119 | if not _eventfilter(name, handler, event, d): | 119 | if not _eventfilter(name, handler, event, d): |
120 | continue | 120 | continue |
121 | if d and not name in (d.getVar("__BBHANDLERS_MC") or []): | 121 | if d and not name in (d.getVar("__BBHANDLERS_MC") or set()): |
122 | continue | 122 | continue |
123 | execute_handler(name, handler, event, d) | 123 | execute_handler(name, handler, event, d) |
124 | 124 | ||
@@ -232,15 +232,15 @@ noop = lambda _: None | |||
232 | def register(name, handler, mask=None, filename=None, lineno=None, data=None): | 232 | def register(name, handler, mask=None, filename=None, lineno=None, data=None): |
233 | """Register an Event handler""" | 233 | """Register an Event handler""" |
234 | 234 | ||
235 | if data and data.getVar("BB_CURRENT_MC"): | 235 | if data is not None and data.getVar("BB_CURRENT_MC"): |
236 | mc = data.getVar("BB_CURRENT_MC") | 236 | mc = data.getVar("BB_CURRENT_MC") |
237 | name = '%s%s' % (mc.replace('-', '_'), name) | 237 | name = '%s%s' % (mc.replace('-', '_'), name) |
238 | 238 | ||
239 | # already registered | 239 | # already registered |
240 | if name in _handlers: | 240 | if name in _handlers: |
241 | if data: | 241 | if data is not None: |
242 | bbhands_mc = (data.getVar("__BBHANDLERS_MC") or []) | 242 | bbhands_mc = (data.getVar("__BBHANDLERS_MC") or set()) |
243 | bbhands_mc.append(name) | 243 | bbhands_mc.add(name) |
244 | data.setVar("__BBHANDLERS_MC", bbhands_mc) | 244 | data.setVar("__BBHANDLERS_MC", bbhands_mc) |
245 | return AlreadyRegistered | 245 | return AlreadyRegistered |
246 | 246 | ||
@@ -278,16 +278,16 @@ def register(name, handler, mask=None, filename=None, lineno=None, data=None): | |||
278 | _event_handler_map[m] = {} | 278 | _event_handler_map[m] = {} |
279 | _event_handler_map[m][name] = True | 279 | _event_handler_map[m][name] = True |
280 | 280 | ||
281 | if data: | 281 | if data is not None: |
282 | bbhands_mc = (data.getVar("__BBHANDLERS_MC") or []) | 282 | bbhands_mc = (data.getVar("__BBHANDLERS_MC") or set()) |
283 | bbhands_mc.append(name) | 283 | bbhands_mc.add(name) |
284 | data.setVar("__BBHANDLERS_MC", bbhands_mc) | 284 | data.setVar("__BBHANDLERS_MC", bbhands_mc) |
285 | 285 | ||
286 | return Registered | 286 | return Registered |
287 | 287 | ||
288 | def remove(name, handler, data=None): | 288 | def remove(name, handler, data=None): |
289 | """Remove an Event handler""" | 289 | """Remove an Event handler""" |
290 | if data: | 290 | if data is not None: |
291 | if data.getVar("BB_CURRENT_MC"): | 291 | if data.getVar("BB_CURRENT_MC"): |
292 | mc = data.getVar("BB_CURRENT_MC") | 292 | mc = data.getVar("BB_CURRENT_MC") |
293 | name = '%s%s' % (mc.replace('-', '_'), name) | 293 | name = '%s%s' % (mc.replace('-', '_'), name) |
@@ -299,8 +299,8 @@ def remove(name, handler, data=None): | |||
299 | if name in _event_handler_map[event]: | 299 | if name in _event_handler_map[event]: |
300 | _event_handler_map[event].pop(name) | 300 | _event_handler_map[event].pop(name) |
301 | 301 | ||
302 | if data: | 302 | if data is not None: |
303 | bbhands_mc = (data.getVar("__BBHANDLERS_MC") or []) | 303 | bbhands_mc = (data.getVar("__BBHANDLERS_MC") or set()) |
304 | if name in bbhands_mc: | 304 | if name in bbhands_mc: |
305 | bbhands_mc.remove(name) | 305 | bbhands_mc.remove(name) |
306 | data.setVar("__BBHANDLERS_MC", bbhands_mc) | 306 | data.setVar("__BBHANDLERS_MC", bbhands_mc) |