kirr has uploaded this change for review. ( https://gerrit.osmocom.org/c/osmocom-bb/+/40077?usp=email )
Change subject: trx_toolkit/data_if: Switch DATAInterface to be used via C-level API from *.pyx ......................................................................
trx_toolkit/data_if: Switch DATAInterface to be used via C-level API from *.pyx
All those function to recv_tx_msg, recv_rx_msg, send_msg etc are on hot data plane code paths. Switching them to C cuts related py overhead from their invocations.
Change-Id: I163836040c794dfa4a757aa798e59f90bebcb2b9 --- M src/target/trx_toolkit/_fake_trx.pyx M src/target/trx_toolkit/data_if.pxd M src/target/trx_toolkit/data_if.pyx M src/target/trx_toolkit/transceiver.pyx 4 files changed, 13 insertions(+), 7 deletions(-)
git pull ssh://gerrit.osmocom.org:29418/osmocom-bb refs/changes/77/40077/1
diff --git a/src/target/trx_toolkit/_fake_trx.pyx b/src/target/trx_toolkit/_fake_trx.pyx index 5c55486..aa56afa 100644 --- a/src/target/trx_toolkit/_fake_trx.pyx +++ b/src/target/trx_toolkit/_fake_trx.pyx @@ -238,7 +238,7 @@ msg.rssi = RSSI_NOISE_DEFAULT msg.ci = CI_NOISE_DEFAULT
- self.data_if.send_msg(msg) + self.data_if._send_msg(msg) return
# Complete message header diff --git a/src/target/trx_toolkit/data_if.pxd b/src/target/trx_toolkit/data_if.pxd index 564a6cd..23dc49e 100644 --- a/src/target/trx_toolkit/data_if.pxd +++ b/src/target/trx_toolkit/data_if.pxd @@ -1,8 +1,13 @@ # cython: language_level=3
from udp_link cimport UDPLink +from data_msg cimport Msg, TxMsg, RxMsg
cdef class DATAInterface(UDPLink): cdef readonly int _hdr_ver
+ cdef bint match_hdr_ver(self, Msg msg) cdef recv_raw_data(self) + cdef TxMsg recv_tx_msg(self) # -> TxMsg | None + cdef RxMsg recv_rx_msg(self) # -> RxMsg | None + cdef _send_msg(self, Msg msg, bint legacy=*) diff --git a/src/target/trx_toolkit/data_if.pyx b/src/target/trx_toolkit/data_if.pyx index d5e4910..c355666 100644 --- a/src/target/trx_toolkit/data_if.pyx +++ b/src/target/trx_toolkit/data_if.pyx @@ -20,7 +20,6 @@
import logging as log
-from data_msg import *
cdef class DATAInterface(UDPLink): def __init__(self, *udp_link_args): @@ -46,7 +45,7 @@ # No suitable version found return -1
- def match_hdr_ver(self, msg): + cdef bint match_hdr_ver(self, Msg msg): if msg.ver == self._hdr_ver: return True
@@ -59,7 +58,7 @@ cdef recv_raw_data(self): return self.recv(512)
- def recv_tx_msg(self): + cdef TxMsg recv_tx_msg(self): # -> TxMsg | None # Read raw data from socket data = self.recv_raw_data()
@@ -79,7 +78,7 @@
return msg
- def recv_rx_msg(self): + cdef RxMsg recv_rx_msg(self): # -> RxMsg | None # Read raw data from socket data = self.recv_raw_data()
@@ -99,7 +98,9 @@
return msg
- def send_msg(self, msg, legacy = False): + def send_msg(self, Msg msg, bint legacy = False): + self._send_msg(msg, legacy) + cdef _send_msg(self, Msg msg, bint legacy = False): try: # Validate and encode a TRXD message payload = msg.gen_msg(legacy) diff --git a/src/target/trx_toolkit/transceiver.pyx b/src/target/trx_toolkit/transceiver.pyx index e852eda..2e8a064 100644 --- a/src/target/trx_toolkit/transceiver.pyx +++ b/src/target/trx_toolkit/transceiver.pyx @@ -292,7 +292,7 @@
cdef send_data_msg(self, RxMsg msg): # TODO: make legacy mode configurable (via argv?) - self.data_if.send_msg(msg, legacy = True) + self.data_if._send_msg(msg, legacy = True)
cdef handle_data_msg(self, Transceiver src_trx, TxMsg src_msg, RxMsg msg): self.send_data_msg(msg)