mirror of
https://github.com/home-assistant/core.git
synced 2025-04-25 01:38:02 +00:00
Optimize _async_track_event for the single key common case (#115242)
This commit is contained in:
parent
1de1e413a9
commit
11af7d91ff
@ -401,9 +401,6 @@ def _async_track_event(
|
|||||||
if not keys:
|
if not keys:
|
||||||
return _remove_empty_listener
|
return _remove_empty_listener
|
||||||
|
|
||||||
if isinstance(keys, str):
|
|
||||||
keys = [keys]
|
|
||||||
|
|
||||||
hass_data = hass.data
|
hass_data = hass.data
|
||||||
callbacks_key = tracker.callbacks_key
|
callbacks_key = tracker.callbacks_key
|
||||||
|
|
||||||
@ -422,11 +419,23 @@ def _async_track_event(
|
|||||||
|
|
||||||
job = HassJob(action, f"track {tracker.event_type} event {keys}", job_type=job_type)
|
job = HassJob(action, f"track {tracker.event_type} event {keys}", job_type=job_type)
|
||||||
|
|
||||||
for key in keys:
|
if isinstance(keys, str):
|
||||||
if callback_list := callbacks.get(key):
|
# Almost all calls to this function use a single key
|
||||||
|
# so we optimize for that case. We don't use setdefault
|
||||||
|
# here because this function gets called ~20000 times
|
||||||
|
# during startup, and we want to avoid the overhead of
|
||||||
|
# creating empty lists and throwing them away.
|
||||||
|
if callback_list := callbacks.get(keys):
|
||||||
callback_list.append(job)
|
callback_list.append(job)
|
||||||
else:
|
else:
|
||||||
callbacks[key] = [job]
|
callbacks[keys] = [job]
|
||||||
|
keys = [keys]
|
||||||
|
else:
|
||||||
|
for key in keys:
|
||||||
|
if callback_list := callbacks.get(key):
|
||||||
|
callback_list.append(job)
|
||||||
|
else:
|
||||||
|
callbacks[key] = [job]
|
||||||
|
|
||||||
return ft.partial(_remove_listener, hass, listeners_key, keys, job, callbacks)
|
return ft.partial(_remove_listener, hass, listeners_key, keys, job, callbacks)
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user