mirror of
https://github.com/esphome/aioesphomeapi.git
synced 2024-09-27 04:22:46 +02:00
Add benchmarks for calling back bluetooth packets (#671)
This commit is contained in:
parent
33966938f2
commit
250f786c38
@ -573,14 +573,13 @@ class APIClient:
|
|||||||
async def subscribe_bluetooth_le_advertisements(
|
async def subscribe_bluetooth_le_advertisements(
|
||||||
self, on_bluetooth_le_advertisement: Callable[[BluetoothLEAdvertisement], None]
|
self, on_bluetooth_le_advertisement: Callable[[BluetoothLEAdvertisement], None]
|
||||||
) -> Callable[[], None]:
|
) -> Callable[[], None]:
|
||||||
msg_types = (BluetoothLEAdvertisementResponse,)
|
|
||||||
unsub_callback = self._get_connection().send_message_callback_response(
|
unsub_callback = self._get_connection().send_message_callback_response(
|
||||||
SubscribeBluetoothLEAdvertisementsRequest(flags=0),
|
SubscribeBluetoothLEAdvertisementsRequest(flags=0),
|
||||||
partial(
|
partial(
|
||||||
self._on_bluetooth_le_advertising_response,
|
self._on_bluetooth_le_advertising_response,
|
||||||
on_bluetooth_le_advertisement,
|
on_bluetooth_le_advertisement,
|
||||||
),
|
),
|
||||||
msg_types,
|
(BluetoothLEAdvertisementResponse,),
|
||||||
)
|
)
|
||||||
|
|
||||||
def unsub() -> None:
|
def unsub() -> None:
|
||||||
@ -602,13 +601,12 @@ class APIClient:
|
|||||||
async def subscribe_bluetooth_le_raw_advertisements(
|
async def subscribe_bluetooth_le_raw_advertisements(
|
||||||
self, on_advertisements: Callable[[list[BluetoothLERawAdvertisement]], None]
|
self, on_advertisements: Callable[[list[BluetoothLERawAdvertisement]], None]
|
||||||
) -> Callable[[], None]:
|
) -> Callable[[], None]:
|
||||||
msg_types = (BluetoothLERawAdvertisementsResponse,)
|
|
||||||
unsub_callback = self._get_connection().send_message_callback_response(
|
unsub_callback = self._get_connection().send_message_callback_response(
|
||||||
SubscribeBluetoothLEAdvertisementsRequest(
|
SubscribeBluetoothLEAdvertisementsRequest(
|
||||||
flags=BluetoothProxySubscriptionFlag.RAW_ADVERTISEMENTS
|
flags=BluetoothProxySubscriptionFlag.RAW_ADVERTISEMENTS
|
||||||
),
|
),
|
||||||
partial(self._on_ble_raw_advertisement_response, on_advertisements),
|
partial(self._on_ble_raw_advertisement_response, on_advertisements),
|
||||||
msg_types,
|
(BluetoothLERawAdvertisementsResponse,),
|
||||||
)
|
)
|
||||||
|
|
||||||
def unsub() -> None:
|
def unsub() -> None:
|
||||||
|
56
bench/raw_ble_plain_text_with_callback.py
Normal file
56
bench/raw_ble_plain_text_with_callback.py
Normal file
@ -0,0 +1,56 @@
|
|||||||
|
import timeit
|
||||||
|
from functools import partial
|
||||||
|
|
||||||
|
from aioesphomeapi import APIConnection
|
||||||
|
from aioesphomeapi.api_pb2 import (
|
||||||
|
BluetoothLERawAdvertisement,
|
||||||
|
BluetoothLERawAdvertisementsResponse,
|
||||||
|
)
|
||||||
|
from aioesphomeapi.client import APIClient
|
||||||
|
|
||||||
|
# cythonize -X language_level=3 -a -i aioesphomeapi/connection.py
|
||||||
|
|
||||||
|
|
||||||
|
class MockConnection(APIConnection):
|
||||||
|
pass
|
||||||
|
|
||||||
|
|
||||||
|
client = APIClient("fake.address", 6052, None)
|
||||||
|
connection = MockConnection(client._params, lambda expected_disconnect: None, None)
|
||||||
|
|
||||||
|
|
||||||
|
def process_incoming_msg():
|
||||||
|
connection.process_packet(
|
||||||
|
93,
|
||||||
|
b'\n\xb2\x01\x08\x01\x10\xab\x01\x18\x02"\xa8\x016c04010134000000'
|
||||||
|
b"e25389019500000001016f00250000002f6f72672f626c75657a2f686369302"
|
||||||
|
b"f64656c04010134000000e25389019500000001016f00250000002f6f72672f"
|
||||||
|
b"626c75657a2f686369302f6465\n\xb2\x01\x08\x01\x10\xab\x01\x18\x02"
|
||||||
|
b'"\xa8\x016c04010134000000e25389019500000001016f00250000002f6f726'
|
||||||
|
b"72f626c75657a2f686369302f64656c04010134000000e253890195000000010"
|
||||||
|
b"16f00250000002f6f72672f626c75657a2f686369302f6465\n\xb2\x01\x08"
|
||||||
|
b'\x01\x10\xab\x01\x18\x02"\xa8\x016c04010134000000e25389019500000'
|
||||||
|
b"001016f00250000002f6f72672f626c75657a2f686369302f64656c040101340"
|
||||||
|
b"00000e25389019500000001016f00250000002f6f72672f626c75657a2f68636"
|
||||||
|
b'9302f6465\n\xb2\x01\x08\x01\x10\xab\x01\x18\x02"\xa8\x016c040101'
|
||||||
|
b"34000000e25389019500000001016f00250000002f6f72672f626c75657a2f68"
|
||||||
|
b"6369302f64656c04010134000000e25389019500000001016f00250000002f6f"
|
||||||
|
b"72672f626c75657a2f686369302f6465\n\xb2\x01\x08\x01\x10\xab\x01"
|
||||||
|
b'\x18\x02"\xa8\x016c04010134000000e25389019500000001016f002500000'
|
||||||
|
b"02f6f72672f626c75657a2f686369302f64656c04010134000000e2538901950"
|
||||||
|
b"0000001016f00250000002f6f72672f626c75657a2f686369302f6465",
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
|
def on_advertisements(msgs: list[BluetoothLERawAdvertisement]):
|
||||||
|
pass
|
||||||
|
|
||||||
|
|
||||||
|
connection.add_message_callback(
|
||||||
|
partial(client._on_ble_raw_advertisement_response, on_advertisements),
|
||||||
|
(BluetoothLERawAdvertisementsResponse,),
|
||||||
|
)
|
||||||
|
|
||||||
|
count = 3000000
|
||||||
|
time = timeit.Timer(process_incoming_msg).timeit(count)
|
||||||
|
print(f"Processed {count} bluetooth messages took {time} seconds")
|
Loading…
Reference in New Issue
Block a user