feat: speed up marshalling messages (#352)

This commit is contained in:
J. Nick Koston 2025-01-07 12:51:41 -10:00 committed by GitHub
parent f9ec254150
commit b1e6551de3
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
2 changed files with 27 additions and 10 deletions

View File

@ -50,8 +50,9 @@ cdef class Message:
cdef public unsigned int serial
@cython.locals(
body_buffer=cython.bytearray,
header_buffer=cython.bytearray
body_buffer=bytearray,
header_buffer=bytearray,
var=Variant
)
cpdef _marshall(self, object negotiate_unix_fd)

View File

@ -325,21 +325,37 @@ class Message:
# Variant is invalid.
if self.path:
fields.append([HEADER_PATH, Variant("o", self.path, False)])
var = Variant.__new__(Variant)
var._init_variant("o", self.path, False)
fields.append([HEADER_PATH, var])
if self.interface:
fields.append([HEADER_INTERFACE, Variant("s", self.interface, False)])
var = Variant.__new__(Variant)
var._init_variant("s", self.interface, False)
fields.append([HEADER_INTERFACE, var])
if self.member:
fields.append([HEADER_MEMBER, Variant("s", self.member, False)])
var = Variant.__new__(Variant)
var._init_variant("s", self.member, False)
fields.append([HEADER_MEMBER, var])
if self.error_name:
fields.append([HEADER_ERROR_NAME, Variant("s", self.error_name, False)])
var = Variant.__new__(Variant)
var._init_variant("s", self.error_name, False)
fields.append([HEADER_ERROR_NAME, var])
if self.reply_serial:
fields.append([HEADER_REPLY_SERIAL, Variant("u", self.reply_serial, False)])
var = Variant.__new__(Variant)
var._init_variant("u", self.reply_serial, False)
fields.append([HEADER_REPLY_SERIAL, var])
if self.destination:
fields.append([HEADER_DESTINATION, Variant("s", self.destination, False)])
var = Variant.__new__(Variant)
var._init_variant("s", self.destination, False)
fields.append([HEADER_DESTINATION, var])
if self.signature:
fields.append([HEADER_SIGNATURE, Variant("g", self.signature, False)])
var = Variant.__new__(Variant)
var._init_variant("g", self.signature, False)
fields.append([HEADER_SIGNATURE, var])
if self.unix_fds and negotiate_unix_fd:
fields.append([HEADER_UNIX_FDS, Variant("u", len(self.unix_fds), False)])
var = Variant.__new__(Variant)
var._init_variant("u", len(self.unix_fds), False)
fields.append([HEADER_UNIX_FDS, var])
header_body = [
LITTLE_ENDIAN,