summaryrefslogtreecommitdiffstats
path: root/bitbake
diff options
context:
space:
mode:
authorRichard Purdie <richard.purdie@linuxfoundation.org>2021-03-11 13:43:12 +0000
committerRichard Purdie <richard.purdie@linuxfoundation.org>2021-03-11 14:04:45 +0000
commitb1a5b4373540aadd30e4b5b4b31851ab8593ca05 (patch)
treea4d882f0bd4161b64ba0a8e63e912086baf62283 /bitbake
parente6ec2b4dcc21b89f9c0e80d50c3e0405fb3ecda2 (diff)
downloadpoky-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')
-rw-r--r--bitbake/lib/bb/event.py22
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
232def register(name, handler, mask=None, filename=None, lineno=None, data=None): 232def 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
288def remove(name, handler, data=None): 288def 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)