some fixes
This commit is contained in:
@@ -5,6 +5,7 @@ from __future__ import annotations
|
||||
from contextlib import suppress
|
||||
import logging
|
||||
import threading
|
||||
import time
|
||||
from typing import Callable
|
||||
|
||||
from ..exceptions import DeviceDisconnectedError, TimeoutError
|
||||
@@ -44,6 +45,10 @@ class USBTransport:
|
||||
self._rx_thread: threading.Thread | None = None
|
||||
self._stop_event = threading.Event()
|
||||
self._tx_lock = threading.Lock()
|
||||
# Aggregation window for the RX debug trace (see `_rx_loop`).
|
||||
self._rx_debug_bytes = 0
|
||||
self._rx_debug_chunks = 0
|
||||
self._rx_debug_window_start = 0.0
|
||||
|
||||
self.connected_serial: str | None = None
|
||||
|
||||
@@ -270,7 +275,27 @@ class USBTransport:
|
||||
|
||||
if data:
|
||||
if logger.isEnabledFor(logging.DEBUG):
|
||||
logger.debug("USB RX %d bytes", len(data))
|
||||
# Aggregate: the free-running datapoint stream completes bulk
|
||||
# reads hundreds of times per second, and a log record per chunk
|
||||
# floods every handler (file, stderr, and the GUI panel, which
|
||||
# marshals each record onto the GUI thread). One summary per
|
||||
# second keeps the throughput trace without the flood.
|
||||
self._rx_debug_bytes += len(data)
|
||||
self._rx_debug_chunks += 1
|
||||
now = time.monotonic()
|
||||
if self._rx_debug_window_start == 0.0:
|
||||
self._rx_debug_window_start = now
|
||||
elif now - self._rx_debug_window_start >= 1.0:
|
||||
logger.debug(
|
||||
"USB RX %d bytes in %d chunks over %.2f s (serial=%s)",
|
||||
self._rx_debug_bytes,
|
||||
self._rx_debug_chunks,
|
||||
now - self._rx_debug_window_start,
|
||||
self.connected_serial,
|
||||
)
|
||||
self._rx_debug_bytes = 0
|
||||
self._rx_debug_chunks = 0
|
||||
self._rx_debug_window_start = now
|
||||
self._on_data(bytes(data))
|
||||
logger.debug("USB RX thread stopped")
|
||||
|
||||
|
||||
Reference in New Issue
Block a user