feat: speed up message bus matching (#70)

This commit is contained in:
J. Nick Koston 2022-10-02 23:08:12 -10:00 committed by GitHub
parent 3d325528f5
commit cccfea30b9
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 23 additions and 24 deletions

View File

@ -773,11 +773,11 @@ class BaseMessageBus:
break break
if msg.message_type == MessageType.SIGNAL: if msg.message_type == MessageType.SIGNAL:
if msg._matches( if (
member="NameOwnerChanged", # least likely to match msg.member == "NameOwnerChanged"
sender="org.freedesktop.DBus", and msg.sender == "org.freedesktop.DBus"
path="/org/freedesktop/DBus", and msg.path == "/org/freedesktop/DBus"
interface="org.freedesktop.DBus", and msg.interface == "org.freedesktop.DBus"
): ):
[name, old_owner, new_owner] = msg.body [name, old_owner, new_owner] = msg.body
if new_owner: if new_owner:
@ -827,23 +827,24 @@ class BaseMessageBus:
) -> Optional[Callable[[Message, Callable], None]]: ) -> Optional[Callable[[Message, Callable], None]]:
handler = None handler = None
if msg._matches( if (
interface="org.freedesktop.DBus.Introspectable", msg.interface == "org.freedesktop.DBus.Introspectable"
member="Introspect", and msg.member == "Introspect"
signature="", and msg.signature == ""
): ):
handler = self._default_introspect_handler handler = self._default_introspect_handler
elif msg._matches(interface="org.freedesktop.DBus.Properties"): elif msg.interface == "org.freedesktop.DBus.Properties":
handler = self._default_properties_handler handler = self._default_properties_handler
elif msg._matches(interface="org.freedesktop.DBus.Peer"): elif msg.interface == "org.freedesktop.DBus.Peer":
if msg._matches(member="Ping", signature=""): if msg.member == "Ping" and msg.signature == "":
handler = self._default_ping_handler handler = self._default_ping_handler
elif msg._matches(member="GetMachineId", signature=""): elif msg.member == "GetMachineId" and msg.signature == "":
handler = self._default_get_machine_id_handler handler = self._default_get_machine_id_handler
elif msg._matches( elif (
interface="org.freedesktop.DBus.ObjectManager", member="GetManagedObjects" msg.interface == "org.freedesktop.DBus.ObjectManager"
and msg.member == "GetManagedObjects"
): ):
handler = self._default_get_managed_objects_handler handler = self._default_get_managed_objects_handler
@ -852,10 +853,10 @@ class BaseMessageBus:
for method in ServiceInterface._get_methods(interface): for method in ServiceInterface._get_methods(interface):
if method.disabled: if method.disabled:
continue continue
if msg._matches( if (
interface=interface.name, msg.interface == interface.name
member=method.name, and msg.member == method.name
signature=method.in_signature, and msg.signature == method.in_signature
): ):
handler = self._make_method_handler(interface, method) handler = self._make_method_handler(interface, method)
break break

View File

@ -98,11 +98,9 @@ class BaseProxyInterface:
def _message_handler(self, msg: Message) -> None: def _message_handler(self, msg: Message) -> None:
if ( if (
not msg._matches( msg.message_type != MessageType.SIGNAL
message_type=MessageType.SIGNAL, or msg.interface != self.introspection.name
interface=self.introspection.name, or msg.path != self.path
path=self.path,
)
or msg.member not in self._signal_handlers or msg.member not in self._signal_handlers
): ):
return return