Skip to content

Commit a44824b

Browse files
committed
making caching more effective
1 parent d131eab commit a44824b

File tree

1 file changed

+11
-3
lines changed

1 file changed

+11
-3
lines changed

homeassistant/components/bluetooth/websocket_api.py

Lines changed: 11 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,9 @@ def async_setup(hass: HomeAssistant) -> None:
2727

2828

2929
@lru_cache(maxsize=1024)
30-
def serialize_service_info(service_info: BluetoothServiceInfoBleak) -> dict[str, Any]:
30+
def serialize_service_info(
31+
service_info: BluetoothServiceInfoBleak, time_diff: float
32+
) -> dict[str, Any]:
3133
"""Serialize a BluetoothServiceInfoBleak object."""
3234
return {
3335
"name": service_info.name,
@@ -44,7 +46,7 @@ def serialize_service_info(service_info: BluetoothServiceInfoBleak) -> dict[str,
4446
"service_uuids": service_info.service_uuids,
4547
"source": service_info.source,
4648
"connectable": service_info.connectable,
47-
"time": service_info.time + (time.time() - time.monotonic()),
49+
"time": service_info.time + time_diff,
4850
"tx_power": service_info.tx_power,
4951
}
5052

@@ -66,6 +68,12 @@ def __init__(
6668
self.ws_msg_id = ws_msg_id
6769
self.connection = connection
6870
self.pending = True
71+
# Keep time_diff precise to 2 decimal places
72+
# so the cached serialization can be reused,
73+
# however we still want to calculate it each
74+
# subscription in case the system clock is wrong
75+
# and gets corrected.
76+
self.time_diff = round(time.time() - time.monotonic(), 2)
6977

7078
@callback
7179
def async_start(self) -> None:
@@ -89,7 +97,7 @@ def _send_service_infos(
8997
websocket_api.event_message(
9098
self.ws_msg_id,
9199
[
92-
serialize_service_info(service_info)
100+
serialize_service_info(service_info, self.time_diff)
93101
for service_info in service_infos
94102
],
95103
)

0 commit comments

Comments
 (0)