Guard hot-path log calls to avoid payload rendering when disabled
Wrap `log.transport()` in `Channel.send()` and `log.runtime()` in `PldRx.decode_pld()` with `log.at_least_level()` checks so that expensive `pformat(payload)` / `repr(msg)` / `repr(pld)` calls are skipped entirely when the respective log level is not active. Previously the f-string arguments were eagerly evaluated before being passed to the log method, even though `StackLevelAdapter.log()` would then discard the message internally via its own `isEnabledFor()` check. On high-frequency IPC paths this caused `pformat` to dominate CPU usage (~60-70 %) as reported in #455. This also restores the full diagnostic output (msg type, decoded payload) that was temporarily commented out in 0373164 as a stopgap. Resolves #455wkt/start_or_cancel_tests_474
parent
148a098ca6
commit
0e11ff7e9d
|
|
@ -325,10 +325,12 @@ class Channel:
|
|||
'''
|
||||
__tracebackhide__: bool = hide_tb
|
||||
try:
|
||||
log.transport(
|
||||
'=> send IPC msg\n\n'
|
||||
# f'{pformat(payload)}\n'
|
||||
)
|
||||
if log.at_least_level('transport'):
|
||||
# don't materialize the payload repr if not necessary
|
||||
log.transport(
|
||||
'=> send IPC msg:\n\n'
|
||||
f'{pformat(payload)}\n'
|
||||
)
|
||||
# assert self._transport # but why typing?
|
||||
await self._transport.send(
|
||||
payload,
|
||||
|
|
|
|||
|
|
@ -306,15 +306,15 @@ class PldRx(Struct):
|
|||
):
|
||||
try:
|
||||
pld: PayloadT = self._pld_dec.decode(pld)
|
||||
log.runtime(
|
||||
f'Decoded payload for\n'
|
||||
# # f'\n'
|
||||
# f'{msg}\n'
|
||||
# # ^TODO?, ideally just render with `,
|
||||
# # pld={decode}` in the `msg.pformat()`??
|
||||
# f'where, '
|
||||
# f'{type(msg).__name__}.pld={pld!r}\n'
|
||||
)
|
||||
if log.at_least_level('runtime'):
|
||||
# don't materialize the payload repr if not necessary
|
||||
log.runtime(
|
||||
f'Decoded payload for\n'
|
||||
f'\n'
|
||||
f'{msg}\n'
|
||||
f'where, '
|
||||
f'{type(msg).__name__}.pld={pld!r}\n'
|
||||
)
|
||||
return pld
|
||||
except TypeError as typerr:
|
||||
__tracebackhide__: bool = False
|
||||
|
|
|
|||
Loading…
Reference in New Issue